Correct optimization from 3464f5e77f34; add a test.
If there are two (or more) heads that point to the same .hgtags
node, we can safely skip parsing the file in all but the last head.
(In 3464f5e77f34, we were parsing the file in the first head and
skipping all the others.)
#!/bin/sh
cat <<'EOF' > merge
#!/bin/sh
echo merging for `basename $1`
EOF
chmod +x merge
mkdir t
cd t
hg init
echo This is file a1 > a
hg add a
hg commit -m "commit #0" -d "1000000 0"
echo This is file b1 > b
hg add b
hg commit -m "commit #1" -d "1000000 0"
hg update 0
echo This is file c1 > c
hg add c
hg commit -m "commit #2" -d "1000000 0"
echo This is file b1 > b
echo %% no merges expected
env HGMERGE=../merge hg merge 1
hg diff --nodates
hg status
cd ..; /bin/rm -rf t
mkdir t
cd t
hg init
echo This is file a1 > a
hg add a
hg commit -m "commit #0" -d "1000000 0"
echo This is file b1 > b
hg add b
hg commit -m "commit #1" -d "1000000 0"
hg update 0
echo This is file c1 > c
hg add c
hg commit -m "commit #2" -d "1000000 0"
echo This is file b2 > b
echo %% merge should fail
env HGMERGE=../merge hg merge 1
echo %% merge of b expected
env HGMERGE=../merge hg merge -f 1
hg diff --nodates
hg status
cd ..; /bin/rm -rf t
echo %%
mkdir t
cd t
hg init
echo This is file a1 > a
hg add a
hg commit -m "commit #0" -d "1000000 0"
echo This is file b1 > b
hg add b
hg commit -m "commit #1" -d "1000000 0"
echo This is file b22 > b
hg commit -m "commit #2" -d "1000000 0"
hg update 1
echo This is file c1 > c
hg add c
hg commit -m "commit #3" -d "1000000 0"
echo 'Contents of b should be "this is file b1"'
cat b
echo This is file b22 > b
echo %% merge fails
env HGMERGE=../merge hg merge 2
echo %% merge expected!
env HGMERGE=../merge hg merge -f 2
hg diff --nodates
hg status
cd ..; /bin/rm -rf t
mkdir t
cd t
hg init
echo This is file a1 > a
hg add a
hg commit -m "commit #0" -d "1000000 0"
echo This is file b1 > b
hg add b
hg commit -m "commit #1" -d "1000000 0"
echo This is file b22 > b
hg commit -m "commit #2" -d "1000000 0"
hg update 1
echo This is file c1 > c
hg add c
hg commit -m "commit #3" -d "1000000 0"
echo This is file b33 > b
echo %% merge of b should fail
env HGMERGE=../merge hg merge 2
echo %% merge of b expected
env HGMERGE=../merge hg merge -f 2
hg diff --nodates
hg status
cd ..; /bin/rm -rf t