1#!/bin/sh 2 3USAGE='[--all] [--tags] [--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 39 40. git-parse-remote 41remote=$(get_remote_url "$@") 42 43case"$has_all"in 44--all) 45set x ;; 46'') 47case"$do_tags,$#"in 48yes,1) 49set x $(cd "$GIT_DIR/refs" && find tags -type f -print);; 50yes,*) 51set x $(cd "$GIT_DIR/refs" && find tags -type f -print) \ 52$(get_remote_refs_for_push "$@");; 53,*) 54set x $(get_remote_refs_for_push "$@");; 55esac 56esac 57 58shift;# away the initial 'x' 59 60# $# is now 0 if there was no explicit refspec on the command line 61# and there was no defalt refspec to push from remotes/ file. 62# we will let git-send-pack to do its "matching refs" thing. 63 64case"$remote"in 65git://*) 66 die "Cannot use READ-ONLY transport to push to$remote";; 67rsync://*) 68 die "Pushing with rsync transport is deprecated";; 69esac 70 71set x "$remote""$@";shift 72test"$has_all"&&set x "$has_all""$@"&&shift 73test"$has_force"&&set x "$has_force""$@"&&shift 74test"$has_exec"&&set x "$has_exec""$@"&&shift 75 76case"$remote"in 77http://* | https://*) 78exec git-http-push"$@";; 79*) 80exec git-send-pack"$@";; 81esac