92 lines
		
	
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			92 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"
 |