fetch,parse-remote,fmt-merge-msg: refs/remotes/* support

We can now easily fetch and merge things from heads in the
refs/remotes/ hierarchy in remote repositories.

The refs/remotes/ hierarchy is likely to become the standard for
tracking foreign SCMs, as well as the location of Pull: targets
for tracking remote branches in newly cloned repositories.

Signed-off-by: Eric Wong <normalperson@yhbt.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Eric Wong 2006-03-10 04:19:07 -08:00 коммит произвёл Junio C Hamano
Родитель f2561fda36
Коммит 687b8be8bb
3 изменённых файлов: 20 добавлений и 6 удалений

Просмотреть файл

@ -94,6 +94,9 @@ append_fetch_head () {
# remote-nick is the URL given on the command line (or a shorthand)
# remote-name is the $GIT_DIR relative refs/ path we computed
# for this refspec.
# the $note_ variable will be fed to git-fmt-merge-msg for further
# processing.
case "$remote_name_" in
HEAD)
note_= ;;
@ -103,6 +106,9 @@ append_fetch_head () {
refs/tags/*)
note_="$(expr "$remote_name_" : 'refs/tags/\(.*\)')"
note_="tag '$note_' of " ;;
refs/remotes/*)
note_="$(expr "$remote_name_" : 'refs/remotes/\(.*\)')"
note_="remote branch '$note_' of " ;;
*)
note_="$remote_name of " ;;
esac
@ -147,10 +153,10 @@ fast_forward_local () {
else
echo >&2 "* $1: storing $3"
fi
git-update-ref "$1" "$2"
git-update-ref "$1" "$2"
;;
refs/heads/*)
refs/heads/* | refs/remotes/*)
# $1 is the ref being updated.
# $2 is the new value for the ref.
local=$(git-rev-parse --verify "$1^0" 2>/dev/null)

Просмотреть файл

@ -75,6 +75,7 @@ while (<>) {
$src{$src} = {
BRANCH => [],
TAG => [],
R_BRANCH => [],
GENERIC => [],
# &1 == has HEAD.
# &2 == has others.
@ -91,6 +92,11 @@ while (<>) {
push @{$src{$src}{TAG}}, $1;
$src{$src}{HEAD_STATUS} |= 2;
}
elsif (/^remote branch (.*)$/) {
$origin = $1;
push @{$src{$src}{R_BRANCH}}, $1;
$src{$src}{HEAD_STATUS} |= 2;
}
elsif (/^HEAD$/) {
$origin = $src;
$src{$src}{HEAD_STATUS} |= 1;
@ -123,6 +129,8 @@ for my $src (@src) {
}
push @this, andjoin("branch ", "branches ",
$src{$src}{BRANCH});
push @this, andjoin("remote branch ", "remote branches ",
$src{$src}{R_BRANCH});
push @this, andjoin("tag ", "tags ",
$src{$src}{TAG});
push @this, andjoin("commit ", "commits ",

Просмотреть файл

@ -86,14 +86,14 @@ canon_refs_list_for_fetch () {
local=$(expr "$ref" : '[^:]*:\(.*\)')
case "$remote" in
'') remote=HEAD ;;
refs/heads/* | refs/tags/*) ;;
heads/* | tags/* ) remote="refs/$remote" ;;
refs/heads/* | refs/tags/* | refs/remotes/*) ;;
heads/* | tags/* | remotes/* ) remote="refs/$remote" ;;
*) remote="refs/heads/$remote" ;;
esac
case "$local" in
'') local= ;;
refs/heads/* | refs/tags/*) ;;
heads/* | tags/* ) local="refs/$local" ;;
refs/heads/* | refs/tags/* | refs/remotes/*) ;;
heads/* | tags/* | remotes/* ) local="refs/$local" ;;
*) local="refs/heads/$local" ;;
esac