# HG changeset patch # User Augie Fackler # Date 2015-03-13 01:41:50 # 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 --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() @@ -535,4 +543,3 @@ def convert(ui, src, dest=None, revmapfi c = converter(ui, srcc, destc, revmapfile, opts) c.convert(sortmode) - diff --git a/tests/test-convert-git.t b/tests/test-convert-git.t --- a/tests/test-convert-git.t +++ b/tests/test-convert-git.t @@ -207,14 +207,14 @@ full conversion \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)