D3883: manifest: define and implement addgroup() on manifestlog
indygreg (Gregory Szorc)
phabricator at mercurial-scm.org
Wed Jul 4 19:16:44 UTC 2018
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
Changegroup code was bypassing our manifest interface and calling a
method on the private revlog attribute.
This commit formalizes the interface for adding a group of
revisions from deltas and changes the changegroup code to use it.
This enables alternate manifest storage to work with changegroup
application operations (like `hg unbundle` and `hg pull`).
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D3883
AFFECTED FILES
mercurial/changegroup.py
mercurial/manifest.py
mercurial/repository.py
CHANGE DETAILS
diff --git a/mercurial/repository.py b/mercurial/repository.py
--- a/mercurial/repository.py
+++ b/mercurial/repository.py
@@ -928,6 +928,22 @@
Raises ``error.LookupError`` if the node is not known.
"""
+ def addgroup(deltas, linkmapper, transaction):
+ """Process a series of deltas for storage.
+
+ ``deltas`` is an iterable of 7-tuples of
+ (node, p1, p2, linknode, deltabase, delta, flags) defining revisions
+ to add.
+
+ The ``delta`` field contains ``mpatch`` data to apply to a base
+ revision, identified by ``deltabase``. The base node can be
+ ``nullid``, in which case the header from the delta can be ignored
+ and the delta used as the fulltext.
+
+ Returns a list of nodes that were processed. A node will be in the list
+ even if it existed in the store previously.
+ """
+
class completelocalrepository(interfaceutil.Interface):
"""Monolithic interface for local repositories.
diff --git a/mercurial/manifest.py b/mercurial/manifest.py
--- a/mercurial/manifest.py
+++ b/mercurial/manifest.py
@@ -1351,6 +1351,9 @@
def rev(self, node):
return self._revlog.rev(node)
+ def addgroup(self, deltas, linkmapper, transaction):
+ return self._revlog.addgroup(deltas, linkmapper, transaction)
+
@interfaceutil.implementer(repository.imanifestrevisionwritable)
class memmanifestctx(object):
def __init__(self, manifestlog):
diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -245,7 +245,7 @@
# be empty during the pull
self.manifestheader()
deltas = self.deltaiter()
- repo.manifestlog._revlog.addgroup(deltas, revmap, trp)
+ repo.manifestlog.addgroup(deltas, revmap, trp)
prog.complete()
self.callback = None
To: indygreg, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list