[Bug 4082] New: Cannot abort unshelve if tip^ is public. yes really

mercurial-bugs at selenic.com mercurial-bugs at selenic.com
Mon Nov 4 21:27:56 CST 2013


http://bz.selenic.com/show_bug.cgi?id=4082

          Priority: normal
            Bug ID: 4082
                CC: mercurial-devel at selenic.com
          Assignee: bugzilla at selenic.com
           Summary: Cannot abort unshelve if tip^ is public.  yes really
          Severity: bug
    Classification: Unclassified
                OS: Linux
          Reporter: durham at fb.com
          Hardware: PC
            Status: UNCONFIRMED
           Version: 2.8
         Component: rebase
           Product: Mercurial

hg init foo
cd foo
echo a > a && hg ci -Aqm a
hg book master
hg book foo
echo b > b && hg ci -Aqm b
hg up master
echo c > c && hg ci -Aqm c
hg phase -p -r .
hg up foo
hg log -G --template "{rev} {desc} ({bookmarks} - {phase})\n"
o  2 c (master - public)
|
| @  1 b (foo - draft)
|/
o  0 a ( - public)

echo C > c
hg shelve
hg up master
hg unshelve
hg unshelve --abort
warning: can't clean up immutable changesets fa81ef874a93
rebase aborted
abort: outstanding uncommitted merges

Expected: the unshelve aborts
Actual: the abort fails because rebase failed to clean up the merge


This is caused by rebase using -2 as a rev marker, then checking for
immutableness.  This resolves to the tip rev context, but when it checks the
phase cache (which is an array) it ends up indexing -2 into the array, which is
the tip^ commit.  Fun times.

This also causes a normal rebase --abort to leave the user in a merge state,
instead of a clean state.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the Mercurial-devel mailing list