# Initialization and helpers for Gitweb tests, which source this
# shell library instead of test-lib.sh.
#
# Copyright (c) 2007 Jakub Narebski
#

gitweb_init () {
	safe_pwd="$(perl -MPOSIX=getcwd -e 'print quotemeta(getcwd)')"
	cat >gitweb_config.perl <<EOF
#!/usr/bin/perl

# gitweb configuration for tests

our \$version = 'current';
our \$GIT = 'git';
our \$projectroot = "$safe_pwd";
our \$project_maxdepth = 8;
our \$home_link_str = 'projects';
our \$site_name = '[localhost]';
our \$site_html_head_string = '';
our \$site_header = '';
our \$site_footer = '';
our \$home_text = 'indextext.html';
our @stylesheets = ('file:///$GIT_BUILD_DIR/gitweb/static/gitweb.css');
our \$logo = 'file:///$GIT_BUILD_DIR/gitweb/static/git-logo.png';
our \$favicon = 'file:///$GIT_BUILD_DIR/gitweb/static/git-favicon.png';
our \$projects_list = '';
our \$export_ok = '';
our \$strict_export = '';
our \$maxload = undef;

EOF

	cat >.git/description <<EOF
$0 test repository
EOF

	# You can set the GITWEB_TEST_INSTALLED environment variable to
	# the gitwebdir (the directory where gitweb is installed / deployed to)
	# of an existing gitweb installation to test that installation,
	# or simply to pathname of installed gitweb script.
	if test -n "$GITWEB_TEST_INSTALLED" ; then
		if test -d $GITWEB_TEST_INSTALLED; then
			SCRIPT_NAME="$GITWEB_TEST_INSTALLED/gitweb.cgi"
		else
			SCRIPT_NAME="$GITWEB_TEST_INSTALLED"
		fi
		test -f "$SCRIPT_NAME" ||
		error "Cannot find gitweb at $GITWEB_TEST_INSTALLED."
		say "# Testing $SCRIPT_NAME"
	else # normal case, use built version of gitweb
		SCRIPT_NAME="$GIT_BUILD_DIR/gitweb/gitweb.cgi"
	fi
	export SCRIPT_NAME
}

gitweb_run () {
	GATEWAY_INTERFACE='CGI/1.1'
	HTTP_ACCEPT='*/*'
	REQUEST_METHOD='GET'
	QUERY_STRING=$1
	PATH_INFO=$2
	REQUEST_URI=/gitweb.cgi$PATH_INFO
	export GATEWAY_INTERFACE HTTP_ACCEPT REQUEST_METHOD \
		QUERY_STRING PATH_INFO REQUEST_URI

	GITWEB_CONFIG=$(pwd)/gitweb_config.perl
	export GITWEB_CONFIG

	# some of git commands write to STDERR on error, but this is not
	# written to web server logs, so we are not interested in that:
	# we are interested only in properly formatted errors/warnings
	rm -f gitweb.log &&
	perl -- "$SCRIPT_NAME" \
		>gitweb.output 2>gitweb.log &&
	perl -w -e '
		open O, ">gitweb.headers";
		while (<>) {
			print O;
			last if (/^\r$/ || /^$/);
		}
		open O, ">gitweb.body";
		while (<>) {
			print O;
		}
		close O;
	' gitweb.output &&
	if grep '^[[]' gitweb.log >/dev/null 2>&1; then
		test_debug 'cat gitweb.log >&2' &&
		false
	else
		true
	fi

	# gitweb.log is left for debugging
	# gitweb.output is used to parse HTTP output
	# gitweb.headers contains only HTTP headers
	# gitweb.body contains body of message, without headers
}

. ./test-lib.sh

if ! test_have_prereq PERL; then
	skip_all='skipping gitweb tests, perl not available'
	test_done
fi

if ! test_have_prereq GITWEB; then
	skip_all='skipping gitweb tests, gitweb not available'
	test_done
fi

perl -MEncode -e '$e="";decode_utf8($e, Encode::FB_CROAK)' >/dev/null 2>&1 || {
	skip_all='skipping gitweb tests, perl version is too old'
	test_done
}

perl -MCGI -MCGI::Util -MCGI::Carp -e 0 >/dev/null 2>&1 || {
	skip_all='skipping gitweb tests, CGI & CGI::Util & CGI::Carp modules not available'
	test_done
}

perl -mTime::HiRes -e 0 >/dev/null 2>&1 || {
	skip_all='skipping gitweb tests, Time::HiRes module not available'
	test_done
}

gitweb_init
