rebase: make sure the newancestor is used during the whole update
(
issue1561)
Before this change, newancestor was used only once as a replacement
for ancestor.ancestor, but merge.update calls ancestor.ancestor
several times, so it ends up with the "wrong" ancestor (the real
ancestor, but we want the parent of the rebased changeset for all but
the first rebased changeset).
Added a new test case for this: test-rebase-newancestor.
Also, in one scenario in test-rebase-collapse, there was a spurious
conflict caused by the same issue, so that test case was fixed by
removing the now unneeded conflict resolution and the output was
adapted accordingly.
#!/bin/sh
echo "[extensions]" >> $HGRCPATH
echo "graphlog=" >> $HGRCPATH
echo "rebase=" >> $HGRCPATH
BASE=`pwd`
addcommit () {
echo $1 > $1
hg add $1
hg commit -d "${2} 0" -m $1
}
commit () {
hg commit -d "${2} 0" -m $1
}
createrepo () {
cd $BASE
rm -rf a
hg init a
cd a
addcommit "A" 0
addcommit "B" 1
addcommit "C" 2
addcommit "D" 3
hg update -C 0
addcommit "E" 4
hg update -C 0
addcommit "F" 5
hg merge -r 4
commit "G" 6
hg update -C 5
addcommit "H" 7
}
createrepo > /dev/null 2>&1
hg glog --template '{rev}: {desc}\n'
echo '% Rebasing B onto H'
hg up -C 3
hg rebase --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog --template '{rev}: {desc}\n'
echo "Expected A, B, C, D, F, H"
hg manifest
createrepo > /dev/null 2>&1
echo
echo '% Rebasing G onto H'
hg rebase --base 6 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog --template '{rev}: {desc}\n'
echo "Expected A, E, F, H"
hg manifest
createrepocomplex () {
cd $BASE
rm -rf a
hg init a
cd a
addcommit "A" 0
addcommit "B" 1
hg up 0
addcommit "C" 2
hg merge
commit "D" 3
hg up 1
addcommit "E" 4
addcommit "F" 5
hg merge
commit "G" 6
hg up 0
addcommit "H" 7
}
echo
createrepocomplex > /dev/null 2>&1
hg glog --template '{rev}: {desc}\n'
echo
echo '% Rebase and collapse - more than one external (fail)'
hg rebase -s 2 --collapse
echo
echo '% Rebase and collapse - E onto H'
hg rebase -s 4 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog --template '{rev}: {desc}\n'
echo "Expected A, B, C, E, F, H"
hg manifest
createrepocomplex () {
cd $BASE
rm -rf a
hg init a
cd a
addcommit "A" 0
addcommit "B" 1
hg up 0
addcommit "C" 2
hg merge
commit "D" 3
hg up 1
addcommit "E" 4
echo "F" > E
commit "F" 5
addcommit "G" 6
hg merge
commit "H" 7
hg up 0
addcommit "I" 8
}
echo
createrepocomplex > /dev/null 2>&1
hg glog --template '{rev}: {desc}\n'
echo
echo '% Rebase and collapse - E onto I'
hg rebase -s 4 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog --template '{rev}: {desc}\n'
echo "Expected A, B, C, E, G, I"
hg manifest
echo 'Cat E:'
cat E
createrepocomplex () {
cd $BASE
rm -rf a
hg init a
cd a
addcommit "A" 0
addcommit "B" 1
addcommit "C" 2
hg up 1
addcommit "D" 3
hg merge
commit "E" 4
hg up 0
addcommit "F" 5
}
echo
createrepocomplex > /dev/null 2>&1
hg glog --template '{rev}: {desc}\n'
echo
echo '% Rebase and collapse - B onto F'
hg rebase -s 1 --collapse 2>&1 | sed 's/\(saving bundle to \).*/\1/'
hg glog --template '{rev}: {desc}\n'
echo "Expected A, B, C, D, F"
hg manifest
exit 0