| : 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 |