Mercurial > hg
view tests/run-tests @ 1031:503aaf19a040
Rewrite log command. New version is faster and more featureful.
The original implementation of log walked backwards through history,
which had terrible behaviour. It took several minutes to view
complete kernel change history on a fast machine, for example.
The rewrite uses a windowed approach to walk hunks of history
forwards, while still giving results in reverse order. This reduces
run time from five minutes to five seconds on my system.
In addition, the rewrite uses our normal name handling mechanisms, so
you can run a command like "hg log net/ipv4/**.c" and get a useful
answer. It optimises for three different cases (no arguments, only
files, and anything goes), so it performs well in all circumstances
I've tested.
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Wed, 24 Aug 2005 12:39:10 -0700 |
parents | 5a034646e472 |
children | 8ab1c07d4e0b |
line wrap: on
line source
#!/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" } # Remove temporary files even if we get interrupted trap "cleanup_exit" 0 # normal exit trap "exit 255" 1 2 3 6 15 # HUP INT QUIT ABRT TERM 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 else cat tests/install.err 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 cp "$OUT" "$ERR" echo echo "$1 output changed:" diff -u "$OUTOK" "$ERR" || true fail=1 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 exit 1 fi exit 0