#!/bin/sh
#
# Copyright (c) 2005, Linus Torvalds
# Copyright (c) 2005, Junio C Hamano
# 
# Clone a repository into a different directory that does not yet exist.

usage() {
	echo >&2 "* git clone [-l] <repo> <dir>"
	exit 1
}

get_repo_base() {
	(cd "$1" && (cd .git ; pwd)) 2> /dev/null
}

quiet=
use_local=no
while
	case "$#,$1" in
	0,*) break ;;
        *,-l|*,--l|*,--lo|*,--loc|*,--loca|*,--local) use_local=yes ;;
	*,-q|*,--quiet) quiet=-q ;;
	*,-*) usage ;;
	*) break ;;
	esac
do
	shift
done

# Turn the source into an absolute path if
# it is local
repo="$1"
local=no
if base=$(get_repo_base "$repo"); then
	repo="$base"
	local=yes
fi

dir="$2"
mkdir "$dir" &&
D=$(
	(cd "$dir" && git-init-db && pwd)
) &&
test -d "$D" || usage

# We do local magic only when the user tells us to.
case "$local,$use_local" in
yes,yes)
	( cd "$repo/objects" ) || {
		repo="$repo/.git"
		( cd "$repo/objects" ) || {
		    echo >&2 "-l flag seen but $repo is not local."
		    exit 1
		}
	}

	# See if we can hardlink and drop "l" if not.
	sample_file=$(cd "$repo" && \
		      find objects -type f -print | sed -e 1q)

	# objects directory should not be empty since we are cloning!
	test -f "$repo/$sample_file" || exit

	l=
	if ln "$repo/$sample_file" "$D/.git/objects/sample" 2>/dev/null
	then
		l=l
	fi &&
	rm -f "$D/.git/objects/sample" &&
	cp -r$l "$repo/objects" "$D/.git/" || exit 1

	# Make a duplicate of refs and HEAD pointer
	HEAD=
	if test -f "$repo/HEAD"
	then
		HEAD=HEAD
	fi
	tar Ccf "$repo" - refs $HEAD | tar Cxf "$D/.git" - || exit 1
	exit 0
	;;
esac

case "$repo" in
rsync://*)
	rsync $quiet -avz --ignore-existing "$repo/objects/" "$D/.git/objects/" &&
	rsync $quiet -avz --ignore-existing "$repo/refs/" "$D/.git/refs/"
	;;
http://*)
	echo "Somebody should add http fetch" >&2
	exit 1
	;;
*)
	cd "$D" && git-clone-pack $quiet "$repo"
	;;
esac
