1: To be included in git-pull and git-fetch scripts. 2 3# A remote repository can be specified on the command line 4# in one of the following formats: 5# 6# <repo> 7# <repo> <head> 8# <repo> tag <tag> 9# 10# where <repo> could be one of: 11# 12# a URL (including absolute or local pathname) 13# a short-hand 14# a short-hand followed by a trailing path 15# 16# A short-hand <name> has a corresponding file $GIT_DIR/branches/<name>, 17# whose contents is a URL, possibly followed by a URL fragment #<head> 18# to name the default branch on the remote side to fetch from. 19 20_remote_repo= _remote_store= _remote_head= _remote_name= 21 22case "$1" in 23*:* | /* | ../* | ./* ) 24 _remote_repo="$1" 25 ;; 26* ) 27 # otherwise, it is a short hand. 28 case "$1" in 29 */*) 30 # a short-hand followed by a trailing path 31 _token=$(expr "$1" : '\([^/]*\)/') 32 _rest=$(expr "$1" : '[^/]*\(/.*\)$') 33 ;; 34 *) 35 _token="$1" 36 _rest= 37 _remote_store="refs/heads/$_token" 38 ;; 39 esac 40 test -f "$GIT_DIR/branches/$_token" || 41 die "No such remote branch: $_token" 42 43 _remote_repo=$(cat "$GIT_DIR/branches/$_token")"$_rest" 44 ;; 45esac 46 47case "$_remote_repo" in 48*"#"*) 49 _remote_head=`expr "$_remote_repo" : '.*#\(.*\)$'` 50 _remote_repo=`expr "$_remote_repo" : '\(.*\)#'` 51 ;; 52esac 53 54_remote_name=$(echo "$_remote_repo" | sed 's|\.git/*$||') 55 56case "$2" in 57tag) 58 _remote_name="tag '$3' of $_remote_name" 59 _remote_head="refs/tags/$3" 60 _remote_store="$_remote_head" 61 ;; 62?*) 63 # command line specified a head explicitly; do not 64 # store the fetched head as a branch head. 65 _remote_name="head '$2' of $_remote_name" 66 _remote_head="refs/heads/$2" 67 _remote_store='' 68 ;; 69'') 70 case "$_remote_head" in 71 '') 72 _remote_head=HEAD ;; 73 *) 74 _remote_name="head '$_remote_head' of $_remote_name" 75 _remote_head="refs/heads/$_remote_head" 76 ;; 77 esac 78 ;; 79esac