1# Interoperability testing framework. Each script should source 2# this after setting default $VERSION_A and $VERSION_B variables. 3 4. ../../GIT-BUILD-OPTIONS 5INTEROP_ROOT=$(pwd) 6BUILD_ROOT=$INTEROP_ROOT/build 7 8build_version () { 9 if test -z "$1" 10 then 11 echo >&2 "error: test script did not set default versions" 12 return 1 13 fi 14 15 if test "$1" = "." 16 then 17 git rev-parse --show-toplevel 18 return 0 19 fi 20 21 sha1=$(git rev-parse "$1^{tree}") || return 1 22 dir=$BUILD_ROOT/$sha1 23 24 if test -e "$dir/.built" 25 then 26 echo "$dir" 27 return 0 28 fi 29 30 echo >&2 "==> Building $1..." 31 32 mkdir -p "$dir" || return 1 33 34 (cd "$(git rev-parse --show-cdup)" && git archive --format=tar "$sha1") | 35 (cd "$dir" && tar x) || 36 return 1 37 38 for config in config.mak config.mak.autogen config.status 39 do 40 if test -e "$INTEROP_ROOT/../../$config" 41 then 42 cp "$INTEROP_ROOT/../../$config" "$dir/" || return 1 43 fi 44 done 45 46 ( 47 cd "$dir" && 48 make $GIT_INTEROP_MAKE_OPTS >&2 && 49 touch .built 50 ) || return 1 51 52 echo "$dir" 53} 54 55# Old versions of git don't have bin-wrappers, so let's give a rough emulation. 56wrap_git () { 57 write_script "$1" <<-EOF 58 GIT_EXEC_PATH="$2" 59 export GIT_EXEC_PATH 60 PATH="$2:\$PATH" 61 export GIT_EXEC_PATH 62 exec git "\$@" 63 EOF 64} 65 66generate_wrappers () { 67 mkdir -p .bin && 68 wrap_git .bin/git.a "$DIR_A" && 69 wrap_git .bin/git.b "$DIR_B" && 70 write_script .bin/git <<-\EOF && 71 echo >&2 fatal: test tried to run generic git 72 exit 1 73 EOF 74 PATH=$(pwd)/.bin:$PATH 75} 76 77VERSION_A=${GIT_TEST_VERSION_A:-$VERSION_A} 78VERSION_B=${GIT_TEST_VERSION_B:-$VERSION_B} 79 80if ! DIR_A=$(build_version "$VERSION_A") || 81 ! DIR_B=$(build_version "$VERSION_B") 82then 83 echo >&2 "fatal: unable to build git versions" 84 exit 1 85fi 86 87TEST_DIRECTORY=$INTEROP_ROOT/.. 88TEST_OUTPUT_DIRECTORY=$INTEROP_ROOT 89TEST_NO_CREATE_REPO=t 90. "$TEST_DIRECTORY"/test-lib.sh 91 92generate_wrappers || die "unable to set up interop test environment" 93