From patchwork Mon May 19 20:33:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [4, of, 5] convert: only consider shamap revisions converted if they still exists From: Mads Kiilerich X-Patchwork-Id: 4818 Message-Id: To: mercurial-devel@selenic.com Date: Mon, 19 May 2014 22:33:32 +0200 # HG changeset patch # User Mads Kiilerich # Date 1400530351 -7200 # Mon May 19 22:12:31 2014 +0200 # Node ID c28cc8a6bd6226f0588365d5ae8e3d8a42cfa063 # Parent 8b9f31e85407fef886a08b55be31665f02319fde convert: only consider shamap revisions converted if they still exists Rollback or strip could leave a Mercurial repo with a shamap with revisions no longer in the repository. To ensure reliable conversions we now check that the commit actually exists and consider it non-existing if it doesn't exist. diff --git a/hgext/convert/convcmd.py b/hgext/convert/convcmd.py --- a/hgext/convert/convcmd.py +++ b/hgext/convert/convcmd.py @@ -173,8 +173,12 @@ class converter(object): parents = {} while visit: n = visit.pop(0) - if n in known or n in self.map: + if n in known: continue + if n in self.map: + m = self.map[n] + if m == SKIPREV or self.dest.hascommitfrommap(m): + continue known.add(n) self.ui.progress(_('scanning'), len(known), unit=_('revisions')) commit = self.cachecommit(n) diff --git a/tests/test-convert-hg-sink.t b/tests/test-convert-hg-sink.t --- a/tests/test-convert-hg-sink.t +++ b/tests/test-convert-hg-sink.t @@ -524,8 +524,11 @@ Conversion after rollback scanning source... sorting... converting... + 0 extra f+a-only change $ hg -R a log -G -T '{rev} {desc|firstline} ({files})\n' + o 3 extra f+a-only change (f) + | o 2 x (f) | @ 1 a (f)