view tests/test-rebase-mq @ 11635:4da35e02b67c

log: do not redefine cachefunc in walkchangerevs The same variable is defined a few blocks earlier. The first phases in walkchangerevs should in fact fill that cache, and allow faster lookups in the last phase. Redefining and overriding this cached function, (knowing that it will be called with the same arguments) defeats the caching purpose.
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Tue, 20 Jul 2010 14:42:05 +0900
parents 92342fa9fbd8
children
line wrap: on
line source

#!/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