[PATCH 2 of 2 convert-git-progress] convert: adjust progress bar for octopus merges (issue4169)

Augie Fackler raf at durin42.com
Thu Mar 12 20:43:14 CDT 2015


# HG changeset patch
# User Augie Fackler <augie at google.com>
# Date 1426210910 14400
#      Thu Mar 12 21:41:50 2015 -0400
# Node ID 31ffd2581ded094d80f06e219ddfc2ee774d4b66
# Parent  8836d4b5f3d9c129277cbb9f27bfaa78bd217324
convert: adjust progress bar for octopus merges (issue4169)

For merges, we walk the files N-1 times, where N is the number of
parents. This means that for an octopus merge with 3 parents and 2
changed files, we actually fetch 6 files. This corrects the progress
output of the convert command when such commits are encountered.

diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py
--- a/hgext/convert/convcmd.py
+++ b/hgext/convert/convcmd.py
@@ -413,7 +413,15 @@ class converter(object):
             parents = [self.map.get(p, p) for p in parents]
         except KeyError:
             parents = [b[0] for b in pbranches]
-        source = progresssource(self.ui, self.source, len(files))
+        if len(parents) < 3:
+            source = progresssource(self.ui, self.source, len(files))
+        else:
+            # For an octopus merge, we end up traversing the list of
+            # changed files N-1 times. This tweak to the number of
+            # files makes it so the progress bar doesn't overflow
+            # itself.
+            source = progresssource(self.ui, self.source,
+                                    len(files) * (len(parents) - 1))
         newnode = self.dest.putcommit(files, copies, parents, commit,
                                       source, self.map, full)
         source.close()
@@ -531,4 +539,3 @@ def convert(ui, src, dest=None, revmapfi
 
     c = converter(ui, srcc, destc, revmapfile, opts)
     c.convert(sortmode)
-


More information about the Mercurial-devel mailing list