tests/test-walk
author Alexis S. L. Carvalho <alexis@cecm.usp.br>
Thu, 04 Oct 2007 23:21:37 -0300
changeset 5378 8a2915f57dfc
parent 4306 d4f0405fadac
permissions -rwxr-xr-x
convert: add a mode where mercurial_sink skips empty revisions. The getchanges function of some converter_source classes can return some false positives. I.e. they sometimes claim that a file "foo" was changed in some revision, even though its contents are still the same. convert_svn is particularly bad, but I think this can also happen with convert_cvs and, at least in theory, with mercurial_source. For regular conversions this is not really a problem - as long as getfile returns the right contents, we'll get a converted revision with the right contents. But when we use --filemap, this could lead to superfluous revisions being converted. Instead of fixing every converter_source, I decided to change mercurial_sink to work around this problem. When --filemap is used, we're interested only in revisions that touch some specific files. If a revision doesn't change any of these files, then we're not interested in it (at least for revisions with a single parent; merges are special). For mercurial_sink, we abuse this property and rollback a commit if the manifest text hasn't changed. This avoids duplicating the logic from localrepo.filecommit to detect unchanged files.

#!/bin/sh

debugwalk()
{
    echo "hg debugwalk $@"
    hg debugwalk "$@"
    echo
}

chdir()
{
    echo "cd $@"
    cd "$@"
    echo
}

mkdir t
cd t
hg init
mkdir -p beans
for b in kidney navy turtle borlotti black pinto; do
    echo $b > beans/$b
done
mkdir -p mammals/Procyonidae
for m in cacomistle coatimundi raccoon; do
    echo $m > mammals/Procyonidae/$m
done
echo skunk > mammals/skunk
echo fennel > fennel
echo fenugreek > fenugreek
echo fiddlehead > fiddlehead
echo glob:glob > glob:glob
hg addremove
hg commit -m "commit #0" -d "1000000 0"
debugwalk
debugwalk -I.
chdir mammals
debugwalk
debugwalk -X ../beans
debugwalk -I '*k'
debugwalk -I 'glob:*k'
debugwalk -I 'relglob:*k'
debugwalk -I 'relglob:*k' .
debugwalk -I 're:.*k$'
debugwalk -I 'relre:.*k$'
debugwalk -I 'path:beans'
debugwalk -I 'relpath:../beans'
debugwalk .
debugwalk -I.
debugwalk Procyonidae
chdir Procyonidae
debugwalk .
debugwalk ..
chdir ..
debugwalk ../beans
debugwalk .
debugwalk .hg
debugwalk ../.hg
chdir ..
debugwalk -Ibeans
debugwalk 'glob:mammals/../beans/b*'
debugwalk '-X*/Procyonidae' mammals
debugwalk path:mammals
debugwalk ..
debugwalk beans/../..
debugwalk .hg
debugwalk beans/../.hg
debugwalk beans/../.hg/data
debugwalk beans/.hg
# Don't know how to test absolute paths without always getting a false
# error.
#debugwalk `pwd`/beans
#debugwalk `pwd`/..
debugwalk glob:\*
debugwalk 'glob:**e'
debugwalk 're:.*[kb]$'
debugwalk path:beans/black
debugwalk path:beans//black
debugwalk relglob:Procyonidae
debugwalk 'relglob:Procyonidae/**'
debugwalk 'relglob:Procyonidae/**' fennel
debugwalk beans 'glob:beans/*'
debugwalk 'glob:mamm**'
debugwalk 'glob:mamm**' fennel
debugwalk 'glob:j*'
debugwalk NOEXIST
mkfifo fifo
debugwalk fifo
rm fenugreek
debugwalk fenugreek
hg rm fenugreek
debugwalk fenugreek
touch new
debugwalk new
chdir ..
debugwalk -R t t/mammals/skunk
mkdir t2
chdir t2
debugwalk -R ../t ../t/mammals/skunk
debugwalk --cwd ../t mammals/skunk