SUMMARY="Fast, scalable, distributed revision control system"
DESCRIPTION="Git is a free and open source distributed version control system \
designed to handle everything from small to very large projects with speed \
and efficiency.

Git is easy to learn and has a tiny footprint with lightning fast performance. \
It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with \
features like cheap local branching, convenient staging areas, and multiple \
workflows."
HOMEPAGE="https://git-scm.com/"
COPYRIGHT="2005-2020 Git Authors (see git web site for list)"
LICENSE="GNU GPL v2"
REVISION="3"
SOURCE_URI="https://www.kernel.org/pub/software/scm/git/git-$portVersion.tar.xz"
CHECKSUM_SHA256="41f7d90c71f9476cd387673fcb10ce09ccbed67332436a4cc58d7af32c355faa"
SOURCE_URI_2="https://www.kernel.org/pub/software/scm/git/git-manpages-$portVersion.tar.xz"
CHECKSUM_SHA256_2="5e64ace225e6dd0749b09c7adce765a538a922699c8997421ee255c3165e2aaa"
SOURCE_URI_3="https://www.kernel.org/pub/software/scm/git/git-htmldocs-$portVersion.tar.xz"
CHECKSUM_SHA256_3="29b8ab81966ec7c1a3ed47fb7fe23f0b78289c18d11d58c0dc8749613e0419dc"
PATCHES="git-$portVersion.patchset"

ARCHITECTURES="all"

GLOBAL_WRITABLE_FILES="
	settings/gitconfig keep-old
	"
USER_SETTINGS_FILES="
	settings/git directory
	"

PROVIDES="
	git = $portVersion compat >= 2.3
	cmd:git = $portVersion compat >= 2.3
	cmd:git_receive_pack = $portVersion compat >= 2.3
	cmd:git_shell = $portVersion compat >= 2.3
	cmd:git_upload_archive = $portVersion compat >= 2.3
	cmd:git_upload_pack = $portVersion compat >= 2.3
	"
PROVIDES_arch="
	git_arch = $portVersion compat >= 2.3
	cmd:git_archimport = $portVersion compat >= 2.3
	"
PROVIDES_cvs="
	git_cvs = $portVersion compat >= 2.3
	cmd:git_cvsimport = $portVersion compat >= 2.3
	cmd:git_cvsserver = $portVersion compat >= 2.3
	"
PROVIDES_daemon="
	git_daemon = $portVersion compat >= 2.3
	cmd:git_daemon = $portVersion compat >= 2.3
	"
PROVIDES_email="
	git_email = $portVersion compat >= 2.3
	cmd:git_send_email = $portVersion compat >= 2.3
	"
PROVIDES_gui="
	git_gui = $portVersion compat >= 2.3
	cmd:git_gui = $portVersion compat >= 2.3
	cmd:gitk = $portVersion compat >= 2.3
	"
PROVIDES_source="
	git_source = $portVersion compat >= 2.3
	"
PROVIDES_svn="
	git_svn = $portVersion compat >= 2.3
	cmd:git_svn = $portVersion compat >= 2.3
	"

REQUIRES="
	haiku
	cmd:man
	cmd:nano
	cmd:perl >= 5
	lib:libcurl
	lib:libexpat
	lib:libiconv
	lib:libintl
	lib:libpcre2_8
	lib:libnghttp2
	lib:libssl
	lib:libz
	vendor_perl
	"
REQUIRES_arch="
	haiku
	git == $portVersion base
	"
REQUIRES_cvs="
	haiku
	git == $portVersion base
	cmd:cvsps
	"
REQUIRES_daemon="
	haiku
	lib:libcrypto
	lib:libiconv
	lib:libintl
	lib:libpcre2_8
	lib:libz
	git == $portVersion base
	"
REQUIRES_email="
	haiku
	git == $portVersion base
	"
REQUIRES_gui="
	haiku
	git == $portVersion base
	cmd:wish
	"
REQUIRES_svn="
	haiku
	alien_svn
	git == $portVersion base
	"

BUILD_REQUIRES="
	haiku_devel
	cmd:cmp
	cmd:man
	cmd:nano
	cmd:perl
	devel:libcurl
	devel:libexpat
	devel:libiconv
	devel:libintl
	devel:libnghttp2
	devel:libpcre2_8
	devel:libssl
	devel:libz
	"

BUILD_PREREQUIRES="
	cmd:find
	cmd:gcc
	cmd:gettext
	cmd:ld
	cmd:make
	cmd:msgfmt
	cmd:sed
	cmd:tar
	"

TEST_REQUIRES="
	cmd:diff
	cmd:gawk
	"

