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.text_version)
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":
140
155
def has_filename(self, filename):
141
156
return bool(self.inventory.path2id(filename))
145
160
for path, entry in self.inventory.iter_entries():
146
161
yield path, 'V', entry.kind, entry.file_id
163
def get_symlink_target(self, file_id):
164
ie = self._inventory[file_id]
165
return ie.symlink_target;
149
167
class EmptyTree(Tree):
150
168
def __init__(self):
151
169
self._inventory = Inventory()
171
def get_symlink_target(self, file_id):
153
174
def has_filename(self, filename):
157
178
if False: # just to make it a generator
181
def __contains__(self, file_id):
182
return file_id in self._inventory
184
def get_file_sha1(self, file_id):
185
assert self._inventory[file_id].kind == "root_directory"
162
191
######################################################################
251
280
os.mkdir(fullpath)
252
281
elif kind == 'file':
253
282
pumpfile(tree.get_file(ie.file_id), file(fullpath, 'wb'))
283
elif kind == 'symlink':
285
os.symlink(ie.symlink_target, fullpath)
287
raise BzrError("Failed to create symlink %r -> %r, error: %s" % (fullpath, ie.symlink_target, e))
255
289
raise BzrError("don't know how to export {%s} of kind %r" % (ie.file_id, kind))
256
290
mutter(" export {%s} kind %s to %s" % (ie.file_id, kind, fullpath))