#!/bin/sh

USAGE='[--all] [--tags] [--force] <repository> [<refspec>...]'
. git-sh-setup

# Parse out parameters and then stop at remote, so that we can
# translate it using .git/branches information
has_all=
has_force=
has_exec=
has_thin=
remote=
do_tags=

while case "$#" in 0) break ;; esac
do
	case "$1" in
	--all)
		has_all=--all ;;
	--tags)
		do_tags=yes ;;
	--force)
		has_force=--force ;;
	--exec=*)
		has_exec="$1" ;;
	--thin)
		has_thin="$1" ;;
	-*)
                usage ;;
        *)
		set x "$@"
		shift
		break ;;
	esac
	shift
done
case "$#" in
0)
	echo "Where would you want to push today?"
        usage ;;
esac

. git-parse-remote
remote=$(get_remote_url "$@")

case "$has_all" in
--all)
	set x ;;
'')
	case "$do_tags,$#" in
	yes,1)
		set x $(cd "$GIT_DIR/refs" && find tags -type f -print) ;;
	yes,*)
		set x $(cd "$GIT_DIR/refs" && find tags -type f -print) \
		    $(get_remote_refs_for_push "$@") ;;
	,*)
		set x $(get_remote_refs_for_push "$@") ;;
	esac
esac

shift ;# away the initial 'x'

# $# is now 0 if there was no explicit refspec on the command line
# and there was no defalt refspec to push from remotes/ file.
# we will let git-send-pack to do its "matching refs" thing.

case "$remote" in
git://*)
	die "Cannot use READ-ONLY transport to push to $remote" ;;
rsync://*)
        die "Pushing with rsync transport is deprecated" ;;
esac

set x "$remote" "$@"; shift
test "$has_all" && set x "$has_all" "$@" && shift
test "$has_force" && set x "$has_force" "$@" && shift
test "$has_exec" && set x "$has_exec" "$@" && shift
test "$has_thin" && set x "$has_thin" "$@" && shift

case "$remote" in
http://* | https://*)
	exec git-http-push "$@";;
*)
	exec git-send-pack "$@";;
esac
