# vim: set ts=3 sw=3 noet ft=sh : bash

# fetch_git: Clones or pulls updates from a git repository into a local directory
#
# $1	The URI to fetch
# $2	The local directory to fetch to (relative)
# $3	Recurse submodules (yes, no, clone)
#
# NOTE: git _now_ has a -C argument that would replace the cd commands in
#       this rule, but this is a fairly recent addition to git, so we can't
#       use it here.  --iKarith
fetch_git() {
	fetch_dir="$WORKDIR/$2"
	if [ -d "$fetch_dir/.git" ]; then
		echo_cmd "cd \"$fetch_dir\""
		echo_cmd "git pull"
		if [ $? -ne 0 ]; then
			return 1
		fi
		if [ "$3" = "yes" ]; then
			echo_cmd "git submodule update --recursive"
			if [ $? -ne 0 ]; then
				return 1
			fi
		fi
	else
		clone_type=
		[ -n "$SHALLOW_CLONE" ] && depth="--depth 1 "
		echo_cmd "git clone $depth\"$1\" \"$WORKDIR/$2\""
		if [ $? -ne 0 ]; then
			return 1
		fi
		if [[ "$3" = "yes" || "$3" = "clone" ]]; then
			echo_cmd "cd \"$fetch_dir\""
			echo_cmd "git submodule update --init --recursive"
			if [ $? -ne 0 ]; then
				return 1
			fi
		fi
	fi
	return $?
}

# fetch_revision_git: Output the hash of the last commit in a git repository
#
# $1	Local directory to run git in
fetch_revision_git() {
	[ -n "$1" ] && cd "$1"
	git log -n 1 --pretty=format:%H
}

local_files_git() {
	git diff-files --quiet --ignore-submodules
	return $?
}

# fetch_revision: Output SCM-dependent revision string of a module
#                 (currently just calls fetch_revision_git)
#
# $1	The directory of the module
fetch_revision() {
	   fetch_revision_git $1
}

module_get_revision() {
	if [ -d "$WORKDIR/$module_dir" ]; then
		cd "$WORKDIR/$module_dir"
		case "$module_fetch_rule" in
			git)
				if [ -n "$1" ]; then
					git diff-files --quiet --ignore-submodules || echo -n "changed from "
				fi
				git log -n 1 --pretty=format:%H
				;;
			*) ;;
		esac
	fi
}
