tests/test-purge
author Edouard Gomez <ed.gomez@free.fr>
Sat, 12 May 2007 00:41:30 +0200
changeset 4834 439e2f2fde42
parent 4691 ca4971347e0a
child 5517 98d5f9b95699
permissions -rwxr-xr-x
Fix inconsistency for the stream_out capability in hgweb During some experiments of mine, the uncompressed cloning could not be enabled for hgweb.cgi nor hgwebdir.cgi though the server claimed to be stream_out capable. The only solution was to enable it using the user's .hgrc file. This solution is not acceptable when publishing the repos through an HTTP server because the CGI runs as a www dedicated user whose's home hgrc file may not be accessible to users publishing their repos through their userdir. For such cases we could end up with this typical debug output: hg --debug clone --uncompressed http://server/hg/project destination directory: project sending capabilities command capabilities: lookup changegroupsubset stream=1 unbundle=HG10GZ,HG10BZ,HG10UN sending stream_out command abort: operation forbidden by server The error lies in the fact the hgweb object defines new accessors to the repo configuration that trust things by default (untrusted=True) but the streamclone:stream_out function uses the usual accessors to the repo.ui object, which do not trust by default (untrusted=False) Fix this inconsistency, adding a new parameter to the stream_out function. hgweb then forces a "trust by default" behavior.

#!/bin/sh

cat <<EOF >> $HGRCPATH
[extensions]
hgext.purge=
EOF

echo % init
hg init t
cd t

echo % setup
echo r1 > r1
hg ci -qAmr1 -d'0 0'
mkdir directory
echo r2 > directory/r2
hg ci -qAmr2 -d'1 0'
echo 'ignored' > .hgignore
hg ci -qAmr3 -d'2 0'

echo % delete an empty directory
mkdir empty_dir
hg purge -p
hg purge -v
ls

echo % delete an untracked directory
mkdir untracked_dir
touch untracked_dir/untracked_file1
touch untracked_dir/untracked_file2
hg purge -p
hg purge -v
ls

echo % delete an untracked file
touch untracked_file
hg purge -p
hg purge -v
ls

echo % delete an untracked file in a tracked directory
touch directory/untracked_file
hg purge -p
hg purge -v
ls

echo % delete nested directories
mkdir -p untracked_directory/nested_directory
hg purge -p
hg purge -v
ls

echo % delete nested directories from a subdir
mkdir -p untracked_directory/nested_directory
cd directory
hg purge -p
hg purge -v
cd ..
ls

echo % delete only part of the tree
mkdir -p untracked_directory/nested_directory
touch directory/untracked_file
cd directory
hg purge -p ../untracked_directory
hg purge -v ../untracked_directory
cd ..
ls
ls directory/untracked_file
rm directory/untracked_file

echo % skip ignored files if --all not specified
touch ignored
hg purge -p
hg purge -v
ls
hg purge -p --all
hg purge -v --all
ls

echo % abort with missing files until we support name mangling filesystems
touch untracked_file
rm r1
# hide error messages to avoid changing the output when the text changes
hg purge -p 2> /dev/null
if [ $? -ne 0 ]; then
    echo "refused to run"
fi
if [ -f untracked_file ]; then
    echo "untracked_file still around"
fi
hg purge -p --force
hg purge -v 2> /dev/null
if [ $? -ne 0 ]; then
    echo "refused to run"
fi
if [ -f untracked_file ]; then
    echo "untracked_file still around"
fi
hg purge -v --force
hg revert --all --quiet
ls

echo % skip excluded files
touch excluded_file
hg purge -p -X excluded_file
hg purge -v -X excluded_file
ls
rm excluded_file

echo % skip files in excluded dirs
mkdir excluded_dir
touch excluded_dir/file
hg purge -p -X excluded_dir
hg purge -v -X excluded_dir
ls
ls excluded_dir
rm -R excluded_dir

echo % skip excluded empty dirs
mkdir excluded_dir
hg purge -p -X excluded_dir
hg purge -v -X excluded_dir
ls
rmdir excluded_dir

echo % skip patterns
mkdir .svn
touch .svn/foo
mkdir directory/.svn
touch directory/.svn/foo
hg purge -p -X .svn -X '*/.svn'
hg purge -p -X re:.*.svn