git-fetch, git-branch: Support local --track via a special remote '.'
This patch adds support for a dummy remote '.' to avoid having to declare a fake remote like [remote "local"] url = . fetch = refs/heads/*:refs/heads/* Such a builtin remote simplifies the operation of "git-fetch", which will populate FETCH_HEAD but will not pretend that two repositories are in use, will not create a thin pack, and will not perform any useless remapping of names. The speed improvement is around 20%, and it should improve more if "git-fetch" is converted to a builtin. To this end, git-parse-remote is grown with a new kind of remote, 'builtin'. In git-fetch.sh, we treat the builtin remote specially in that it needs no pack/store operations. In fact, doing git-fetch on a builtin remote will simply populate FETCH_HEAD appropriately. The patch also improves of the --track/--no-track support, extending it so that branch.<name>.remote items referring '.' can be created. Finally, it fixes a typo in git-checkout.sh. Signed-off-by: Paolo Bonzini <bonzini@gnu.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
803527f1d9
commit
9debc3241b
@ -9,6 +9,9 @@ get_data_source () {
|
||||
*/*)
|
||||
echo ''
|
||||
;;
|
||||
.)
|
||||
echo self
|
||||
;;
|
||||
*)
|
||||
if test "$(git-config --get "remote.$1.url")"
|
||||
then
|
||||
@ -31,6 +34,9 @@ get_remote_url () {
|
||||
'')
|
||||
echo "$1"
|
||||
;;
|
||||
self)
|
||||
echo "$1"
|
||||
;;
|
||||
config)
|
||||
git-config --get "remote.$1.url"
|
||||
;;
|
||||
@ -57,7 +63,7 @@ get_default_remote () {
|
||||
get_remote_default_refs_for_push () {
|
||||
data_source=$(get_data_source "$1")
|
||||
case "$data_source" in
|
||||
'' | branches)
|
||||
'' | branches | self)
|
||||
;; # no default push mapping, just send matching refs.
|
||||
config)
|
||||
git-config --get-all "remote.$1.push" ;;
|
||||
@ -163,6 +169,10 @@ get_remote_default_refs_for_fetch () {
|
||||
case "$data_source" in
|
||||
'')
|
||||
echo "HEAD:" ;;
|
||||
self)
|
||||
canon_refs_list_for_fetch -d "$1" \
|
||||
$(git-for-each-ref --format='%(refname):')
|
||||
;;
|
||||
config)
|
||||
canon_refs_list_for_fetch -d "$1" \
|
||||
$(git-config --get-all "remote.$1.fetch") ;;
|
||||
@ -177,7 +187,7 @@ get_remote_default_refs_for_fetch () {
|
||||
}' "$GIT_DIR/remotes/$1")
|
||||
;;
|
||||
*)
|
||||
die "internal error: get-remote-default-ref-for-push $1" ;;
|
||||
die "internal error: get-remote-default-ref-for-fetch $1" ;;
|
||||
esac
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user