From patchwork Sat Sep 7 06:37:33 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D6795: strip: fix bug with treemanifests and unordered linkrevs From: phabricator X-Patchwork-Id: 41500 Message-Id: To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Sat, 7 Sep 2019 06:37:33 +0000 martinvonz created this revision. Herald added a subscriber: mercurial-devel. Herald added a reviewer: hg-reviewers. REVISION SUMMARY This is the treemanifest version of f45f7390c1c5 (strip: calculate list of extra nodes to save and pass it to changegroupsubset, 2008-01-19). REPOSITORY rHG Mercurial REVISION DETAIL https://phab.mercurial-scm.org/D6795 AFFECTED FILES mercurial/repair.py tests/test-strip-cross.t CHANGE DETAILS To: martinvonz, #hg-reviewers Cc: mercurial-devel diff --git a/tests/test-strip-cross.t b/tests/test-strip-cross.t --- a/tests/test-strip-cross.t +++ b/tests/test-strip-cross.t @@ -203,14 +203,9 @@ checking changesets checking manifests checking directory manifests - dir/@0: parent-directory manifest refers to unknown revision 1c556153fe54 - dir/@1: parent-directory manifest refers to unknown revision 1f76dba919fd crosschecking files in changesets and manifests checking files - dir/other@1: 5d9299349fc0 not in manifests checked 3 changesets with 4 changes to 3 files - 3 integrity errors encountered! - (first damaged changeset appears to be 0) % Trying to strip revision 3 saved backup bundle to $TESTTMP/treemanifests/3/.hg/strip-backup/e4e3de5c3cb2-f4c70376-backup.hg diff --git a/mercurial/repair.py b/mercurial/repair.py --- a/mercurial/repair.py +++ b/mercurial/repair.py @@ -81,14 +81,12 @@ _, brokenset = revlog.getstrippoint(striprev) return [revlog.linkrev(r) for r in brokenset] -def _collectmanifest(repo, striprev): - return _collectrevlog(repo.manifestlog.getstorage(b''), striprev) - def _collectbrokencsets(repo, files, striprev): """return the changesets which will be broken by the truncation""" s = set() - s.update(_collectmanifest(repo, striprev)) + for revlog in manifestrevlogs(repo): + s.update(_collectrevlog(revlog, striprev)) for fname in files: s.update(_collectrevlog(repo.file(fname), striprev))