65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			65 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/bin/sh
 | |
| . git-sh-setup-script || die "Not a git archive"
 | |
| 
 | |
| # Parse out parameters and then stop at remote, so that we can
 | |
| # translate it using .git/branches information
 | |
| has_all=
 | |
| has_force=
 | |
| has_exec=
 | |
| remote=
 | |
| 
 | |
| while case "$#" in 0) break ;; esac
 | |
| do
 | |
| 	case "$1" in
 | |
| 	--all)
 | |
| 		has_all=--all ;;
 | |
| 	--force)
 | |
| 		has_force=--force ;;
 | |
| 	--exec=*)
 | |
| 		has_exec="$1" ;;
 | |
| 	-*)
 | |
| 		die "Unknown parameter $1" ;;
 | |
|         *)
 | |
| 		remote="$1"
 | |
| 		shift
 | |
| 		set x "$@"
 | |
| 		shift
 | |
| 		break ;;
 | |
| 	esac
 | |
| 	shift
 | |
| done
 | |
| 
 | |
| case "$remote" in
 | |
| *:* | /* | ../* | ./* )
 | |
| 	# An URL, host:/path/to/git, absolute and relative paths.
 | |
| 	;;
 | |
| * )
 | |
| 	# Shorthand
 | |
| 	if expr "$remote" : '..*/..*' >/dev/null
 | |
| 	then
 | |
| 		# a short-hand followed by a trailing path
 | |
| 		shorthand=$(expr "$remote" : '\([^/]*\)')
 | |
| 		remainder=$(expr "$remote" : '[^/]*\(/.*\)$')
 | |
| 	else
 | |
| 		shorthand="$remote"
 | |
| 		remainder=
 | |
| 	fi
 | |
| 	remote=$(sed -e 's/#.*//' "$GIT_DIR/branches/$remote") &&
 | |
| 	expr "$remote" : '..*:' >/dev/null &&
 | |
| 	remote="$remote$remainder" ||
 | |
| 	die "Cannot parse remote $remote"
 | |
| 	;;
 | |
| esac
 | |
| 
 | |
| case "$remote" in
 | |
| http://* | https://* | git://* | rsync://* )
 | |
| 	die "Cannot push to $remote" ;;
 | |
| 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
 | |
| 
 | |
| exec git-send-pack "$@"
 |