Re: [PATCH, fixed] git-fetch, git-branch: Support local --track via a special remote `.'
- From
Junio C Hamano <junkio@cox.net>
- Date
- Mar 16, 2007, 00:21 UTC
- Message-ID
- <7vr6rqyr60.fsf@assigned-by-dhcp.cox.net>
- In-Reply-To
- <etavpn$ma0$1@sea.gmane.org>
Paolo Bonzini <bonzini@gnu.org> writes:
> To make the name of fetch_dumb more consistent with the > functionality, I renamed it to fetch_heads, as well as > renaming fetch_native to fetch_packs.
I agree renaming fetch_dumb vs fetch_native to names that reflect their nature better might be a good idea. The former is to perform fetching objects and updating tracking ref for one ref at a time, while the latter is to do the fetching and updating all relevant tracking refs in one go. The 'per-ref' behaviour is exactly why the former is called "dumb".
If you really want to rename, perhaps making the former fetch_per_ref and the latter fetch_all_at_once would reflect their nature better. While I do not have strong preference either way, I think "fetch_head" is a slight improvement over "fetch_dumb", because it tells that "per-ref" nature a bit better, and "fetch_pack" is not any better than "fetch_native".
While talking about names, I think calling data_source 'builtin' feels very wrong, as we _might_ want to later add other kinds of repository the system knows about. I would have picked 'self', as this change is about referring the repository itself using a fake name '.' for it.
I think it would be a lot more efficient if you made the 'self' fetch piggyback on fetch_all_at_once side, like the attached patch.
This is on top of your patch to illustrate the difference, and does not have the renaming I suggested (i.e. dumb->per_ref, packs->all_at_once, and builtin->self).
diff --git a/git-fetch.sh b/git-fetch.sh index cbbb5ca..ffe6847 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -170,6 +170,10 @@ fetch_packs () { die "shallow clone with bundle is not supported" git-bundle unbundle "$remote" $rref || echo failed "$remote" + elif test "." = "$remote" + then + git-show-ref $rref || + echo failed . else git-fetch-pack --thin $exec $keep $shallow_depth $no_progress \ "$remote" $rref || @@ -280,10 +284,6 @@ fetch_heads () { rsync_slurped_objects=t } ;; - .) - local_name=$remote_name - head=$(git-rev-parse --verify "$local_name") - ;; esac append_fetch_head "$head" "$remote" \ @@ -296,7 +296,7 @@ fetch_heads () { fetch_main () { data_source=$(get_data_source "$remote_nick") if test "$data_source" = builtin; then - fetch_heads "$@" + fetch_packs "$@" else case "$remote" in http://* | https://* | ftp://* | rsync://* )