21
from cStringIO import StringIO
23
24
from bzrlib.trace import mutter, note
24
from bzrlib.errors import BzrError
25
from bzrlib.errors import BzrError, BzrCheckError
25
26
from bzrlib.inventory import Inventory
26
27
from bzrlib.osutils import pumpfile, appendpath, fingerprint_file
92
95
"store is probably damaged/corrupt"])
95
def print_file(self, fileid):
96
"""Print file with id `fileid` to stdout."""
98
def print_file(self, file_id):
99
"""Print file with id `file_id` to stdout."""
98
pumpfile(self.get_file(fileid), sys.stdout)
101
sys.stdout.write(self.get_file_text(file_id))
101
104
def export(self, dest, format='dir', root=None):
119
122
or at least passing a description to the constructor.
122
def __init__(self, store, inv):
125
def __init__(self, weave_store, inv, revision_id):
126
self._weave_store = weave_store
124
127
self._inventory = inv
128
self._revision_id = revision_id
130
def get_weave(self, file_id):
131
return self._weave_store.get_weave(file_id)
134
def get_file_lines(self, file_id):
135
ie = self._inventory[file_id]
136
weave = self.get_weave(file_id)
137
return weave.get(ie.revision)
140
def get_file_text(self, file_id):
141
return ''.join(self.get_file_lines(file_id))
126
144
def get_file(self, file_id):
127
ie = self._inventory[file_id]
128
f = self._store[ie.text_id]
129
mutter(" get fileid{%s} from %r" % (file_id, self))
130
self._check_retrieved(ie, f)
145
return StringIO(self.get_file_text(file_id))
133
147
def get_file_size(self, file_id):
134
148
return self._inventory[file_id].text_size
136
150
def get_file_sha1(self, file_id):
137
151
ie = self._inventory[file_id]
152
if ie.kind == "file":
155
def is_executable(self, file_id):
156
return self._inventory[file_id].executable
140
158
def has_filename(self, filename):
141
159
return bool(self.inventory.path2id(filename))
145
163
for path, entry in self.inventory.iter_entries():
146
164
yield path, 'V', entry.kind, entry.file_id
166
def get_symlink_target(self, file_id):
167
ie = self._inventory[file_id]
168
return ie.symlink_target;
149
170
class EmptyTree(Tree):
150
171
def __init__(self):
151
172
self._inventory = Inventory()
174
def get_symlink_target(self, file_id):
153
177
def has_filename(self, filename):
157
181
if False: # just to make it a generator
184
def __contains__(self, file_id):
185
return file_id in self._inventory
187
def get_file_sha1(self, file_id):
188
assert self._inventory[file_id].kind == "root_directory"
162
194
######################################################################
251
283
os.mkdir(fullpath)
252
284
elif kind == 'file':
253
285
pumpfile(tree.get_file(ie.file_id), file(fullpath, 'wb'))
286
if tree.is_executable(ie.file_id):
287
os.chmod(fullpath, 0755)
288
elif kind == 'symlink':
290
os.symlink(ie.symlink_target, fullpath)
292
raise BzrError("Failed to create symlink %r -> %r, error: %s" % (fullpath, ie.symlink_target, e))
255
294
raise BzrError("don't know how to export {%s} of kind %r" % (ie.file_id, kind))
256
295
mutter(" export {%s} kind %s to %s" % (ie.file_id, kind, fullpath))
316
355
item.type = tarfile.REGTYPE
317
356
fileobj = tree.get_file(ie.file_id)
318
357
item.size = _find_file_size(fileobj)
358
if tree.is_executable(ie.file_id):
321
363
raise BzrError("don't know how to export {%s} of kind %r" %
322
364
(ie.file_id, ie.kind))