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.
--- a/hgext/convert/convcmd.py Thu Mar 12 21:31:52 2015 -0400
+++ b/hgext/convert/convcmd.py Thu Mar 12 21:41:50 2015 -0400
@@ -413,7 +413,15 @@
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()
@@ -535,4 +543,3 @@
c = converter(ui, srcc, destc, revmapfile, opts)
c.convert(sortmode)
-
--- a/tests/test-convert-git.t Thu Mar 12 21:31:52 2015 -0400
+++ b/tests/test-convert-git.t Thu Mar 12 21:41:50 2015 -0400
@@ -207,14 +207,14 @@
\r (no-eol) (esc)
\r (no-eol) (esc)
converting [======================> ] 5/9\r (no-eol) (esc)
- getting files [========> ] 1/4\r (no-eol) (esc)
- getting files [==================> ] 2/4\r (no-eol) (esc)
- getting files [============================> ] 3/4\r (no-eol) (esc)
- getting files [======================================>] 4/4\r (no-eol) (esc)
- getting files [ <=> ] 5/4\r (no-eol) (esc)
- getting files [ <=> ] 6/4\r (no-eol) (esc)
- getting files [ <=> ] 7/4\r (no-eol) (esc)
- getting files [ <=> ] 8/4\r (no-eol) (esc)
+ getting files [===> ] 1/8\r (no-eol) (esc)
+ getting files [========> ] 2/8\r (no-eol) (esc)
+ getting files [=============> ] 3/8\r (no-eol) (esc)
+ getting files [==================> ] 4/8\r (no-eol) (esc)
+ getting files [=======================> ] 5/8\r (no-eol) (esc)
+ getting files [============================> ] 6/8\r (no-eol) (esc)
+ getting files [=================================> ] 7/8\r (no-eol) (esc)
+ getting files [======================================>] 8/8\r (no-eol) (esc)
\r (no-eol) (esc)
\r (no-eol) (esc)
converting [===========================> ] 6/9\r (no-eol) (esc)