# HG changeset patch # User Matt Mackall # Date 2013-08-02 00:55:02 # Node ID c2a479a058d0de09bf47093b123f32cbd4909eab # Parent 12843143663d412fe8ffc2b7cc4958310319e1dd 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. diff --git a/hgext/histedit.py b/hgext/histedit.py --- a/hgext/histedit.py +++ b/hgext/histedit.py @@ -506,7 +506,14 @@ def histedit(ui, repo, *freeargs, **opts (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')) diff --git a/tests/test-histedit-no-change.t b/tests/test-histedit-no-change.t --- a/tests/test-histedit-no-change.t +++ b/tests/test-histedit-no-change.t @@ -169,13 +169,34 @@ check state of working copy 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 @@ abort editing session | o 1 d2ae7f538514cd87c17547b0de4cea71fe1af9fb "b" | - o 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a" + @ 0 cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b "a" $ cd ..