view tests/test-transplant @ 8810:ac92775b3b80

Add patch.eol to ignore EOLs when patching (issue1019) The intent is to fix many issues involving patching when win32ext is enabled. With win32ext, the working directory and repository files EOLs are not the same which means that patches made on a non-win32ext host do not apply cleanly because of EOLs discrepancies. A theorically correct approach would be transform either the patched file or the patch content with the encoding/decoding filters used by win32ext. This solution is tricky to implement and invasive, instead we prefer to address the win32ext case, by offering a way to ignore input EOLs when patching and rewriting them when saving the patched result.
author Patrick Mezard <pmezard@gmail.com>
date Mon, 15 Jun 2009 00:03:26 +0200
parents 3f4f14eab085
children 8b35b08724eb
line wrap: on
line source

#!/bin/sh

cat <<EOF >> $HGRCPATH
[extensions]
transplant=
EOF

hg init t
cd t
echo r1 > r1
hg ci -Amr1 -d'0 0'
echo r2 > r2
hg ci -Amr2 -d'1 0'
hg up 0

echo b1 > b1
hg ci -Amb1 -d '0 0'
echo b2 > b2
hg ci -Amb2 -d '1 0'
echo b3 > b3
hg ci -Amb3 -d '2 0'

hg log --template '{rev} {parents} {desc}\n'

hg clone . ../rebase
cd ../rebase

hg up -C 1
echo '% rebase b onto r1'
hg transplant -a -b tip
hg log --template '{rev} {parents} {desc}\n'

hg clone ../t ../prune
cd ../prune

hg up -C 1
echo '% rebase b onto r1, skipping b2'
hg transplant -a -b tip -p 3
hg log --template '{rev} {parents} {desc}\n'

echo '% remote transplant'
hg clone -r 1 ../t ../remote
cd ../remote
hg transplant --log -s ../t 2 4
hg log --template '{rev} {parents} {desc}\n'

echo '% skip previous transplants'
hg transplant -s ../t -a -b 4
hg log --template '{rev} {parents} {desc}\n'

echo '% skip local changes transplanted to the source'
echo b4 > b4
hg ci -Amb4 -d '3 0'
hg clone ../t ../pullback
cd ../pullback
hg transplant -s ../remote -a -b tip

echo '% remote transplant with pull'
hg -R ../t serve -p $HGPORT -d --pid-file=../t.pid
cat ../t.pid >> $DAEMON_PIDS

hg clone -r 0 ../t ../rp
cd ../rp
hg transplant -s http://localhost:$HGPORT/ 2 4
hg log --template '{rev} {parents} {desc}\n'

echo '% transplant --continue'
hg init ../tc
cd ../tc
cat <<EOF > foo
foo
bar
baz
EOF
echo toremove > toremove
hg ci -Amfoo
cat <<EOF > foo
foo2
bar2
baz2
EOF
rm toremove
echo added > added
hg ci -Amfoo2
echo bar > bar
hg ci -Ambar
echo bar2 >> bar
hg ci -mbar2
hg up 0
echo foobar > foo
hg ci -mfoobar
hg transplant 1:3
# transplant -c shouldn't use an old changeset
hg up -C
rm added
hg transplant 1
hg transplant --continue
hg transplant 1:3
hg locate
cd ..

# Test transplant --merge (issue 1111)
echo % test transplant merge
hg init t1111
cd t1111
echo a > a
hg ci -Am adda
echo b >> a
hg ci -m appendb
echo c >> a
hg ci -m appendc
hg up -C 0
echo d >> a
hg ci -m appendd
echo % tranplant
hg transplant -m 1
cd ..

echo '% test transplant into empty repository'
hg init empty
cd empty
hg transplant -s ../t -b tip -a
cd ..

echo '% test filter'
hg init filter
cd filter
cat <<'EOF' >test-filter
#!/bin/sh
sed 's/r1/r2/' $1 > $1.new
mv $1.new $1
EOF
chmod +x test-filter
hg transplant -s ../t -b tip -a --filter ./test-filter |\
    sed 's/filtering.*/filtering/g'
hg log --template '{rev} {parents} {desc}\n'