[Updated] D8489: rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291)

mharbison72 (Matt Harbison) phabricator at mercurial-scm.org
Sat Jun 6 03:14:29 UTC 2020


Closed by commit rHG1f114c797961: rebase: avoid clobbering wdir() with --dry-run or --confirm (issue6291) (authored by mharbison72).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D8489?vs=21237&id=21569

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D8489/new/

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

AFFECTED FILES
  hgext/rebase.py
  tests/test-rebase-named-branches.t

CHANGE DETAILS

diff --git a/tests/test-rebase-named-branches.t b/tests/test-rebase-named-branches.t
--- a/tests/test-rebase-named-branches.t
+++ b/tests/test-rebase-named-branches.t
@@ -339,15 +339,23 @@
   -A
   +A-mod
 
-BUG: This shouldn't affect wdir
+--dry-run doesn't affect a dirty working directory that is unrelated to the
+source or destination.
 
   $ hg rebase -s tip -d 4 --dry-run
   starting dry-run rebase; repository will not be changed
   rebasing 11:be1dea60f2a6 "D" (tip)
   dry-run rebase completed successfully; run without -n/--dry-run to perform this rebase
   $ hg diff
+  diff -r 2b586e70108d A
+  --- a/A	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/A	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,1 +1,1 @@
+  -A
+  +A-mod
 
-BUG: This shouldn't affect wdir
+Bailing out on --confirm doesn't affect a dirty working directory that is
+unrelated to the source or destination.
 
   $ echo A-mod > A
   $ echo n | hg rebase -s tip -d 4 --confirm --config ui.interactive=True
@@ -356,6 +364,12 @@
   rebase completed successfully
   apply changes (yn)? n
   $ hg diff
+  diff -r 2b586e70108d A
+  --- a/A	Thu Jan 01 00:00:00 1970 +0000
+  +++ b/A	Thu Jan 01 00:00:00 1970 +0000
+  @@ -1,1 +1,1 @@
+  -A
+  +A-mod
 
   $ echo A-mod > A
   $ hg rebase -s tip -d 4 --confirm
diff --git a/hgext/rebase.py b/hgext/rebase.py
--- a/hgext/rebase.py
+++ b/hgext/rebase.py
@@ -367,7 +367,9 @@
         skippedset.update(obsoleteextinctsuccessors)
         _checkobsrebase(self.repo, self.ui, obsoleteset, skippedset)
 
-    def _prepareabortorcontinue(self, isabort, backup=True, suppwarns=False):
+    def _prepareabortorcontinue(
+        self, isabort, backup=True, suppwarns=False, dryrun=False, confirm=False
+    ):
         self.resume = True
         try:
             self.restorestatus()
@@ -390,7 +392,12 @@
 
         if isabort:
             backup = backup and self.backupf
-            return self._abort(backup=backup, suppwarns=suppwarns)
+            return self._abort(
+                backup=backup,
+                suppwarns=suppwarns,
+                dryrun=dryrun,
+                confirm=confirm,
+            )
 
     def _preparenewrebase(self, destmap):
         if not destmap:
@@ -749,7 +756,7 @@
         ):
             bookmarks.activate(repo, self.activebookmark)
 
-    def _abort(self, backup=True, suppwarns=False):
+    def _abort(self, backup=True, suppwarns=False, dryrun=False, confirm=False):
         '''Restore the repository to its original state.'''
 
         repo = self.repo
@@ -793,7 +800,10 @@
 
                 updateifonnodes = set(rebased)
                 updateifonnodes.update(self.destmap.values())
-                updateifonnodes.add(self.originalwd)
+
+                if not dryrun and not confirm:
+                    updateifonnodes.add(self.originalwd)
+
                 shouldupdate = repo[b'.'].rev() in updateifonnodes
 
                 # Update away from the rebase if necessary
@@ -1119,7 +1129,10 @@
                     rbsrt._finishrebase()
                 else:
                     rbsrt._prepareabortorcontinue(
-                        isabort=True, backup=False, suppwarns=True
+                        isabort=True,
+                        backup=False,
+                        suppwarns=True,
+                        confirm=confirm,
                     )
                 needsabort = False
             else:
@@ -1134,7 +1147,10 @@
             if needsabort:
                 # no need to store backup in case of dryrun
                 rbsrt._prepareabortorcontinue(
-                    isabort=True, backup=False, suppwarns=True
+                    isabort=True,
+                    backup=False,
+                    suppwarns=True,
+                    dryrun=opts.get(b'dry_run'),
                 )
 
 



To: mharbison72, martinvonz, #hg-reviewers, durin42
Cc: durin42, marmoute, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mercurial-scm.org/pipermail/mercurial-patches/attachments/20200606/22b2a195/attachment-0001.html>


More information about the Mercurial-patches mailing list