#!/bin/sh

echo "[extensions]" >> $HGRCPATH
echo "mq=" >> $HGRCPATH

catpatch() {
    cat $1 | sed -e "s/^\(# Parent \).*/\1/"
}

echo % init
hg init a
cd a

echo % commit
mkdir 1 2
echo 'base' > 1/base
echo 'base' > 2/base
hg ci -Ambase -d '1 0'

echo % qnew mqbase
hg qnew -mmqbase mqbase

echo % qrefresh
echo 'patched' > 1/base
echo 'patched' > 2/base
hg qrefresh

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qrefresh 1
echo 'patched again' > base
hg qrefresh 1

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qrefresh . in subdir
( cd 1 ; hg qrefresh . )

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qrefresh in hg-root again
hg qrefresh

echo % qdiff
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % qdiff dirname
hg qdiff . | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
                 -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % patch file contents
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo
echo % qrefresh --short tests:
echo 'orphan' > orphanchild
hg add orphanchild

echo % - add 1/base and 2/base one by one
hg qrefresh nonexistingfilename # clear patch
hg qrefresh --short 1/base
hg qrefresh --short 2/base

echo % -- qdiff output
hg qdiff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
               -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"

echo % -- patch file content
catpatch .hg/patches/mqbase | \
sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
    -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/"
hg st

echo % -- diff shows what is not in patch
hg diff | sed -e "s/\(+++ [a-zA-Z0-9_/.-]*\).*/\1/" \
              -e "s/\(--- [a-zA-Z0-9_/.-]*\).*/\1/" \
              -e "s/^\(diff\).*/\1/"
echo % - before starting exclusive tests
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo % - exclude 2/base
hg qref -s -X 2/base
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo % -- status shows 2/base as dirty
hg st
echo % - remove 1/base and add 2/base again but not orphanchild
hg qref -s -X orphanchild -X 1/base 2/base orphanchild
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo % - add 1/base with include filter - and thus remove 2/base from patch
hg qref -s -I 1/ o* */*
sed -n '/^diff/s/diff -r [^ ]* //p' .hg/patches/mqbase
echo
cd ..

# Test qrefresh --git losing copy metadata
echo % create test repo
hg init repo
cd repo
echo "[diff]" >> .hg/hgrc
echo "git=True" >> .hg/hgrc
echo a > a
hg ci -Am adda
hg copy a ab
echo b >> ab
hg copy a ac
echo c >> ac
echo % capture changes
hg qnew -f p1
hg qdiff
echo % refresh and check changes again
hg qref
hg qdiff
cd ..

# Test issue 1441: qrefresh confused after hg rename
echo % issue1441 without git patches
hg init repo-1441
cd repo-1441
echo a > a
hg add a
hg qnew -f p
hg mv a b
hg qrefresh
hg qdiff --nodates
cd ..

echo '% issue2025: qrefresh does not honor filtering options when tip != qtip'
hg init repo-2025
cd repo-2025
echo a > a
echo b > b
hg ci -qAm addab
echo a >> a
echo b >> b
hg qnew -f patch
hg up -qC 0
echo c > c
hg ci -qAm addc
hg up -qC 1
echo '% refresh with tip != qtip'
hg --config diff.nodates=1 qrefresh -I b 2>&1 \
    | sed 's/saving bundle.*/saving bundle.../g'
echo '% status after refresh'
hg st
echo '% b after refresh'
cat b
echo '% patch file after refresh'
catpatch .hg/patches/patch
cd ..


echo % issue1441 with git patches
hg init repo-1441-git
cd repo-1441-git
echo "[diff]" >> .hg/hgrc
echo "git=True" >> .hg/hgrc
echo a > a
hg add a
hg qnew -f p
hg mv a b
hg qrefresh
hg qdiff --nodates
cd ..
