[PATCH 3 of 5 v3] bundle2: record changegroup data in 'op.records' (API)

Martin von Zweigbergk martinvonz at google.com
Thu Jun 22 16:52:19 EDT 2017


# HG changeset patch
# User Martin von Zweigbergk <martinvonz at google.com>
# Date 1497657376 25200
#      Fri Jun 16 16:56:16 2017 -0700
# Node ID 601cef5652c4d856ebc99da39cdf98fad2bda3e0
# Parent  7faa57713bec79527a9072f5a182b1442e768e54
bundle2: record changegroup data in 'op.records' (API)

When adding support for bundling and unbundling phases, it will be
useful to have the list of added changesets. To do that, we return the
list from changegroup.apply().

diff --git a/mercurial/bundle2.py b/mercurial/bundle2.py
--- a/mercurial/bundle2.py
+++ b/mercurial/bundle2.py
@@ -1492,9 +1492,12 @@
         op.repo.requirements.add('treemanifest')
         op.repo._applyopenerreqs()
         op.repo._writerequirements()
-    ret = cg.apply(op.repo, tr, 'bundle2', 'bundle2',
-                   expectedtotal=nbchangesets)
-    op.records.add('changegroup', {'return': ret})
+    ret, addednodes = cg.apply(op.repo, tr, 'bundle2', 'bundle2',
+                               expectedtotal=nbchangesets)
+    op.records.add('changegroup', {
+        'return': ret,
+        'addednodes': addednodes,
+    })
     if op.reply is not None:
         # This is definitely not the final form of this
         # return. But one need to start somewhere.
@@ -1557,8 +1560,11 @@
     if not isinstance(cg, changegroup.cg1unpacker):
         raise error.Abort(_('%s: not a bundle version 1.0') %
             util.hidepassword(raw_url))
-    ret = cg.apply(op.repo, tr, 'bundle2', 'bundle2')
-    op.records.add('changegroup', {'return': ret})
+    ret, addednodes = cg.apply(op.repo, tr, 'bundle2', 'bundle2')
+    op.records.add('changegroup', {
+        'return': ret,
+        'addednodes': addednodes,
+    })
     if op.reply is not None:
         # This is definitely not the final form of this
         # return. But one need to start somewhere.
diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py
--- a/mercurial/changegroup.py
+++ b/mercurial/changegroup.py
@@ -426,9 +426,10 @@
             repo.ui.flush()
         # never return 0 here:
         if deltaheads < 0:
-            return deltaheads - 1
+            ret = deltaheads - 1
         else:
-            return deltaheads + 1
+            ret = deltaheads + 1
+        return ret, added
 
 class cg2unpacker(cg1unpacker):
     """Unpacker for cg2 streams.
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -5290,7 +5290,7 @@
             else:
                 txnname = 'unbundle\n%s' % util.hidepassword(url)
                 with repo.transaction(txnname) as tr:
-                    modheads = gen.apply(repo, tr, 'unbundle', url)
+                    modheads, addednodes = gen.apply(repo, tr, 'unbundle', url)
 
     return postincoming(ui, repo, modheads, opts.get(r'update'), None, None)
 
diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -1449,7 +1449,8 @@
                            "changegroupsubset."))
     else:
         cg = pullop.remote.changegroupsubset(pullop.fetch, pullop.heads, 'pull')
-    pullop.cgresult = cg.apply(pullop.repo, tr, 'pull', pullop.remote.url())
+    pullop.cgresult, addednodes = cg.apply(pullop.repo, tr, 'pull',
+                                           pullop.remote.url())
 
 def _pullphase(pullop):
     # Get remote phases data from remote
@@ -1736,7 +1737,7 @@
             # legacy case: bundle1 (changegroup 01)
             txnname = "\n".join([source, util.hidepassword(url)])
             with repo.lock(), repo.transaction(txnname) as tr:
-                r = cg.apply(repo, tr, source, url)
+                r, addednodes = cg.apply(repo, tr, source, url)
         else:
             r = None
             try:


More information about the Mercurial-devel mailing list