[PATCH 5 of 9 V3] manifest: add manifestlog.get to obtain subdirectory instances
Durham Goode
durham at fb.com
Tue Sep 20 15:36:27 EDT 2016
# HG changeset patch
# User Durham Goode <durham at fb.com>
# Date 1474399441 25200
# Tue Sep 20 12:24:01 2016 -0700
# Node ID 52a206d772021194ab4356aeba2c73650851a624
# Parent 8cf5f24c100e58ece712703d0e4bb0746bc3087e
manifest: add manifestlog.get to obtain subdirectory instances
Previously manifestlog only allowed obtaining root level manifests. Future
patches will need direct access to subdirectory manifests as part of changegroup
creation, so let's add a get() function that knows how to deal with
subdirectories.
diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -1033,20 +1033,34 @@ class manifestlog(object):
"""Retrieves the manifest instance for the given node. Throws a KeyError
if not found.
"""
- if node in self._mancache:
- cachemf = self._mancache[node]
- # The old manifest may put non-ctx manifests in the cache, so skip
- # those since they don't implement the full api.
- if (isinstance(cachemf, manifestctx) or
- isinstance(cachemf, treemanifestctx)):
- return cachemf
+ return self.get('', node)
- if self._treeinmem:
- m = treemanifestctx(self._revlog, '', node)
+ def get(self, dir, node):
+ """Retrieves the manifest instance for the given node. Throws a KeyError
+ if not found.
+ """
+ if dir:
+ if self._revlog._treeondisk:
+ m = treemanifestctx(self._revlog.dirlog(dir), dir, node)
+ else:
+ raise error.Abort(
+ _("cannot ask for manifest directory '%s' in a flat "
+ "manifest") % dir)
else:
- m = manifestctx(self._revlog, node)
- if node != revlog.nullid:
- self._mancache[node] = m
+ if node in self._mancache:
+ cachemf = self._mancache[node]
+ # The old manifest may put non-ctx manifests in the cache, so
+ # skip those since they don't implement the full api.
+ if (isinstance(cachemf, manifestctx) or
+ isinstance(cachemf, treemanifestctx)):
+ return cachemf
+
+ if self._treeinmem:
+ m = treemanifestctx(self._revlog, '', node)
+ else:
+ m = manifestctx(self._revlog, node)
+ if node != revlog.nullid:
+ self._mancache[node] = m
return m
def add(self, m, transaction, link, p1, p2, added, removed):
More information about the Mercurial-devel
mailing list