: 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: # # # # tag # # where 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 has a corresponding file $GIT_DIR/branches/, # whose contents is a URL, possibly followed by a URL fragment # # 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