strip: fix bug with treemanifests and unordered linkrevs
authorMartin von Zweigbergk <martinvonz@google.com>
Fri, 06 Sep 2019 23:15:52 -0700
changeset 42913 a8b249b2f8cc
parent 42912 6d0fdba635e5
child 42914 08fce968d00b
strip: fix bug with treemanifests and unordered linkrevs This is the treemanifest version of f45f7390c1c5 (strip: calculate list of extra nodes to save and pass it to changegroupsubset, 2008-01-19). Differential Revision: https://phab.mercurial-scm.org/D6795
mercurial/repair.py
tests/test-strip-cross.t
--- a/mercurial/repair.py	Fri Sep 06 23:10:28 2019 -0700
+++ b/mercurial/repair.py	Fri Sep 06 23:15:52 2019 -0700
@@ -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))
 
--- a/tests/test-strip-cross.t	Fri Sep 06 23:10:28 2019 -0700
+++ b/tests/test-strip-cross.t	Fri Sep 06 23:15:52 2019 -0700
@@ -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