Skip to content

Commit

Permalink
git-fetch: allow glob pattern in refspec
Browse files Browse the repository at this point in the history
This adds Andy's refspec glob.  You can have a single line:

	Pull: refs/heads/*:refs/remotes/origin/*

in your ".git/remotes/origin" and say "git fetch" to retrieve
all refs under heads/ at the remote side to remotes/origin/ in
the local repository.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Nov 24, 2006
1 parent 2986c02 commit 5677882
Showing 1 changed file with 35 additions and 0 deletions.
35 changes: 35 additions & 0 deletions git-parse-remote.sh
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,39 @@ get_remote_default_refs_for_push () {
esac
}

# Called from canon_refs_list_for_fetch -d "$remote", which
# is called from get_remote_default_refs_for_fetch to grok
# refspecs that are retrieved from the configuration, but not
# from get_remote_refs_for_fetch when it deals with refspecs
# supplied on the command line. $ls_remote_result has the list
# of refs available at remote.
expand_refs_wildcard () {
for ref
do
# a non glob pattern is given back as-is.
expr "z$ref" : 'zrefs/.*/\*:refs/.*/\*$' >/dev/null || {
echo "$ref"
continue
}
from=`expr "z$ref" : 'z\(refs/.*/\)\*:refs/.*/\*$'`
to=`expr "z$ref" : 'zrefs/.*/\*:\(refs/.*/\)\*$'`
echo "$ls_remote_result" |
(
IFS=' '
while read sha1 name
do
mapped=${name#"$from"}
if test "z$name" != "z${name#'^{}'}" ||
test "z$name" = "z$mapped"
then
continue
fi
echo "${name}:${to}${mapped}"
done
)
done
}

# Subroutine to canonicalize remote:local notation.
canon_refs_list_for_fetch () {
# If called from get_remote_default_refs_for_fetch
Expand All @@ -107,6 +140,8 @@ canon_refs_list_for_fetch () {
merge_branches=$(git-repo-config \
--get-all "branch.${curr_branch}.merge")
fi
set x $(expand_refs_wildcard "$@")
shift
fi
for ref
do
Expand Down

0 comments on commit 5677882

Please sign in to comment.