# HG changeset patch # User Augie Fackler # Date 1426210910 14400 # Node ID 603a8d09e12dfb6b734c7e07f37049e5a83e6dae # Parent f7c0556d22d79f6ce6e088c75fbaf48b2ffc5f4e 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 -r f7c0556d22d7 -r 603a8d09e12d hgext/convert/convcmd.py --- 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) - diff -r f7c0556d22d7 -r 603a8d09e12d tests/test-convert-git.t --- 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)