Staging
v0.5.1
https://github.com/git/git
Raw File
Tip revision: 181785487ecd48c7a3760ca31a6a245aabb2cbc8 authored by Junio C Hamano on 22 January 2022, 03:05:07 UTC
What's cooking (2022/01 #06)
Tip revision: 1817854
Make
#!/bin/sh

MASTER=master

if test -z "$GIT"
then
	case "$(git version 2>/dev/null)" in
	"git version"*)
		GIT=git ;;
	*)
		echo >&2 "No git to bootstrap"
		exit 1 ;;
	esac
fi

inst_prefix=$(
	IFS=:
	for p in $PATH
	do
		probed=${p%/git-active/bin}
		if test "$probed" != "$p"
		then
			echo "$probed"
			exit
		fi
	done
	echo $HOME
)

LANG=C

for cv in PYTHON_PATH=python TCL_PATH=tclsh TCLTKPATH=wish
do
	cmd=${cv#*=}
	var=${cv%=*}
	eval $(
		if test -f "/usr/bin/$cmd"
		then
			break
		fi
		for p in /usr/bin /usr/local/bin
		do
			if test -f "$p/$cmd"
			then
				echo "$var=$p/$cmd; export $var"
				break
			fi
			found=$(find "$p/$cmd"* -type f 2>/dev/null | head -n 1)
			if test -f "$found"
			then
				echo "$var=$found; export $var"
				break
			fi
		done
	)
done

tests= jobs= skip= oldtest= with_dash= testpen=
clean=:

case `uname` in
OpenBSD)
	# O="-fgnu89-inline"
	skip="t9402"
	;;
NetBSD)
	OLD_ICONV=YesPlease; export OLD_ICONV
	skip="t5000 t9402"
	;;
FreeBSD)
	OLD_ICONV=YesPlease; export OLD_ICONV
	skip="t5560"
	;;
SunOS)
	NEEDS_CRYPTO_WITH_SSL=YesPlease ; export NEEDS_CRYPTO_WITH_SSL
	NO_PEDANTIC=CannotDo
	;;
esac

determine_branch () {
	expr "$($GIT symbolic-ref HEAD 2>/dev/null)" : 'refs/heads/\(.*\)' ||
	echo detached
}

determine_version () {
	v=`$GIT describe HEAD`
	expr "$v" : '.*-g[0-9a-f]*$' >/dev/null && {
		echo >&2 "You are on 'snap' but $v is not an official version."
		exit 1
	}
	echo "$v"
}

determine_long_version () {
	$GIT describe HEAD 2>/dev/null || echo unknown-g00000000 |
	sed -e 's/-/./g'
}

BUILTIN_CLEAN_FIX=8687f777
if ! git merge-base --is-ancestor $BUILTIN_CLEAN_FIX HEAD
then
	NO_PEDANTIC=YesPlease
fi

DEVELOPER=
case "$NO_PEDANTIC" in
?*)	;;
'')
	DEVELOPER=1
	;;
'not-used-anymore')
	# PEDANT="-Wtypedef-redefinition $PEDANT"
	PEDANT="-Werror -Wold-style-definition $PEDANT"
	PEDANT="-Wpointer-arith -Woverflow -Wunused $PEDANT"
	PEDANT="-Wold-style-declaration -Wstrict-prototypes $PEDANT"
	PEDANT="-Wstrict-prototypes $PEDANT"
	;;
esac

while case $# in 0) break ;; esac
do 
	case "$1" in
	--pedantic)
		echo >&2 "(no need to say --pedantic)"
		;;
	-j*)
		case "$NO_JOBS" in
		?*)	jobs= ;;
		'')	jobs=$1 ;;
		esac
		;;
	-noprove | --noprove)
		oldtest=t
		;;
	-loose | --loose)
		DEVELOPER= PEDANT=
		;;
	--memtrash)
		testpen=testpen.$$
		;;
	--memtrash=*)
		testpen=testpen.${1#--memtrash=}
		;;
	--locale=*)
		LANG=${1#*=}
		;;
	--test=*)
		tests=$(
			cd t &&
			IFS="$IFS,"
			for t in ${1#*=}
			do
				eval echo "t$t-*.sh"
			done | tr '\012' ' '
		)
		;;
	--long)
		GIT_TEST_LONG=YesPlease
		export GIT_TEST_LONG
		;;
	--dash)
		with_dash=y
		;;
	--)
		shift
		break
		;;
	-*)
		echo >&2 "Eh $1?"
		exit 1
		;;
	*)
		break
		;;		
	esac
	shift
