| # Interoperability testing framework. Each script should source | |
| # this after setting default $VERSION_A and $VERSION_B variables. | |
| . ../../GIT-BUILD-OPTIONS | |
| INTEROP_ROOT=$(pwd) | |
| BUILD_ROOT=$INTEROP_ROOT/build | |
| build_version () { | |
| if test -z "$1" | |
| then | |
| echo >&2 "error: test script did not set default versions" | |
| return 1 | |
| fi | |
| if test "$1" = "." | |
| then | |
| git rev-parse --show-toplevel | |
| return 0 | |
| fi | |
| sha1=$(git rev-parse "$1^{tree}") || return 1 | |
| dir=$BUILD_ROOT/$sha1 | |
| if test -e "$dir/.built" | |
| then | |
| echo "$dir" | |
| return 0 | |
| fi | |
| echo >&2 "==> Building $1..." | |
| mkdir -p "$dir" || return 1 | |
| (cd "$(git rev-parse --show-cdup)" && git archive --format=tar "$sha1") | | |
| (cd "$dir" && tar x) || | |
| return 1 | |
| for config in config.mak config.mak.autogen config.status | |
| do | |
| if test -e "$INTEROP_ROOT/../../$config" | |
| then | |
| cp "$INTEROP_ROOT/../../$config" "$dir/" || return 1 | |
| fi | |
| done | |
| ( | |
| cd "$dir" && | |
| make $2 $GIT_INTEROP_MAKE_OPTS >&2 && | |
| touch .built | |
| ) || return 1 | |
| echo "$dir" | |
| } | |
| # Old versions of git don't have bin-wrappers, so let's give a rough emulation. | |
| wrap_git () { | |
| write_script "$1" <<-EOF | |
| GIT_EXEC_PATH="$2" | |
| export GIT_EXEC_PATH | |
| PATH="$2:\$PATH" | |
| export GIT_EXEC_PATH | |
| exec git "\$@" | |
| EOF | |
| } | |
| generate_wrappers () { | |
| mkdir -p .bin && | |
| wrap_git .bin/git.a "$DIR_A" && | |
| wrap_git .bin/git.b "$DIR_B" && | |
| write_script .bin/git <<-\EOF && | |
| echo >&2 fatal: test tried to run generic git: $* | |
| exit 1 | |
| EOF | |
| PATH=$(pwd)/.bin:$PATH | |
| } | |
| VERSION_A=${GIT_TEST_VERSION_A:-$VERSION_A} | |
| VERSION_B=${GIT_TEST_VERSION_B:-$VERSION_B} | |
| MAKE_OPTS_A=${GIT_INTEROP_MAKE_OPTS_A:-$MAKE_OPTS_A} | |
| MAKE_OPTS_B=${GIT_INTEROP_MAKE_OPTS_B:-$MAKE_OPTS_B} | |
| if ! DIR_A=$(build_version "$VERSION_A" "$MAKE_OPTS_A") || | |
| ! DIR_B=$(build_version "$VERSION_B" "$MAKE_OPTS_B") | |
| then | |
| echo >&2 "fatal: unable to build git versions" | |
| exit 1 | |
| fi | |
| TEST_DIRECTORY=$INTEROP_ROOT/.. | |
| TEST_OUTPUT_DIRECTORY=$INTEROP_ROOT | |
| TEST_NO_CREATE_REPO=t | |
| . "$TEST_DIRECTORY"/test-lib.sh | |
| generate_wrappers || die "unable to set up interop test environment" |