17
17
"""Tree classes, representing directory at point in time.
20
from osutils import pumpfile, appendpath, fingerprint_file
21
from cStringIO import StringIO
23
from bzrlib.trace import mutter, note
24
from bzrlib.errors import BzrError
24
from bzrlib.trace import mutter, note
25
from bzrlib.errors import BzrError, BzrCheckError
26
from bzrlib.inventory import Inventory
27
from bzrlib.osutils import pumpfile, appendpath, fingerprint_file
69
67
def _get_inventory(self):
70
68
return self._inventory
72
def get_file_by_path(self, path):
73
return self.get_file(self._inventory.path2id(path))
75
70
inventory = property(_get_inventory,
76
71
doc="Inventory of this Tree")
93
88
"store is probably damaged/corrupt"])
96
def print_file(self, file_id):
97
"""Print file with id `file_id` to stdout."""
91
def print_file(self, fileid):
92
"""Print file with id `fileid` to stdout."""
99
sys.stdout.write(self.get_file_text(file_id))
94
pumpfile(self.get_file(fileid), sys.stdout)
102
97
def export(self, dest, format='dir', root=None):
120
115
or at least passing a description to the constructor.
123
def __init__(self, weave_store, inv, revision_id):
124
self._weave_store = weave_store
118
def __init__(self, store, inv):
125
120
self._inventory = inv
126
self._revision_id = revision_id
128
def get_file_text(self, file_id):
129
ie = self._inventory[file_id]
130
weave = self._weave_store.get_weave(file_id)
131
idx = weave.lookup(self._revision_id)
132
content = weave.get_text(idx)
133
if len(content) != ie.text_size:
134
raise BzrCheckError('mismatched size on revision %s of file %s: '
136
% (self._revision_id, file_id, len(content),
140
122
def get_file(self, file_id):
141
return StringIO(self.get_file_text(file_id))
123
ie = self._inventory[file_id]
124
f = self._store[ie.text_id]
125
mutter(" get fileid{%s} from %r" % (file_id, self))
126
self._check_retrieved(ie, f)
143
129
def get_file_size(self, file_id):
144
130
return self._inventory[file_id].text_size
146
132
def get_file_sha1(self, file_id):
147
133
ie = self._inventory[file_id]
148
if ie.kind == "file":
151
136
def has_filename(self, filename):
152
137
return bool(self.inventory.path2id(filename))
160
145
class EmptyTree(Tree):
162
self._inventory = Inventory()
146
def __init__(self, root_id):
147
from bzrlib.inventory import Inventory
148
self._inventory = Inventory(root_id)
164
150
def has_filename(self, filename):
168
154
if False: # just to make it a generator
171
def __contains__(self, file_id):
172
return file_id in self._inventory
174
def get_file_sha1(self, file_id):
175
assert self._inventory[file_id].kind == "root_directory"
181
159
######################################################################