makeGit()
{
	make prefix=$prefix \
		bindir_relative=$relativeBinDir \
		mandir=$manDir \
		infodir=$infoDir \
		gitexecdir=$libDir/git-core \
		sharedir=$dataDir \
		template_dir=$dataDir/git-core/templates \
		htmldir=$docDir \
		sysconfdir=$sysconfDir \
		PTHREAD_LIBS= \
		USE_LIBPCRE2=YesPlease \
		NO_D_TYPE_IN_DIRENT=YesPlease \
		NO_MEMMEM=YesPlease \
		NO_MKSTEMPS=YesPlease \
		NEEDS_LIBICONV=YesPlease \
		NO_R_TO_GCC_LINKER=YesPlease \
		GNU_ROFF=YesPlease \
		PERL_PATH=/bin/perl \
		NO_PYTHON=YesPlease \
		OBJECT_CREATION_USES_RENAMES=YesPlease \
		NO_CROSS_DIRECTORY_HARDLINKS=YesPlease \
		NO_INSTALL_HARDLINKS=YesPlease \
		HAVE_DEV_TTY=YesPlease \
		DEFAULT_EDITOR=nano \
		DEFAULT_HELP_FORMAT=web \
		BASIC_LDFLAGS="-lnetwork -lbsd" \
		CPPFLAGS="-D_POSIX_THREAD_SAFE_FUNCTIONS" \
		"$@"
}

BUILD()
{
	makeGit $jobArgs
	makeGit strip
}

INSTALL()
{
	makeGit install

	# copy manpages
	mkdir -p $manDir
	cp -rd $sourceDir2/* $manDir/

	# copy html documentation
	htmlDir=$docDir
	mkdir -p $htmlDir
	cp -rd $sourceDir3/*.html $htmlDir/

	# Default system-wide gitconfig. Settings in this file are only used
	# if they are unset both for the repository and globally (global options
	# are saved in the user settings file).
	# core.untrackedCache caches enumeration of untracked files and uses an
	# efficient method of determining whether the cache is out of date. This
	# is filesystem-dependent, but supported on BeFS.
	mkdir -p $sysconfDir
	printf "[core]\n	untrackedCache = true" > $sysconfDir/gitconfig

	# replace copies of git binaries with symlinks
	cd $binDir
	for program in git*; do
		if [ $program = "gitk" ]; then
			continue
		fi
		ln -sfn "../lib/git-core/$program" "$program"
	done

	packageEntries arch \
		documentation/packages/git/git-archimport.html \
		documentation/man/man1/git-archimport.1 \
		lib/git-core/git-archimport

	packageEntries cvs \
		bin/git-cvsserver \
		documentation/packages/git/git-cvsexportcommit.html \
		documentation/packages/git/git-cvsimport.html \
		documentation/packages/git/git-cvsserver.html \
		documentation/man/man1/git-cvsexportcommit.1 \
		documentation/man/man1/git-cvsimport.1 \
		documentation/man/man1/git-cvsserver.1 \
		documentation/man/man7/gitcvs-migration.7 \
		lib/git-core/git-cvsexportcommit \
		lib/git-core/git-cvsimport \
		lib/git-core/git-cvsserver

	packageEntries daemon \
		documentation/packages/git/git-credential-cache--daemon.html \
		documentation/packages/git/git-credential-cache.html \
		documentation/packages/git/git-daemon.html \
		documentation/man/man1/git-credential-cache--daemon.1 \
		documentation/man/man1/git-credential-cache.1 \
		documentation/man/man1/git-daemon.1 \
		lib/git-core/git-credential-cache--daemon \
		lib/git-core/git-credential-cache \
		lib/git-core/git-daemon

	packageEntries email \
		documentation/packages/git/git-send-email.html \
		documentation/man/man1/git-send-email.1 \
		lib/git-core/git-send-email

	packageEntries gui \
		documentation/packages/git/git-gui.html \
		documentation/packages/git/gitk.html \
		documentation/man/man1/git-gui.1 \
		documentation/man/man1/gitk.1 \
		data/gitk \
		data/git-gui \
		lib/git-core/git-gui \
		lib/git-core/git-gui--askpass \
		lib/git-core/git-citool \
		bin/gitk

	packageEntries svn \
		documentation/packages/git/git-svn.html \
		documentation/man/man1/git-svn.1 \
		lib/git-core/git-svn
}

TEST()
{
# x86_64
#failed test(s): t0005 t0006 t0210 t0211 t0301 t0302 t1060 t1100 t1300 t1306 t1308 t1309 t2400 t3903 t5000 t5300 t5506 t5521 t5562 t5604 t5605 t5702 t5814 t7060 t7300 t7415 t7701 t7800 t9300
#fixed   1
#success 21670
#failed  78
#broken  236
#total   22417

# x86_gcc2
#failed test(s): t0005 t0006 t0210 t0211 t0301 t0302 t1060 t1100 t1300 t1306 t1308 t1309 t2400 t3903 t4014 t5150 t5300 t5400 t5516 t5528 t5531 t5562 t5604 t5605 t5702 t5814 t6430 t7060 t7300 t7409 t7415 t7701 t7800 t9300
#fixed   1
#success 21651
#failed  90
#broken  236
#total   22417

cat << DONE
!!Make sure to configure the debug_server in \
~/config/settings/system/debug_server/settings:
executable_actions {
	/sources/git-*	kill
}
DONE
	makeGit test
}
