tests/test-transplant
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Tue, 05 Jun 2007 19:55:27 -0300
changeset 4508 0026ccc2bf23
parent 4050 75313c36aa04
child 5384 e3a0c092b4e2
permissions -rwxr-xr-x
Remove atomicfile class. The interface provided by opener(atomic=True) is inherently unsafe: if an exception is raised in the code using the atomic file, the possibly incomplete file will be renamed to its final destination, defeating the whole purpose of atomic files. To get around this, we would either need some bad hacks involving sys.exc_info (to make sure things work in except: blocks), or an interface to say "file is complete; rename it". This is the exact interface provided by atomictempfile. Since there are no remaining users of the atomicfile class, just remove it.

#!/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 20062 -d --pid-file=../t.pid
cat ../t.pid >> $DAEMON_PIDS

hg clone -r 0 ../t ../rp
cd ../rp
hg transplant -s http://localhost:20062/ 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 -d '0 0'
cat <<EOF > foo
foo2
bar2
baz2
EOF
rm toremove
echo added > added
hg ci -Amfoo2 -d '0 0'
echo bar > bar
hg ci -Ambar -d '0 0'
echo bar2 >> bar
hg ci -mbar2 -d '0 0'
hg up 0
echo foobar > foo
hg ci -mfoobar -d '0 0'
hg transplant 1:3
# transplant -c shouldn't use an old changeset
hg up -C
hg transplant 1
hg transplant --continue
hg transplant 1:3
hg locate