view tests/test-clone @ 12252:4481f8a93c7a stable

convert/darcs: handle non-ASCII metadata in darcs changelog (issue2354) Given a commit author or message with non-ASCII characters in a darcs repo, convert would raise a UnicodeEncodeError when adding changesets to the hg changelog. This happened because etree returns back unicode objects for any text it can't encode into ASCII. convert was passing these objects to changelog.add(), which would then attempt encoding.fromlocal() on them. This patch ensures converter_source.recode() is called on each piece of commit data returned by etree. (Also note that darcs is currently encoding agnostic and will print out whatever is in a patch's metadata byte-for-byte, even in the XML changelog.)
author Brodie Rao <brodie@bitheap.org>
date Fri, 10 Sep 2010 09:30:50 -0500
parents b1ae33b813cb
children
line wrap: on
line source

#!/bin/sh

echo
echo % prepare repo a
mkdir a
cd a
hg init
echo a > a
hg add a
hg commit -m test
echo first line > b
hg add b
# create a non-inlined filelog
python -c 'for x in range(10000): print x' >> data1
for j in 0 1 2 3 4 5 6 7 8 9; do
    cat data1 >> b
    hg commit -m test
done
echo % "list files in store/data (should show a 'b.d')"
for i in .hg/store/data/*; do
    echo $i
done

echo
echo % default operation
hg clone . ../b
cd ../b
cat a
hg verify

echo
echo % no update, with debug option
hg --debug clone -U . ../c
cd ../c
cat a 2>/dev/null || echo "a not present"
hg verify

echo
echo % default destination
mkdir ../d
cd ../d
hg clone ../a
cd a
hg cat a

echo
echo % "check that we drop the file: from the path before"
echo % "writing the .hgrc"
cd ../..
hg clone file:a e
grep 'file:' e/.hg/hgrc

echo
echo % check that path aliases are expanded
hg clone -q -U --config 'paths.foobar=a#0' foobar f
hg -R f showconfig paths.default | sed -e 's,.*/,,'

echo
echo % use --pull
hg clone --pull a g
hg -R g verify

echo
echo % clone to '.'
mkdir h
cd h
hg clone ../a .
cd ..

echo
echo
echo % "*** tests for option -u ***"
echo


echo
echo % "adding some more history to repo a"
cd a
echo % "tag ref1"
hg tag ref1
echo the quick brown fox >a
hg ci -m "hacked default"
echo % "updating back to ref1"
hg up ref1
echo
echo % "add branch 'stable' to repo a for later tests"
hg branch stable
echo some text >a
hg ci -m "starting branch stable"
echo % "tag ref2"
hg tag ref2
echo some more text >a
hg ci -m "another change for branch stable"
echo
echo % "updating back to ref2"
hg up ref2
echo
echo % "parents of repo a"
hg parents
echo
echo % "repo a has two heads"
hg heads
cd ..

echo
echo % "testing clone -U -u 1 a ua (must abort)"
hg clone -U -u 1 a ua

echo
echo % "testing clone -u . a ua"
hg clone -u . a ua
echo
echo % "repo ua has both heads"
hg -R ua heads
echo
echo % "same revision checked out in repo a and ua"
hg -R a parents --template "{node|short}\n"
hg -R ua parents --template "{node|short}\n"
rm -r ua

echo
echo % "testing clone --pull -u . a ua"
hg clone --pull -u . a ua
echo
echo % "repo ua has both heads"
hg -R ua heads
echo
echo % "same revision checked out in repo a and ua"
hg -R a parents --template "{node|short}\n"
hg -R ua parents --template "{node|short}\n"
rm -r ua

echo
echo % "testing clone -u stable a ua"
hg clone -u stable a ua
echo
echo % "repo ua has both heads"
hg -R ua heads
echo
echo % "branch stable is checked out"
hg -R ua parents
rm -r ua

echo
echo % "testing clone a ua"
hg clone a ua
echo
echo % "repo ua has both heads"
hg -R ua heads
echo
echo % "branch default is checked out"
hg -R ua parents
rm -r ua

echo
echo % "testing clone -u . a#stable ua"
hg clone -u . a#stable ua
echo
echo % "repo ua has only branch stable"
hg -R ua heads
echo
echo % "same revision checked out in repo a and ua"
hg -R a parents --template "{node|short}\n"
hg -R ua parents --template "{node|short}\n"
rm -r ua

echo
echo % "testing clone -u . -r stable a ua"
hg clone -u . -r stable a ua
echo
echo % "repo ua has only branch stable"
hg -R ua heads
echo
echo % "same revision checked out in repo a and ua"
hg -R a parents --template "{node|short}\n"
hg -R ua parents --template "{node|short}\n"
rm -r ua

echo
echo % "testing clone -r stable a ua"
hg clone -r stable a ua
echo
echo % "repo ua has only branch stable"
hg -R ua heads
echo
echo % "branch stable is checked out"
hg -R ua parents
rm -r ua

echo
echo % "testing clone -u . -r stable -r default a ua"
hg clone -u . -r stable -r default a ua
echo
echo % "repo ua has two heads"
hg -R ua heads
echo
echo % "same revision checked out in repo a and ua"
hg -R a parents --template "{node|short}\n"
hg -R ua parents --template "{node|short}\n"
rm -r ua

cat <<EOF > simpleclone.py
from mercurial import ui, hg
myui = ui.ui()
repo = hg.repository(myui, 'a')
hg.clone(myui, repo, dest="ua")
EOF

python simpleclone.py
rm -r ua

cat <<EOF > branchclone.py
from mercurial import ui, hg
myui = ui.ui()
repo = hg.repository(myui, 'a')
hg.clone(myui, repo, dest="ua", branch=["stable",])
EOF

python branchclone.py
rm -r ua

exit 0