diff --git a/git-push.sh b/git-push.sh index 1c5cf80f87..136093bf13 100755 --- a/git-push.sh +++ b/git-push.sh @@ -9,12 +9,15 @@ 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=*) @@ -33,6 +36,10 @@ case "$#" in 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 "$@") @@ -42,6 +49,20 @@ 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 git://*) die "Cannot use READ-ONLY transport to push to $remote" ;;