X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-push.sh;h=f10cadbf159bcd63af0c3834bd7cd2fab6cce57c;hb=ce0bd64299ae148ef61a63edcac635de41254cb5;hp=00d715059c4b751bef9adaf3debbe56ae1cf19ac;hpb=c1067050ce58b5b39f528fe634732da858664603;p=git.git diff --git a/git-push.sh b/git-push.sh index 00d71505..f10cadbf 100755 --- a/git-push.sh +++ b/git-push.sh @@ -1,24 +1,34 @@ #!/bin/sh -. git-sh-setup || die "Not a git archive" + +USAGE='[--all] [--tags] [--force] [...]' +. 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=--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) + ;; # noop + --no-thin) + has_thin= ;; -*) - die "Unknown parameter $1" ;; + usage ;; *) set x "$@" shift @@ -28,25 +38,50 @@ do done case "$#" in 0) - die "Where would you want to push today?" ;; + echo "Where would you want to push today?" + usage ;; esac . git-parse-remote remote=$(get_remote_url "$@") + case "$has_all" in ---all) set x ;; -'') set x $(get_remote_refs_for_push "$@") ;; +--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 + +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 -http://* | https://* | git://* | rsync://* ) - die "Cannot push to $remote" ;; +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 -exec git-send-pack "$@" +case "$remote" in +http://* | https://*) + exec git-http-push "$@";; +*) + exec git-send-pack "$@";; +esac