git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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://* )
Previous: Paolo BonziniNext: Paolo Bonzini
Message 2 of 6 in “git-fetch, git-branch: Support local --track via a special remote `.'”
  1. git-fetch, git-branch: Support local --track via a special remote `.'Paolo Bonzini, Mar 15, 2007
  2. Junio C HamanoMar 16, 2007
  3. git-fetch, git-parse-remote: Cleanup implementation of '.'Paolo Bonzini, Mar 16, 2007
  4. Junio C HamanoMar 16, 2007
  5. Paolo BonziniMar 16, 2007
  6. Junio C HamanoMar 16, 2007

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.