539
539
path = self._inventory.id2path(file_id)
540
540
return self._hashcache.get_sha1(path)
542
def get_file_mtime(self, file_id, path=None):
544
path = self._inventory.id2path(file_id)
545
return os.lstat(self.abspath(path)).st_mtime
542
547
if not supports_executable():
543
548
def is_executable(self, file_id, path=None):
544
549
return self._inventory[file_id].executable
1194
1199
def _cache_basis_inventory(self, new_revision):
1195
1200
"""Cache new_revision as the basis inventory."""
1201
# TODO: this should allow the ready-to-use inventory to be passed in,
1202
# as commit already has that ready-to-use [while the format is the
1197
1205
# this double handles the inventory - unpack and repack -
1198
1206
# but is easier to understand. We can/should put a conditional
1199
1207
# in here based on whether the inventory is in the latest format
1200
1208
# - perhaps we should repack all inventories on a repository
1202
inv = self.branch.repository.get_inventory(new_revision)
1203
inv.revision_id = new_revision
1204
xml = bzrlib.xml5.serializer_v5.write_inventory_to_string(inv)
1210
# the fast path is to copy the raw xml from the repository. If the
1211
# xml contains 'revision_id="', then we assume the right
1212
# revision_id is set. We must check for this full string, because a
1213
# root node id can legitimately look like 'revision_id' but cannot
1215
xml = self.branch.repository.get_inventory_xml(new_revision)
1216
if not 'revision_id="' in xml.split('\n', 1)[0]:
1217
inv = self.branch.repository.deserialise_inventory(
1219
inv.revision_id = new_revision
1220
xml = bzrlib.xml5.serializer_v5.write_inventory_to_string(inv)
1206
1222
path = self._basis_inventory_name()
1207
1223
self._control_files.put_utf8(path, xml)