1#!/bin/sh
2
3case "$1" in
4 --help)
5 echo "usage: $0 [other_git_tree...] [--] [test_scripts]"
6 exit 0
7 ;;
8esac
9
10die () {
11 echo >&2 "error: $*"
12 exit 1
13}
14
15run_one_dir () {
16 if test $# -eq 0; then
17 set -- p????-*.sh
18 fi
19 echo "=== Running $# tests in ${GIT_TEST_INSTALLED:-this tree} ==="
20 for t in "$@"; do
21 ./$t $GIT_TEST_OPTS
22 done
23}
24
25unpack_git_rev () {
26 rev=$1
27 mkdir -p build/$rev
28 (cd "$(git rev-parse --show-cdup)" && git archive --format=tar $rev) |
29 (cd build/$rev && tar x)
30}
31build_git_rev () {
32 rev=$1
33 for config in config.mak config.mak.autogen config.status
34 do
35 if test -e "../../$config"
36 then
37 cp "../../$config" "build/$rev/"
38 fi
39 done
40 (
41 cd build/$rev &&
42 if test -n "$GIT_PERF_MAKE_COMMAND"
43 then
44 sh -c "$GIT_PERF_MAKE_COMMAND"
45 else
46 make $GIT_PERF_MAKE_OPTS
47 fi
48 ) || die "failed to build revision '$mydir'"
49}
50
51run_dirs_helper () {
52 mydir=${1%/}
53 shift
54 while test $# -gt 0 -a "$1" != -- -a ! -f "$1"; do
55 shift
56 done
57 if test $# -gt 0 -a "$1" = --; then
58 shift
59 fi
60 if [ ! -d "$mydir" ]; then
61 rev=$(git rev-parse --verify "$mydir" 2>/dev/null) ||
62 die "'$mydir' is neither a directory nor a valid revision"
63 if [ ! -d build/$rev ]; then
64 unpack_git_rev $rev
65 fi
66 build_git_rev $rev
67 mydir=build/$rev
68 fi
69 if test "$mydir" = .; then
70 unset GIT_TEST_INSTALLED
71 else
72 GIT_TEST_INSTALLED="$mydir/bin-wrappers"
73 # Older versions of git lacked bin-wrappers; fallback to the
74 # files in the root.
75 test -d "$GIT_TEST_INSTALLED" || GIT_TEST_INSTALLED=$mydir
76 export GIT_TEST_INSTALLED
77 fi
78 run_one_dir "$@"
79}
80
81run_dirs () {
82 while test $# -gt 0 -a "$1" != -- -a ! -f "$1"; do
83 run_dirs_helper "$@"
84 shift
85 done
86}
87
88GIT_PERF_AGGREGATING_LATER=t
89export GIT_PERF_AGGREGATING_LATER
90
91cd "$(dirname $0)"
92. ../../GIT-BUILD-OPTIONS
93
94if test $# = 0 -o "$1" = -- -o -f "$1"; then
95 set -- . "$@"
96fi
97run_dirs "$@"
98./aggregate.perl "$@"