[RFC/PATCH 2/2] get_remote_merge_branch: Support for arbitrary mapping
This function is used in "git pull --rebase" to know the tracking branch.
Signed-off-by: Santi Béjar <santi@agolina.net>
---
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