|
|
#!/bin/sh
|
|
|
|
|
|
. $TESTDIR/helpers.sh
|
|
|
|
|
|
echo "[extensions]" >> $HGRCPATH
|
|
|
echo "graphlog=" >> $HGRCPATH
|
|
|
echo "rebase=" >> $HGRCPATH
|
|
|
echo "mq=" >> $HGRCPATH
|
|
|
|
|
|
echo "[mq]" >> $HGRCPATH
|
|
|
echo "plain=true" >> $HGRCPATH
|
|
|
|
|
|
filterpatch()
|
|
|
{
|
|
|
sed -e "s/^\(# Date\).*/\1/" \
|
|
|
-e "s/^\(# Node ID\).*/\1/" \
|
|
|
-e "s/^\(# Parent\).*/\1/" \
|
|
|
-e "s/^\(diff -r \)\([a-f0-9]* \)\(-r \)\([a-f0-9]* \)/\1x \3y /" \
|
|
|
-e "s/^\(diff -r \)\([a-f0-9]* \)/\1x /" \
|
|
|
-e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" \
|
|
|
-e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/"
|
|
|
}
|
|
|
|
|
|
hg init a
|
|
|
cd a
|
|
|
hg qinit -c # This must work even with a managed mq queue
|
|
|
|
|
|
echo 'c1' > f
|
|
|
hg add f
|
|
|
hg commit -d '0 0' -m "C1"
|
|
|
|
|
|
echo 'r1' > f
|
|
|
hg commit -d '2 0' -m "R1"
|
|
|
|
|
|
hg up 0
|
|
|
hg qnew f.patch
|
|
|
echo 'mq1' > f
|
|
|
hg qref -m 'P0'
|
|
|
|
|
|
hg qnew f2.patch
|
|
|
echo 'mq2' > f
|
|
|
hg qref -m 'P1'
|
|
|
hg glog --template '{rev} {desc} tags: {tags}\n'
|
|
|
|
|
|
echo
|
|
|
echo '% Rebase - try to rebase on an applied mq patch'
|
|
|
hg rebase -s 1 -d 3
|
|
|
|
|
|
echo
|
|
|
echo '% Rebase - same thing, but mq patch is default dest'
|
|
|
hg update -q 1
|
|
|
hg rebase
|
|
|
hg update -q qtip
|
|
|
|
|
|
echo
|
|
|
echo '% Rebase - generate a conflict'
|
|
|
hg rebase -s 2 -d 1
|
|
|
|
|
|
echo
|
|
|
echo '% Fix the 1st conflict'
|
|
|
echo 'mq1r1' > f
|
|
|
hg resolve -m f
|
|
|
hg rebase -c | hidebackup
|
|
|
|
|
|
echo
|
|
|
echo '% Fix the 2nd conflict'
|
|
|
echo 'mq1r1mq2' > f
|
|
|
hg resolve -m f
|
|
|
hg rebase -c | hidebackup
|
|
|
|
|
|
hg glog --template '{rev} {desc} tags: {tags}\n'
|
|
|
|
|
|
echo
|
|
|
echo '% Update to qbase'
|
|
|
hg up qbase
|
|
|
echo '% f correctly reflects the merge result'
|
|
|
cat f
|
|
|
echo '% And the patch is correct'
|
|
|
cat .hg/patches/f.patch | filterpatch
|
|
|
|
|
|
echo
|
|
|
echo '% Update to qtip'
|
|
|
hg up qtip
|
|
|
echo '% f correctly reflects the merge result'
|
|
|
cat f
|
|
|
echo '% And the patch is correct'
|
|
|
cat .hg/patches/f2.patch | filterpatch
|
|
|
|
|
|
echo
|
|
|
echo '% Adding one git-style patch and one normal'
|
|
|
hg qpop -a
|
|
|
rm -fr .hg/patches
|
|
|
hg qinit -c
|
|
|
|
|
|
hg up 0
|
|
|
hg qnew --git f_git.patch
|
|
|
echo 'mq1' > p
|
|
|
hg add p
|
|
|
hg qref --git -m 'P0 (git)'
|
|
|
|
|
|
hg qnew f.patch
|
|
|
echo 'mq2' > p
|
|
|
hg qref -m 'P1'
|
|
|
hg qcommit -m 'save patch state'
|
|
|
echo '% patch series step 1/2'
|
|
|
hg qseries -s
|
|
|
echo '% patch queue manifest step 1/2'
|
|
|
hg -R .hg/patches manifest
|
|
|
|
|
|
echo '% Git patch'
|
|
|
cat .hg/patches/f_git.patch | filterpatch
|
|
|
|
|
|
echo
|
|
|
echo '% Normal patch'
|
|
|
cat .hg/patches/f.patch | filterpatch
|
|
|
|
|
|
echo
|
|
|
echo '% Rebase the applied mq patches'
|
|
|
hg rebase -s 2 -d 1 --quiet
|
|
|
hg qcommit -m 'save patch state'
|
|
|
echo '% patch series step 2/2'
|
|
|
hg qseries -s
|
|
|
echo '% patch queue manifest step 2/2'
|
|
|
hg -R .hg/patches manifest
|
|
|
|
|
|
echo '% And the patches are correct'
|
|
|
echo '% Git patch'
|
|
|
cat .hg/patches/f_git.patch | filterpatch
|
|
|
|
|
|
echo
|
|
|
echo '% Normal patch'
|
|
|
cat .hg/patches/f.patch | filterpatch
|
|
|
|
|
|
|