manifest: introduce memmanifestctx and memtreemanifestctx
This introduces two new classes to represent in-memory manifest instances.
Similar to memchangectx, this lets us prepare a manifest in memory, then in a
future patch we will add the apis that can commit this in memory structure.
--- a/mercurial/manifest.py Tue Nov 08 08:03:43 2016 -0800
+++ b/mercurial/manifest.py Tue Nov 08 08:03:43 2016 -0800
@@ -1323,6 +1323,17 @@
def add(self, m, transaction, link, p1, p2, added, removed):
return self._revlog.add(m, transaction, link, p1, p2, added, removed)
+class memmanifestctx(object):
+ def __init__(self, repo):
+ self._repo = repo
+ self._manifestdict = manifestdict()
+
+ def new(self):
+ return memmanifestctx(self._repo)
+
+ def read(self):
+ return self._manifestdict
+
class manifestctx(object):
"""A class representing a single revision of a manifest, including its
contents, its parent revs, and its linkrev.
@@ -1346,6 +1357,9 @@
def node(self):
return self._node
+ def new(self):
+ return memmanifestctx(self._repo)
+
def read(self):
if not self._data:
if self._node == revlog.nullid:
@@ -1400,6 +1414,18 @@
def find(self, key):
return self.read().find(key)
+class memtreemanifestctx(object):
+ def __init__(self, repo, dir=''):
+ self._repo = repo
+ self._dir = dir
+ self._treemanifest = treemanifest()
+
+ def new(self, dir=''):
+ return memtreemanifestctx(self._repo, dir=dir)
+
+ def read(self):
+ return self._treemanifest
+
class treemanifestctx(object):
def __init__(self, repo, dir, node):
self._repo = repo
@@ -1443,6 +1469,9 @@
def node(self):
return self._node
+ def new(self, dir=''):
+ return memtreemanifestctx(self._repo, dir=dir)
+
def readdelta(self, shallow=False):
'''Returns a manifest containing just the entries that are present
in this manifest, but not in its p1 manifest. This is efficient to read