view tests/test-transplant @ 10358:d42821cd5c96

pull: with -u and -r, update to the first revision given This makes pull consistent with clone. The actual change is in mercurial.hg.parseurl, changing its checkout result, which is only used for pull.
author Sune Foldager <cryo@cyanite.org>
date Sat, 06 Feb 2010 20:24:51 +0100
parents eba6c8687fd2
children
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'
cd ..

echo '% test filter with failed patch'
cd filter
hg up 0
echo foo > b1
hg ci -d '0 0' -Am foo
hg transplant 1 --filter ./test-filter |\
    sed 's/filtering.*/filtering/g'
cd ..

echo '% test with a win32ext like setup (differing EOLs)'
hg init twin1
cd twin1
echo a > a
echo b > b
echo b >> b
hg ci -Am t
echo a > b
echo b >> b
hg ci -m changeb
cd ..

hg init twin2
cd twin2
echo '[patch]' >> .hg/hgrc
echo 'eol = crlf' >> .hg/hgrc
python -c "file('b', 'wb').write('b\r\nb\r\n')"
hg ci -m addb
hg transplant -s ../twin1 tip
python -c "print repr(file('b', 'rb').read())"
cd ..