#!/bin/sh

echo "[extensions]" >> $HGRCPATH
echo "graphlog=" >> $HGRCPATH
echo "rebase=" >> $HGRCPATH
echo "mq=" >> $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 - 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 2>&1 | sed -e 's/\(saving bundle to \).*/\1/'

echo
echo '% Fix the 2nd conflict'
echo 'mq1r1mq2' > f
hg resolve -m f
hg rebase -c 2>&1 | sed -e 's/\(saving bundle to \).*/\1/'

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'

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 2>&1 | sed -e 's/\(saving bundle to \).*/\1/'

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

