D6035: absorb: use scmutil.cleanupnodes() also when obsmarkers are disabled

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Thu Feb 28 00:40:10 UTC 2019


martinvonz created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  A side-effect of this is the new warning in the test case, but the
  warning is valid, so I don't think that's a problem.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D6035

AFFECTED FILES
  hgext/absorb.py
  tests/test-absorb-strip.t

CHANGE DETAILS

diff --git a/tests/test-absorb-strip.t b/tests/test-absorb-strip.t
--- a/tests/test-absorb-strip.t
+++ b/tests/test-absorb-strip.t
@@ -23,6 +23,7 @@
   $ echo 1 >> B
   $ echo 2 >> D
   $ hg absorb -a
+  warning: orphaned descendants detected, not stripping 112478962961, 26805aba1e60
   saved backup bundle to * (glob)
   2 of 2 chunk(s) applied
 
diff --git a/hgext/absorb.py b/hgext/absorb.py
--- a/hgext/absorb.py
+++ b/hgext/absorb.py
@@ -50,7 +50,6 @@
     phases,
     pycompat,
     registrar,
-    repair,
     scmutil,
     util,
 )
@@ -690,9 +689,9 @@
                 if self.repo['.'].node() in self.replacemap:
                     self._moveworkingdirectoryparent()
                 if self._useobsolete:
-                    self._obsoleteoldcommits()
+                    self._cleanupoldcommits()
             if not self._useobsolete: # strip must be outside transactions
-                self._stripoldcommits()
+                self._cleanupoldcommits()
         return self.finalnode
 
     def printchunkstats(self):
@@ -859,22 +858,12 @@
         """() -> bool"""
         return obsolete.isenabled(self.repo, obsolete.createmarkersopt)
 
-    def _obsoleteoldcommits(self):
+    def _cleanupoldcommits(self):
         replacements = {k: ([v] if v is not None else [])
                         for k, v in self.replacemap.iteritems()}
         if replacements:
             scmutil.cleanupnodes(self.repo, replacements, operation='absorb')
 
-    def _stripoldcommits(self):
-        nodelist = self.replacemap.keys()
-        # make sure we don't strip innocent children
-        revs = self.repo.revs('%ln - (::(heads(%ln::)-%ln))', nodelist,
-                              nodelist, nodelist)
-        tonode = self.repo.changelog.node
-        nodelist = [tonode(r) for r in revs]
-        if nodelist:
-            repair.strip(self.repo.ui, self.repo, nodelist)
-
 def _parsechunk(hunk):
     """(crecord.uihunk or patch.recordhunk) -> (path, (a1, a2, [bline]))"""
     if type(hunk) not in (crecord.uihunk, patch.recordhunk):



To: martinvonz, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list