tests/test-purge
author Bryan O'Sullivan <bos@serpentine.com>
Tue, 24 Apr 2007 10:53:25 -0700
changeset 4369 d7ad1e42a368
parent 4308 1043e4b27ab9
child 4462 a73cf208b2a0
permissions -rwxr-xr-x
util._matcher: speed up regexp matching. In 4babaa52badf, Benoit made a change that substantially slows matching when a big .hgignore file is in play, because it calls into the regexp matching engine potentially hundreds of times per file to be matched. I've partly rolled back his change, so that we only call into the matcher once per file, but preserved the ability to report a meaningful error message if there's a syntax error in the regexp.

#!/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 % delete ignored files
touch ignored
hg purge -p
hg purge -v
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