mirror of
https://github.com/git/git.git
synced 2024-11-24 18:33:43 +08:00
28e1fb5466
It's tempting to say: ./run v1.0.0 HEAD to see how we've sped up Git over the years. Unfortunately, this doesn't quite work because versions of Git prior to v1.7.0 lack bin-wrappers, so our "run" script doesn't correctly put them in the PATH. Worse, it means we silently find whatever other "git" is in the PATH, and produce test results that have no bearing on what we asked for. Let's fallback to the main git directory when bin-wrappers isn't present. Many modern perf scripts won't run with such an antique version of Git, of course, but at least those failures are detected and reported (and you're free to write a limited perf script that works across many versions). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
92 lines
1.7 KiB
Bash
Executable File
92 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
case "$1" in
|
|
--help)
|
|
echo "usage: $0 [other_git_tree...] [--] [test_scripts]"
|
|
exit 0
|
|
;;
|
|
esac
|
|
|
|
die () {
|
|
echo >&2 "error: $*"
|
|
exit 1
|
|
}
|
|
|
|
run_one_dir () {
|
|
if test $# -eq 0; then
|
|
set -- p????-*.sh
|
|
fi
|
|
echo "=== Running $# tests in ${GIT_TEST_INSTALLED:-this tree} ==="
|
|
for t in "$@"; do
|
|
./$t $GIT_TEST_OPTS
|
|
done
|
|
}
|
|
|
|
unpack_git_rev () {
|
|
rev=$1
|
|
mkdir -p build/$rev
|
|
(cd "$(git rev-parse --show-cdup)" && git archive --format=tar $rev) |
|
|
(cd build/$rev && tar x)
|
|
}
|
|
build_git_rev () {
|
|
rev=$1
|
|
for config in config.mak config.mak.autogen config.status
|
|
do
|
|
if test -e "../../$config"
|
|
then
|
|
cp "../../$config" "build/$rev/"
|
|
fi
|
|
done
|
|
(cd build/$rev && make $GIT_PERF_MAKE_OPTS) ||
|
|
die "failed to build revision '$mydir'"
|
|
}
|
|
|
|
run_dirs_helper () {
|
|
mydir=${1%/}
|
|
shift
|
|
while test $# -gt 0 -a "$1" != -- -a ! -f "$1"; do
|
|
shift
|
|
done
|
|
if test $# -gt 0 -a "$1" = --; then
|
|
shift
|
|
fi
|
|
if [ ! -d "$mydir" ]; then
|
|
rev=$(git rev-parse --verify "$mydir" 2>/dev/null) ||
|
|
die "'$mydir' is neither a directory nor a valid revision"
|
|
if [ ! -d build/$rev ]; then
|
|
unpack_git_rev $rev
|
|
fi
|
|
build_git_rev $rev
|
|
mydir=build/$rev
|
|
fi
|
|
if test "$mydir" = .; then
|
|
unset GIT_TEST_INSTALLED
|
|
else
|
|
GIT_TEST_INSTALLED="$mydir/bin-wrappers"
|
|
# Older versions of git lacked bin-wrappers; fallback to the
|
|
# files in the root.
|
|
test -d "$GIT_TEST_INSTALLED" || GIT_TEST_INSTALLED=$mydir
|
|
export GIT_TEST_INSTALLED
|
|
fi
|
|
run_one_dir "$@"
|
|
}
|
|
|
|
run_dirs () {
|
|
while test $# -gt 0 -a "$1" != -- -a ! -f "$1"; do
|
|
run_dirs_helper "$@"
|
|
shift
|
|
done
|
|
}
|
|
|
|
GIT_PERF_AGGREGATING_LATER=t
|
|
export GIT_PERF_AGGREGATING_LATER
|
|
|
|
cd "$(dirname $0)"
|
|
. ../../GIT-BUILD-OPTIONS
|
|
|
|
if test $# = 0 -o "$1" = -- -o -f "$1"; then
|
|
set -- . "$@"
|
|
fi
|
|
run_dirs "$@"
|
|
./aggregate.perl "$@"
|