#!/bin/sh

cat <<EOF >> $HGRCPATH
[extensions]
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
touch untracked_file_readonly
python <<EOF
import os, stat
f= 'untracked_file_readonly'
os.chmod(f, stat.S_IMODE(os.stat(f).st_mode) & ~stat.S_IWRITE)
EOF
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
hg st

hg purge -p
hg purge -v 2> /dev/null
hg st

hg purge -v
hg revert --all --quiet
hg st -a

echo '% tracked file in ignored directory (issue621)'
echo directory >> .hgignore
hg ci -m 'ignore directory'
touch untracked_file
hg purge -p
hg purge -v

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
