X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=git-push.sh;h=136093bf138f57d45385c0d71344b4cd85c472d6;hb=36383a3df37116f6022b5a0f7331fb19337c4730;hp=00d715059c4b751bef9adaf3debbe56ae1cf19ac;hpb=1301c6eb412e7c5511b952a12e42c70ad56f028b;p=git.git diff --git a/git-push.sh b/git-push.sh index 00d71505..136093bf 100755 --- a/git-push.sh +++ b/git-push.sh @@ -1,5 +1,7 @@ #!/bin/sh -. git-sh-setup || die "Not a git archive" + +USAGE='[--all] [--force] [...]' +. git-sh-setup # Parse out parameters and then stop at remote, so that we can # translate it using .git/branches information @@ -7,18 +9,21 @@ has_all= has_force= has_exec= 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" ;; -*) - die "Unknown parameter $1" ;; + usage ;; *) set x "$@" shift @@ -28,8 +33,13 @@ do done case "$#" in 0) - die "Where would you want to push today?" ;; + echo "Where would you want to push today?" + usage ;; esac +if test ",$has_all,$do_tags," = ",--all,yes," +then + do_tags= +fi . git-parse-remote remote=$(get_remote_url "$@") @@ -39,9 +49,25 @@ case "$has_all" in esac shift +case "$do_tags" in +yes) + set "$@" $(cd "$GIT_DIR/refs" && find tags -type f -print) ;; +esac + +# Now we have explicit refs from the command line or from remotes/ +# shorthand, or --tags. Falling back on the current branch if we still +# do not have any may be an alternative, but prevent mistakes for now. + +case "$#,$has_all" in +0,) + die "No refs given to be pushed." ;; +esac + 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 @@ -49,4 +75,9 @@ 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 "$@" +case "$remote" in +http://* | https://*) + exec git-http-push "$@";; +*) + exec git-send-pack "$@";; +esac