Browse Source
Update git-pull to match updated git-fetch and allow pull to fetch from multiple remote references. There is no support for resolving more than two heads, which will be done with "git octopus". Update "git ls-remote" to use git-parse-remote-script. Signed-off-by: Junio C Hamano <junkio@cox.net>maint

4 changed files with 12 additions and 87 deletions
@ -1,79 +0,0 @@
@@ -1,79 +0,0 @@
|
||||
: 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_name="head '$_remote_head' of $_remote_name" |
||||
_remote_head="refs/heads/$_remote_head" |
||||
;; |
||||
esac |
||||
;; |
||||
esac |
@ -1,12 +1,16 @@
@@ -1,12 +1,16 @@
|
||||
#!/bin/sh |
||||
# |
||||
. git-sh-setup-script || die "Not a git archive" |
||||
. git-parse-remote "$@" |
||||
merge_name="$_remote_name" |
||||
|
||||
git-fetch-script "$@" || exit 1 |
||||
merge_head=$(sed -e 's/ .*//' "$GIT_DIR"/FETCH_HEAD | tr '\012' ' ') |
||||
merge_name=$(sed -e 's/^[0-9a-f]* //' "$GIT_DIR"/FETCH_HEAD | |
||||
tr '\012' ' ') |
||||
|
||||
case "$merge_head" in |
||||
'' | *' '?*) die "Cannot resolve multiple heads at the same time (yet)." ;; |
||||
esac |
||||
|
||||
|
||||
git-resolve-script \ |
||||
"$(cat "$GIT_DIR"/HEAD)" \ |
||||
"$(cat "$GIT_DIR"/FETCH_HEAD)" \ |
||||
"Merge $merge_name" |
||||
$merge_head "Merge $merge_name" |
||||
|
Loading…
Reference in new issue