1274 return cachemf |
1274 return cachemf |
1275 |
1275 |
1276 if self._treeinmem: |
1276 if self._treeinmem: |
1277 m = treemanifestctx(self._revlog, '', node) |
1277 m = treemanifestctx(self._revlog, '', node) |
1278 else: |
1278 else: |
1279 m = manifestctx(self._revlog, node) |
1279 m = manifestctx(self._repo, node) |
1280 if node != revlog.nullid: |
1280 if node != revlog.nullid: |
1281 self._mancache[node] = m |
1281 self._mancache[node] = m |
1282 return m |
1282 return m |
1283 |
1283 |
1284 def add(self, m, transaction, link, p1, p2, added, removed): |
1284 def add(self, m, transaction, link, p1, p2, added, removed): |
1286 |
1286 |
1287 class manifestctx(object): |
1287 class manifestctx(object): |
1288 """A class representing a single revision of a manifest, including its |
1288 """A class representing a single revision of a manifest, including its |
1289 contents, its parent revs, and its linkrev. |
1289 contents, its parent revs, and its linkrev. |
1290 """ |
1290 """ |
1291 def __init__(self, revlog, node): |
1291 def __init__(self, repo, node): |
1292 self._revlog = revlog |
1292 self._repo = repo |
1293 self._data = None |
1293 self._data = None |
1294 |
1294 |
1295 self._node = node |
1295 self._node = node |
1296 |
1296 |
1297 # TODO: We eventually want p1, p2, and linkrev exposed on this class, |
1297 # TODO: We eventually want p1, p2, and linkrev exposed on this class, |
1307 def read(self): |
1307 def read(self): |
1308 if not self._data: |
1308 if not self._data: |
1309 if self._node == revlog.nullid: |
1309 if self._node == revlog.nullid: |
1310 self._data = manifestdict() |
1310 self._data = manifestdict() |
1311 else: |
1311 else: |
1312 text = self._revlog.revision(self._node) |
1312 rl = self._repo.manifestlog._revlog |
|
1313 text = rl.revision(self._node) |
1313 arraytext = array.array('c', text) |
1314 arraytext = array.array('c', text) |
1314 self._revlog._fulltextcache[self._node] = arraytext |
1315 rl._fulltextcache[self._node] = arraytext |
1315 self._data = manifestdict(text) |
1316 self._data = manifestdict(text) |
1316 return self._data |
1317 return self._data |
1317 |
1318 |
1318 def readfast(self): |
1319 def readfast(self): |
1319 rl = self._revlog |
1320 rl = self._repo.manifestlog._revlog |
1320 r = rl.rev(self._node) |
1321 r = rl.rev(self._node) |
1321 deltaparent = rl.deltaparent(r) |
1322 deltaparent = rl.deltaparent(r) |
1322 if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r): |
1323 if deltaparent != revlog.nullrev and deltaparent in rl.parentrevs(r): |
1323 return self.readdelta() |
1324 return self.readdelta() |
1324 return self.read() |
1325 return self.read() |
1325 |
1326 |
1326 def readdelta(self): |
1327 def readdelta(self): |
1327 revlog = self._revlog |
1328 revlog = self._repo.manifestlog._revlog |
1328 if revlog._usemanifestv2: |
1329 if revlog._usemanifestv2: |
1329 # Need to perform a slow delta |
1330 # Need to perform a slow delta |
1330 r0 = revlog.deltaparent(revlog.rev(self._node)) |
1331 r0 = revlog.deltaparent(revlog.rev(self._node)) |
1331 m0 = manifestctx(revlog, revlog.node(r0)).read() |
1332 m0 = manifestctx(self._repo, revlog.node(r0)).read() |
1332 m1 = self.read() |
1333 m1 = self.read() |
1333 md = manifestdict() |
1334 md = manifestdict() |
1334 for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems(): |
1335 for f, ((n0, fl0), (n1, fl1)) in m0.diff(m1).iteritems(): |
1335 if n1: |
1336 if n1: |
1336 md[f] = n1 |
1337 md[f] = n1 |