Patchwork D3883: manifest: define and implement addgroup() on manifestlog

login
register
mail settings
Submitter phabricator
Date July 4, 2018, 7:16 p.m.
Message ID <differential-rev-PHID-DREV-tugrao42dkcozaodk3ue-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/32616/
State Superseded
Headers show

Comments

phabricator - July 4, 2018, 7:16 p.m.
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




To: indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

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