Attempt to yield names in sorted order when walking.
This is an improvement in behaviour, but the walk and changes code still
has some flaws that make sorted name presentation difficult:
- changes returns tuples of names, instead of a sorted list of (name,
status) pairs.
- walk yields deleted names after all others.
#!/bin/sh -e
LANG="C"; export LANG
LC_CTYPE="C"; export LC_CTYPE
LC_NUMERIC="C"; export LC_NUMERIC
LC_TIME="C"; export LC_TIME
LC_COLLATE="C"; export LC_COLLATE
LC_MONETARY="C"; export LC_MONETARY
LC_MESSAGES="C"; export LC_MESSAGES
LC_PAPER="C"; export LC_PAPER
LC_NAME="C"; export LC_NAME
LC_ADDRESS="C"; export LC_ADDRESS
LC_TELEPHONE="C"; export LC_TELEPHONE
LC_MEASUREMENT="C"; export LC_MEASUREMENT
LC_IDENTIFICATION="C"; export LC_IDENTIFICATION
LC_ALL=""; export LC_ALL
TZ=GMT; export TZ
HGEDITOR=true; export HGEDITOR
HGMERGE=true; export HGMERGE
HGUSER="test"; export HGUSER
umask 022
tests=0
failed=0
HGTMP=""
cleanup_exit() {
rm -rf "$HGTMP"
exit $1
}
# Remove temporary files even if we get interrupted
trap "cleanup_exit 255" TERM KILL INT QUIT ABRT
HGTMP="${TMPDIR-/tmp}/hgtests.$RANDOM.$RANDOM.$RANDOM.$$"
(umask 077 && mkdir "$HGTMP") || {
echo "Could not create temporary directory! Exiting." 1>&2
exit 1
}
TESTDIR="$PWD"
if [ -d /usr/lib64 ]; then
lib=lib64
else
lib=lib
fi
INST="$HGTMP/install"
cd ..
if ${PYTHON-python} setup.py install --home="$INST" > tests/install.err 2>&1
then
rm tests/install.err
mv "$INST/bin/hg" "$INST/bin/hg.real"
(
echo '#!/bin/sh'
echo 'echo "+ hg $@"'
echo 'exec hg.real "$@"'
) > "$INST/bin/hg"
chmod 755 "$INST/bin/hg"
else
cat tests/install.err
cleanup_exit 1
fi
cd "$TESTDIR"
PATH="$INST/bin:$PATH"; export PATH
PYTHONPATH="$INST/$lib/python"; export PYTHONPATH
run_one() {
rm -f "$1.err"
mkdir "$HGTMP/$1"
cd "$HGTMP/$1"
fail=0
HOME="$HGTMP/$1"; export HOME
OUT="$HGTMP/$1.out"
OUTOK="$TESTDIR/$1.out"
ERR="$TESTDIR/$1.err"
if "$TESTDIR/$1" > "$OUT" 2>&1; then
: no error
else
echo "$1 failed with error code $?"
fail=1
fi
if [ -s "$OUT" -a ! -s "$OUTOK" ] ; then
cp "$OUT" "$ERR"
echo
echo "$1 generated unexpected output:"
cat "$ERR"
fail=1
elif [ -r "$OUTOK" ]; then
if diff -u "$OUTOK" "$OUT" > /dev/null; then
: no differences
else
if FIXME="`grep 'FIXME' \"$TESTDIR/$1\"`"; then
echo
echo "$1 failed, but this is ignored because of:"
echo "$FIXME"
else
cp "$OUT" "$ERR"
echo
echo "$1 output changed:"
diff -u "$OUTOK" "$ERR" || true
fail=1
fi
fi
fi
cd "$TESTDIR"
rm -f "$HGTMP/$1.out"
rm -rf "$HGTMP/$1"
return $fail
}
TESTS="$*"
if [ -z "$TESTS" ] ; then
TESTS=`ls test-* | grep -v "[.~]"`
fi
for f in $TESTS ; do
echo -n "."
run_one $f || failed=`expr $failed + 1`
tests=`expr $tests + 1`
done
echo
echo "Ran $tests tests, $failed failed."
if [ $failed -gt 0 ] ; then
cleanup_exit 1
fi
cleanup_exit 0