From: Santi Béjar Date: Thu, 18 Jun 2009 07:57:14 GMT Subject: [RFC/PATCH 2/2] get_remote_merge_branch: Support for arbitrary mapping Message-ID: <1245311834-5290-4-git-send-email-santi@agolina.net> In-Reply-To: <1245311834-5290-1-git-send-email-santi@agolina.net> This function is used in "git pull --rebase" to know the tracking branch. Signed-off-by: Santi Béjar --- git-parse-remote.sh | 21 ++++++++++++--------- 1 files changed, 12 insertions(+), 9 deletions(-) diff --git a/git-parse-remote.sh b/git-parse-remote.sh index 5f47b18..1aa6ffe 100755 --- a/git-parse-remote.sh +++ b/git-parse-remote.sh @@ -74,8 +74,6 @@ get_remote_merge_branch () { repo=$1 shift ref=$1 - # FIXME: It should return the tracking branch - # Currently only works with the default mapping case "$ref" in +*) ref=$(expr "z$ref" : 'z+\(.*\)') @@ -83,13 +81,18 @@ get_remote_merge_branch () { esac expr "z$ref" : 'z.*:' >/dev/null || ref="${ref}:" remote=$(expr "z$ref" : 'z\([^:]*\):') - case "$remote" in - '' | HEAD ) remote=HEAD ;; - heads/*) remote=${remote#heads/} ;; - refs/heads/*) remote=${remote#refs/heads/} ;; - refs/* | tags/* | remotes/* ) remote= - esac + while true ; do + case "$remote" in + '' | HEAD ) remote=;; + heads/*) remote=refs/$remote;; + refs/heads/*) ;; + refs/* | tags/* | remotes/* ) remote=;; + *) remote=heads/$remote + esac - [ -n "$remote" ] && echo "refs/remotes/$repo/$remote" + [ -n "$remote" ] && + git remote tracking $repo $remote && break + case "$remote" in refs/heads/* | "" ) break ; esac + done esac } -- 1.6.3.2.406.gd6a466