bookmarks: fix head selection for merge with two bookmarked heads
A type mismatch caused the search for the other head to fail. The code is
fragile, and instead it ended up using the 'first' bookmark head, but the
ordering is undefined and it could thus randomly use the wrong bookmarkhead
and fail with:
$ hg up -q -C e@diverged
$ hg merge
abort: merging with a working directory ancestor has no effect
$ cat >> $HGRCPATH <<EOF
> [extensions]
> graphlog=
> rebase=
>
> [phases]
> publish=False
>
> [alias]
> tglog = log -G --template "{rev}:{phase} '{desc}' {branches}\n"
> EOF
$ hg init a
$ cd a
$ echo c1 >common
$ hg add common
$ hg ci -m C1
$ echo c2 >>common
$ hg ci -m C2
$ echo c3 >>common
$ hg ci -m C3
$ hg up -q -C 1
$ echo l1 >>extra
$ hg add extra
$ hg ci -m L1
created new head
$ sed -e 's/c2/l2/' common > common.new
$ mv common.new common
$ hg ci -m L2
$ echo l3 >> extra2
$ hg add extra2
$ hg ci -m L3
$ hg phase --force --secret 4
$ hg tglog
@ 5:secret 'L3'
|
o 4:secret 'L2'
|
o 3:draft 'L1'
|
| o 2:draft 'C3'
|/
o 1:draft 'C2'
|
o 0:draft 'C1'
Try to call --continue:
$ hg rebase --continue
abort: no rebase in progress
[255]
Conflicting rebase:
$ hg rebase -s 3 -d 2
merging common
warning: conflicts during merge.
merging common incomplete! (edit conflicts, then use 'hg resolve --mark')
abort: unresolved conflicts (see hg resolve, then hg rebase --continue)
[255]
Try to continue without solving the conflict:
$ hg rebase --continue
abort: unresolved merge conflicts (see hg help resolve)
[255]
Conclude rebase:
$ echo 'resolved merge' >common
$ hg resolve -m common
$ hg rebase --continue
saved backup bundle to $TESTTMP/a/.hg/strip-backup/*-backup.hg (glob)
$ hg tglog
@ 5:secret 'L3'
|
o 4:secret 'L2'
|
o 3:draft 'L1'
|
o 2:draft 'C3'
|
o 1:draft 'C2'
|
o 0:draft 'C1'
Check correctness:
$ hg cat -r 0 common
c1
$ hg cat -r 1 common
c1
c2
$ hg cat -r 2 common
c1
c2
c3
$ hg cat -r 3 common
c1
c2
c3
$ hg cat -r 4 common
resolved merge
$ hg cat -r 5 common
resolved merge
$ cd ..