split: avoid strip if split is a no-op (identical to original)
authorKyle Lippincott <spectral@google.com>
Mon, 12 Apr 2021 19:25:34 -0700
changeset 46924 ca0049946e9a
parent 46923 8ee1ac083ee7
child 46925 b5e8bf10436e
split: avoid strip if split is a no-op (identical to original) Differential Revision: https://phab.mercurial-scm.org/D10389
hgext/split.py
tests/test-split.t
--- a/hgext/split.py	Mon Apr 12 17:52:46 2021 -0700
+++ b/hgext/split.py	Mon Apr 12 19:25:34 2021 -0700
@@ -182,12 +182,15 @@
     if not committed:
         raise error.InputError(_(b'cannot split an empty revision'))
 
-    scmutil.cleanupnodes(
-        repo,
-        {ctx.node(): [c.node() for c in committed]},
-        operation=b'split',
-        fixphase=True,
-    )
+    if len(committed) != 1 or committed[0].node() != ctx.node():
+        # Ensure we don't strip a node if we produce the same commit as already
+        # exists
+        scmutil.cleanupnodes(
+            repo,
+            {ctx.node(): [c.node() for c in committed]},
+            operation=b'split',
+            fixphase=True,
+        )
 
     return committed[-1]
 
--- a/tests/test-split.t	Mon Apr 12 17:52:46 2021 -0700
+++ b/tests/test-split.t	Mon Apr 12 19:25:34 2021 -0700
@@ -1086,16 +1086,9 @@
   HG: branch 'default'
   HG: added foo
   warning: commit already existed in the repository!
-  saved backup bundle to $TESTTMP/noop/.hg/strip-backup/ae694b2901bb-28e0b457-split.hg (obsstore-off !)
-  transaction abort! (obsstore-on !)
-  rollback completed (obsstore-on !)
-  abort: changeset ae694b2901bb cannot obsolete itself (obsstore-on !)
-FIXME: this should not have stripped the commit we just no-op split
-(obsstore-off only)
   $ hg log -G -T'{phase} {rev}:{node|short} {desc}'
-  warning: ignoring unknown working parent ae694b2901bb! (obsstore-off !)
-  @  draft 1:ae694b2901bb foo (obsstore-on !)
-  | (obsstore-on !)
+  @  draft 1:ae694b2901bb foo
+  |
   o  public 0:222799e2f90b r0