X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-push-script;h=744ee7e7dc8986767f410f99f4ff8c644654b172;hb=debb9d84445239ffbc630611548af630fb8e1e7a;hp=80e922bb5d4bff7a87f1ead4962a8375cd8d3fa5;hpb=6b7242aa1acc3c7835f80522914ffc4b2e789a29;p=git.git diff --git a/git-push-script b/git-push-script index 80e922bb..744ee7e7 100755 --- a/git-push-script +++ b/git-push-script @@ -1,3 +1,52 @@ #!/bin/sh . git-sh-setup-script || die "Not a git archive" -git-send-pack "$@" + +# Parse out parameters and then stop at remote, so that we can +# translate it using .git/branches information +has_all= +has_force= +has_exec= +remote= + +while case "$#" in 0) break ;; esac +do + case "$1" in + --all) + has_all=--all ;; + --force) + has_force=--force ;; + --exec=*) + has_exec="$1" ;; + -*) + die "Unknown parameter $1" ;; + *) + set x "$@" + shift + break ;; + esac + shift +done +case "$#" in +0) + die "Where would you want to push today?" ;; +esac + +. git-parse-remote-script +remote=$(get_remote_url "$@") +case "$has_all" in +--all) set x ;; +'') set x $(get_remote_refs_for_push "$@") ;; +esac +shift + +case "$remote" in +http://* | https://* | git://* | rsync://* ) + die "Cannot push to $remote" ;; +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 + +exec git-send-pack "$@"