done

if test -n "$testpen"
then
	for TRASH in /dev/shm /tmp ""
	do
		if test -n "$TRASH" &&
		   mkdir -p "$TRASH/$testpen" 2>/dev/null &&
		   test -w "$TRASH/$testpen"
		then
			testpen=$(cd "$TRASH/$testpen" && /bin/pwd)
			TRASH="--root=$testpen"
			clean="$clean; rmdir '$testpen'"
			break
		fi
	done
	GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}"
	export GIT_TEST_OPTS
fi

test -f /bin/dash || with_dash=

if test -z "$tests" && test -n "$skip"
then
	GIT_SKIP_TESTS="${GIT_SKIP_TESTS:-$skip}"
	export GIT_SKIP_TESTS
fi
if test -z "$oldtest" &&
   sh -c 'prove --version >/dev/null 2>&1' &&
   sh -c 'prove --exec : >/dev/null 2>&1'
then
	# --state=slow,save
	DEFAULT_TEST_TARGET=prove
	GIT_PROVE_OPTS="${GIT_PROVE_OPTS:+$GIT_PROVE_OPTS }--timer $jobs"
	export DEFAULT_TEST_TARGET GIT_PROVE_OPTS
fi

LC_ALL=$LANG
export LANG LC_ALL

branch=$(determine_branch)

case "$branch" in
next | maint | $MASTER | seen | jch)
	prefix="$inst_prefix/git-$branch"
	;;
snap)
	v=$(determine_version)
	prefix="$inst_prefix/git-snap-$v"
	;;
*)
	prefix="$inst_prefix/git-test" ;;
esac

clean="$clean; rm -f version"
determine_long_version >version

set "prefix=$prefix" "$@"
if test -n "$with_dash" && test -f /bin/dash
then
	set "SHELL_PATH=/bin/dash" "$@"
fi

if grep >/dev/null DC_SHA1 Makefile
then
	SHA1IMPLEMENTATION=DC_SHA1=YesPlease
elif grep >/dev/null BLK_SHA1 Makefile
then
	SHA1IMPLEMENTATION=BLK_SHA1=YesPlease
else
	SHA1IMPLEMENTATION=
fi

set	MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \
	MAN_BOLD_LITERAL=YesPlease \
	$SHA1IMPLEMENTATION \
	GNU_ROFF=YesPlease \
	USE_LIBPCRE=YesPlease \
	"$@"

# Platform hack
if test -z "${make:+set}" && {
	test -x /usr/local/bin/gmake ||
	test -x /usr/pkg/bin/gmake ||
	test -x /usr/bin/gmake
}
then
	make=gmake
fi
if test -f /bin/ginstall
then
	set INSTALL=ginstall "$@"
fi

unset	SSH_AGENT_PID SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION \
	GPG_AGENT_INFO GNOME_KEYRING_CONTROL GNOME_KEYRING_PID \
	XDG_SESSION_COOKIE XDG_SESSION_PATH XDG_SEAT_PATH  XDG_DATA_DIRS \
	PGPPATH AUTO_PROXY WINDOWID SESSION_MANAGER XDG_CONFIG_DIRS STY \
	GDMSESSION KRB5CCNAME GNOME_DESKTOP_SESSION_ID \
	DBUS_SESSION_BUS_ADDRESS LESSOPEN WINDOW DISPLAY GTK_IM_MODULE \
	XDG_CURRENT_DESKTOP LESSCLOSE XAUTHORITY

# O=-fsanitize=address Meta/Make

${make-make} \
     $jobs \
     ETC_GITCONFIG=$prefix/etc/gitconfig \
     ${DEVELOPER:+"DEVELOPER=YesPlease"} \
     CFLAGS="-g -Wall -Wdeclaration-after-statement -std=gnu99${O:+ $O}" \
     ${tests:+"T=$tests"} \
     "$@"
status=$?
eval "$clean"
exit $status
back to top