diff mercurial/changegroup.py @ 42897:d7304434390f

changegroup: move message about added changes to transaction summary Before that, applying multiple changegroups in the same transaction issued the message multiple time. This result in a confusing output: adding changesets adding manifests adding file changes added 32768 changesets with 60829 changes to 2668 files adding changesets adding manifests adding file changes added 8192 changesets with 16885 changes to 1553 files adding changesets adding manifests adding file changes added 1020 changesets with 1799 changes to 536 files adding changesets adding manifests ... Instead, we now only issue the message once at the end of the transaction, summing up all added changesets, changes and files. The line is identical, but happens sightly later in the output. There are other suboptimal behavior around issue multiple changegroup (eg: progress bar). We'll cover them later. This impact of lot of test as one would expect, but a two pass check show they are just the order change we expected. To deal with "under the hood" bundle application by internal code, we had to take a slightly hacky move. We could clean that up with a more official way to enter "under the hood" section, however I want to keep this series simple to get it landed. This kind of change have a very high bit rot rate since it impact a lot of test output.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sun, 08 Sep 2019 09:42:53 +0200
parents 268662aac075
children 4bbc9569e722
line wrap: on
line diff
--- a/mercurial/changegroup.py	Sun Sep 08 01:02:34 2019 +0200
+++ b/mercurial/changegroup.py	Sun Sep 08 09:42:53 2019 +0200
@@ -270,7 +270,7 @@
         def revmap(x):
             return cl.rev(x)
 
-        changesets = files = revisions = 0
+        changesets = 0
 
         try:
             # The transaction may already carry source information. In this
@@ -337,23 +337,38 @@
             repo.ui.status(_("adding file changes\n"))
             newrevs, newfiles = _addchangegroupfiles(
                 repo, self, revmap, trp, efiles, needfiles)
-            revisions += newrevs
-            files += newfiles
+
+            # making sure the value exists
+            tr.changes.setdefault('changegroup-count-changesets', 0)
+            tr.changes.setdefault('changegroup-count-revisions', 0)
+            tr.changes.setdefault('changegroup-count-files', 0)
+            tr.changes.setdefault('changegroup-count-heads', 0)
+
+            # some code use bundle operation for internal purpose. They usually
+            # set `ui.quiet` to do this outside of user sight. Size the report
+            # of such operation now happens at the end of the transaction, that
+            # ui.quiet has not direct effect on the output.
+            #
+            # To preserve this intend use an inelegant hack, we fail to report
+            # the change if `quiet` is set. We should probably move to
+            # something better, but this is a good first step to allow the "end
+            # of transaction report" to pass tests.
+            if not repo.ui.quiet:
+                tr.changes['changegroup-count-changesets'] += changesets
+                tr.changes['changegroup-count-revisions'] += newrevs
+                tr.changes['changegroup-count-files'] += newfiles
 
             deltaheads = 0
             if oldheads:
                 heads = cl.heads()
-                deltaheads = len(heads) - len(oldheads)
+                deltaheads += len(heads) - len(oldheads)
                 for h in heads:
                     if h not in oldheads and repo[h].closesbranch():
                         deltaheads -= 1
-            htext = ""
-            if deltaheads:
-                htext = _(" (%+d heads)") % deltaheads
 
-            repo.ui.status(_("added %d changesets"
-                             " with %d changes to %d files%s\n")
-                             % (changesets, revisions, files, htext))
+            # see previous comment about checking ui.quiet
+            if not repo.ui.quiet:
+                tr.changes['changegroup-count-heads'] += deltaheads
             repo.invalidatevolatilesets()
 
             if changesets > 0: