view tests/test-mq-merge @ 10300:c437745f50ec

run-tests: split tests/blacklist in tests/blacklists/* Following discussions with Gilles Morris [1], it seems that it is preferable to use several blacklist files in a blacklists/ directory. It is easier to add an unversioned file for experiments than modifying a tracked file. Also fall back to a simpler syntax, giving up ConfigParser, now that section names are not needed anymore. And allow --blacklist parameter to be a complete path, instead of only one of the filenames contained in tests/blacklists/ [1] http://www.selenic.com/pipermail/mercurial-devel/2009-December/017317.html
author Nicolas Dumazet <nicdumz.commits@gmail.com>
date Thu, 10 Dec 2009 17:21:31 +0900
parents 9c2c94934f0d
children c52057614c72
line wrap: on
line source

#!/bin/sh

# Test issue 529 - mq aborts when merging patch deleting files

rewrite_path()
{
    sed -e 's:\\:/:g' -e 's:[^ ]*/t/::g'
}

checkundo()
{
    if [ -f .hg/store/undo ]; then
	echo ".hg/store/undo still exists after $1"
    fi
}

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

# Commit two dummy files in "init" changeset
hg init t
cd t
echo a > a
echo b > b
hg ci -Am init
hg tag -l init

# Create a patch removing a
hg qnew rm_a
hg rm a
hg qrefresh -m "rm a"

# Save the patch queue so we can merge it later
hg qsave -c -e 2>&1 | rewrite_path
checkundo qsave

# Update b and commit in an "update" changeset
hg up -C init
echo b >> b
hg st
hg ci -m update

# Here, qpush used to abort with :
# The system cannot find the file specified => a
hg manifest
hg qpush -a -m 2>&1 | rewrite_path
checkundo 'qpush -m'
hg manifest

# ensure status is correct after merge
hg qpop -a
cd ..

# Classic MQ merge sequence *with an explicit named queue*
echo
echo % init t2
hg init t2
cd t2
echo '[diff]' > .hg/hgrc
echo 'nodates = 1' >> .hg/hgrc
echo a > a
hg ci -Am init
echo b > a
hg ci -m changea
hg up -C 0
hg cp a aa
echo c >> a
hg qnew --git -f -e patcha
echo d >> a
hg qnew -d '0 0' -f -e patcha2
echo % create the reference queue
hg qsave -c -e -n refqueue 2> /dev/null
hg up -C 1
echo % merge
HGMERGE=internal:other hg qpush -a -m -n refqueue 2>&1 | \
    sed 's/merging with queue at.*refqueue/merging with queue at refqueue/'
echo % check patcha is still a git patch
cat .hg/patches/patcha
echo % check patcha2 is still a regular patch
grep git .hg/patches/patcha2 && echo 'git patch found!'
cd ..