Skip to content

Commit

Permalink
parse-remote: function to get the tracking branch to be merge
Browse files Browse the repository at this point in the history
The only user of get_remote_refs_for_fetch was "git pull --rebase" and
it only wanted the tracking branch to be merge. So, add a simple
function (get_remote_merge_branch) with this new meaning.

No behavior changes. The new function behaves like the old code in
"git pull --rebase". In particular, it only works with the default
refspec mapping and with remote branches, not tags.

Signed-off-by: Santi Béjar <santi@agolina.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Santi Béjar authored and Junio C Hamano committed Jun 12, 2009
1 parent cb9d398 commit 97af7ff
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 5 deletions.
29 changes: 29 additions & 0 deletions git-parse-remote.sh
Original file line number Diff line number Diff line change
Expand Up @@ -229,6 +229,34 @@ get_remote_refs_for_fetch () {
esac
}

get_remote_merge_branch () {
case "$#" in
0|1)
die "internal error: 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+\(.*\)')
;;
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

[ -n "$remote" ] && echo "refs/remotes/$repo/$remote"
esac
}

resolve_alternates () {
# original URL (xxx.git)
top_=`expr "z$1" : 'z\([^:]*:/*[^/]*\)/'`
Expand Down Expand Up @@ -262,3 +290,4 @@ get_uploadpack () {
;;
esac
}

7 changes: 2 additions & 5 deletions git-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,9 @@ test true = "$rebase" && {
die "refusing to pull with rebase: your working tree is not up-to-date"

. git-parse-remote &&
origin="$1"
test -z "$origin" && origin=$(get_default_remote)
reflist="$(get_remote_refs_for_fetch "$@" 2>/dev/null |
sed "s|refs/heads/\(.*\):|\1|")" &&
reflist="$(get_remote_merge_branch "$@" 2>/dev/null)" &&
oldremoteref="$(git rev-parse -q --verify \
"refs/remotes/$origin/$reflist")"
"$reflist")"
}
orig_head=$(git rev-parse -q --verify HEAD)
git fetch $verbosity --update-head-ok "$@" || exit 1
Expand Down

0 comments on commit 97af7ff

Please sign in to comment.