80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
| : To be included in git-pull and git-fetch scripts.
 | |
| 
 | |
| # A remote repository can be specified on the command line
 | |
| # in one of the following formats:
 | |
| #
 | |
| #	<repo>
 | |
| #	<repo> <head>
 | |
| #	<repo> tag <tag>
 | |
| #
 | |
| # where <repo> could be one of:
 | |
| #
 | |
| #	a URL (including absolute or local pathname)
 | |
| #	a short-hand
 | |
| #	a short-hand followed by a trailing path
 | |
| #
 | |
| # A short-hand <name> has a corresponding file $GIT_DIR/branches/<name>,
 | |
| # whose contents is a URL, possibly followed by a URL fragment #<head>
 | |
| # to name the default branch on the remote side to fetch from.
 | |
| 
 | |
| _remote_repo= _remote_store= _remote_head= _remote_name=
 | |
| 
 | |
| case "$1" in
 | |
| *:* | /* | ../* | ./* )
 | |
| 	_remote_repo="$1"
 | |
| 	;;
 | |
| * )
 | |
| 	# otherwise, it is a short hand.
 | |
| 	case "$1" in
 | |
| 	*/*)
 | |
| 		# a short-hand followed by a trailing path
 | |
| 		_token=$(expr "$1" : '\([^/]*\)/')
 | |
| 		_rest=$(expr "$1" : '[^/]*\(/.*\)$')
 | |
| 		;;
 | |
| 	*)
 | |
| 		_token="$1"
 | |
| 		_rest=
 | |
| 		_remote_store="refs/heads/$_token"
 | |
| 		;;
 | |
| 	esac
 | |
| 	test -f "$GIT_DIR/branches/$_token" ||
 | |
| 	die "No such remote branch: $_token"
 | |
| 
 | |
| 	_remote_repo=$(cat "$GIT_DIR/branches/$_token")"$_rest"
 | |
| 	;;
 | |
| esac
 | |
| 
 | |
| case "$_remote_repo" in
 | |
| *"#"*)
 | |
| 	_remote_head=`expr "$_remote_repo" : '.*#\(.*\)$'`
 | |
| 	_remote_repo=`expr "$_remote_repo" : '\(.*\)#'`
 | |
| 	;;
 | |
| esac
 | |
| 
 | |
| _remote_name=$(echo "$_remote_repo" | sed 's|\.git/*$||')
 | |
| 
 | |
| case "$2" in
 | |
| tag)
 | |
| 	_remote_name="tag '$3' of $_remote_name"
 | |
| 	_remote_head="refs/tags/$3"
 | |
| 	_remote_store="$_remote_head"
 | |
| 	;;
 | |
| ?*)
 | |
| 	# command line specified a head explicitly; do not
 | |
| 	# store the fetched head as a branch head.
 | |
| 	_remote_name="head '$2' of $_remote_name"
 | |
| 	_remote_head="refs/heads/$2"
 | |
| 	_remote_store=''
 | |
| 	;;
 | |
| '')
 | |
| 	case "$_remote_head" in
 | |
| 	'')
 | |
| 		_remote_head=HEAD ;;
 | |
| 	*)
 | |
| 		_remote_head="refs/heads/$_remote_head"
 | |
| 		_remote_name="head '$_remote_head' of $_remote_name"
 | |
| 		;;
 | |
| 	esac
 | |
| 	;;
 | |
| esac
 |