diff mercurial/repair.py @ 39745:b2ec79559a4b

strip: ignore orphaned internal changesets while computing safe strip roots Internal changeset can be safely garbage collected, so we can ignore them during safestrip. (Another phase for internal changeset that must be kept in the repository might be introduced later).
author Boris Feld <boris.feld@octobus.net>
date Wed, 19 Sep 2018 17:09:01 +0200
parents 3d22aef3ecd5
children 8ecb17b7f432
line wrap: on
line diff
--- a/mercurial/repair.py	Wed Jun 06 02:31:46 2018 +0200
+++ b/mercurial/repair.py	Wed Sep 19 17:09:01 2018 +0200
@@ -24,6 +24,7 @@
     exchange,
     obsolete,
     obsutil,
+    phases,
     pycompat,
     util,
 )
@@ -276,7 +277,8 @@
     # orphaned = affected - wanted
     # affected = descendants(roots(wanted))
     # wanted = revs
-    tostrip = set(repo.revs('%ld-(::((roots(%ld)::)-%ld))', revs, revs, revs))
+    revset = '%ld - ( ::( (roots(%ld):: and not _phase(%s)) -%ld) )'
+    tostrip = set(repo.revs(revset, revs, revs, phases.internal, revs))
     notstrip = revs - tostrip
     if notstrip:
         nodestr = ', '.join(sorted(short(repo[n].node()) for n in notstrip))