88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			88 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| 
 | |
| USAGE='[--all] [--tags] [--force] <repository> [<refspec>...]'
 | |
| . 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= ;;
 | |
| 	-*)
 | |
|                 usage ;;
 | |
|         *)
 | |
| 		set x "$@"
 | |
| 		shift
 | |
| 		break ;;
 | |
| 	esac
 | |
| 	shift
 | |
| done
 | |
| case "$#" in
 | |
| 0)
 | |
| 	echo "Where would you want to push today?"
 | |
|         usage ;;
 | |
| esac
 | |
| 
 | |
| . git-parse-remote
 | |
| remote=$(get_remote_url "$@")
 | |
| 
 | |
| case "$has_all" in
 | |
| --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 ;# 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
 | |
| 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
 | |
| 
 | |
| case "$remote" in
 | |
| http://* | https://*)
 | |
| 	exec git-http-push "$@";;
 | |
| *)
 | |
| 	exec git-send-pack "$@";;
 | |
| esac
 |