|  | # 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 $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} | 
|  |  | 
|  | if ! DIR_A=$(build_version "$VERSION_A") || | 
|  | ! DIR_B=$(build_version "$VERSION_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" |