changeset 19519:c2a479a058d0 stable

histedit: don't clobber working copy on --abort if not on histedit cset Similar to issue4009, 2.7 will force people to abort histedits before doing interesting things. Without this fix, people with histedit sessions they wandered away from before upgrading to 2.7 could clobber their working copy for no reason.
author Matt Mackall <mpm@selenic.com>
date Thu, 01 Aug 2013 19:55:02 -0500
parents 12843143663d
children 3d19b8136641
files hgext/histedit.py tests/test-histedit-no-change.t
diffstat 2 files changed, 33 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/histedit.py	Thu Aug 01 17:54:12 2013 -0500
+++ b/hgext/histedit.py	Thu Aug 01 19:55:02 2013 -0500
@@ -506,7 +506,14 @@
         (parentctxnode, rules, keep, topmost, replacements) = readstate(repo)
         mapping, tmpnodes, leafs, _ntm = processreplacement(repo, replacements)
         ui.debug('restore wc to old parent %s\n' % node.short(topmost))
-        hg.clean(repo, topmost)
+        # check whether we should update away
+        parentnodes = [c.node() for c in repo[None].parents()]
+        for n in leafs | set([parentctxnode]):
+            if n in parentnodes:
+                hg.clean(repo, topmost)
+                break
+        else:
+            pass
         cleanupnode(ui, repo, 'created', tmpnodes)
         cleanupnode(ui, repo, 'temp', leafs)
         os.unlink(os.path.join(repo.path, 'histedit-state'))
--- a/tests/test-histedit-no-change.t	Thu Aug 01 17:54:12 2013 -0500
+++ b/tests/test-histedit-no-change.t	Thu Aug 01 19:55:02 2013 -0500
@@ -169,13 +169,34 @@
   o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
   
 
-abort editing session
+abort editing session, after first forcibly updating away
+  $ hg up 0
+  abort: histedit in progress
+  (use 'hg histedit --continue' or 'hg histedit --abort')
+  [255]
+  $ mv .hg/histedit-state .hg/histedit-state-ignore
+  $ hg up 0
+  0 files updated, 0 files merged, 3 files removed, 0 files unresolved
+  $ mv .hg/histedit-state-ignore .hg/histedit-state
+  $ hg sum
+  parent: 0:cb9a9f314b8b 
+   a
+  branch: default
+  commit: 1 modified, 1 unknown (new branch head)
+  update: 6 new changesets (update)
+  hist:   2 remaining (histedit --continue)
+
   $ hg histedit --abort 2>&1 | fixbundle
-  2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  [1]
+
+modified files should survive the abort when we've moved away already
+  $ hg st
+  M e
+  ? edit.sh
 
   $ graphlog "log after abort"
   % log after abort
-  @  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
+  o  5 652413bf663ef2a641cab26574e46d5f5a64a55a "f"
   |
   o  4 e860deea161a2f77de56603b340ebbb4536308ae "e"
   |
@@ -185,7 +206,7 @@
   |
   o  1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b"
   |
-  o  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
+  @  0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a"
   
 
   $ cd ..