 3d8936153d
			
		
	
	3d8936153d
	
	
	
		
			
			The current test suite is good at letting you test a particular version of Git. But it's not very good at letting you test _two_ versions and seeing how they interact (e.g., one cloning from the other). This commit adds a test harness that will build two arbitrary versions of git and make it easy to call them from inside your tests. See the README and the example script for details. 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"
 |