17
17
"""Tree classes, representing directory at point in time.
20
from osutils import pumpfile, appendpath, fingerprint_file
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
26
from bzrlib.inventory import Inventory
27
from bzrlib.osutils import pumpfile, appendpath, fingerprint_file
67
69
def _get_inventory(self):
68
70
return self._inventory
72
def get_file_by_path(self, path):
73
return self.get_file(self._inventory.path2id(path))
70
75
inventory = property(_get_inventory,
71
76
doc="Inventory of this Tree")
88
93
"store is probably damaged/corrupt"])
91
def print_file(self, fileid):
92
"""Print file with id `fileid` to stdout."""
96
def print_file(self, file_id):
97
"""Print file with id `file_id` to stdout."""
94
pumpfile(self.get_file(fileid), sys.stdout)
99
sys.stdout.write(self.get_file_text(file_id))
97
102
def export(self, dest, format='dir', root=None):
115
120
or at least passing a description to the constructor.
118
def __init__(self, store, inv):
123
def __init__(self, weave_store, inv, revision_id):
124
self._weave_store = weave_store
120
125
self._inventory = inv
126
self._revision_id = revision_id
128
def get_weave(self, file_id):
129
return self._weave_store.get_weave(file_id)
132
def get_file_text(self, file_id):
133
ie = self._inventory[file_id]
134
weave = self.get_weave(file_id)
135
idx = weave.lookup(ie.text_version)
136
content = weave.get_text(idx)
137
if len(content) != ie.text_size:
138
raise BzrCheckError('mismatched size on revision %s of file %s: '
140
% (self._revision_id, file_id, len(content),
122
144
def get_file(self, 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)
145
return StringIO(self.get_file_text(file_id))
129
147
def get_file_size(self, file_id):
130
148
return self._inventory[file_id].text_size
132
150
def get_file_sha1(self, file_id):
133
151
ie = self._inventory[file_id]
152
if ie.kind == "file":
136
155
def has_filename(self, filename):
137
156
return bool(self.inventory.path2id(filename))
145
164
class EmptyTree(Tree):
146
def __init__(self, root_id):
147
from bzrlib.inventory import Inventory
148
self._inventory = Inventory(root_id)
166
self._inventory = Inventory()
150
168
def has_filename(self, filename):
154
172
if False: # just to make it a generator
175
def __contains__(self, file_id):
176
return file_id in self._inventory
178
def get_file_sha1(self, file_id):
179
assert self._inventory[file_id].kind == "root_directory"
159
185
######################################################################