mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
![Jeff King](/assets/img/avatar_default.png)
The interop test library sets up wrappers "git.a" and "git.b" to represent the two versions to be tested. It also wraps vanilla "git" to report an error, with the goal of catching tests which accidentally fail to use one of the version-specific wrappers (which could invalidate the tests in a very subtle way). But when it catches an invocation of vanilla git, it doesn't give any details, which makes it very hard to debug exactly which invocation is responsible (especially if it's buried in a function invocation, etc). Let's report the arguments passed to git, which helps narrow it down. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
93 lines
1.8 KiB
Bash
93 lines
1.8 KiB
Bash
# 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"
|