1#!/bin/sh 2 3USAGE='[--all] [--force] <repository> [<refspec>...]' 4. git-sh-setup 5 6# Parse out parameters and then stop at remote, so that we can 7# translate it using .git/branches information 8has_all= 9has_force= 10has_exec= 11remote= 12do_tags= 13 14while case"$#"in0)break;;esac 15do 16case"$1"in 17--all) 18 has_all=--all;; 19--tags) 20 do_tags=yes;; 21--force) 22 has_force=--force;; 23--exec=*) 24 has_exec="$1";; 25-*) 26 usage ;; 27*) 28set x "$@" 29shift 30break;; 31esac 32shift 33done 34case"$#"in 350) 36echo"Where would you want to push today?" 37 usage ;; 38esac 39iftest",$has_all,$do_tags,"=",--all,yes," 40then 41 do_tags= 42fi 43 44. git-parse-remote 45remote=$(get_remote_url "$@") 46case"$has_all"in 47--all)set x ;; 48'')set x $(get_remote_refs_for_push "$@");; 49esac 50shift 51 52case"$do_tags"in 53yes) 54set"$@"$(cd "$GIT_DIR/refs" && find tags -type f -print);; 55esac 56 57# Now we have explicit refs from the command line or from remotes/ 58# shorthand, or --tags. Falling back on the current branch if we still 59# do not have any may be an alternative, but prevent mistakes for now. 60 61case"$#,$has_all"in 620,) 63 die "No refs given to be pushed.";; 64esac 65 66case"$remote"in 67git://*) 68 die "Cannot use READ-ONLY transport to push to$remote";; 69rsync://*) 70 die "Pushing with rsync transport is deprecated";; 71esac 72 73set x "$remote""$@";shift 74test"$has_all"&&set x "$has_all""$@"&&shift 75test"$has_force"&&set x "$has_force""$@"&&shift 76test"$has_exec"&&set x "$has_exec""$@"&&shift 77 78case"$remote"in 79http://* | https://*) 80exec git-http-push"$@";; 81*) 82exec git-send-pack"$@";; 83esac