git-fetch: fix dumb protocol transport to fetch from pack-pruned ref
Earlier, commit walkers downloaded loose refs from refs/ hierarchy of the remote side to find where to start walking; this would not work for a repository whose refs are packed and then pruned. With the previous change, we have ls-remote output from the remote in-core; we can use the value from there without requiring loose refs anymore. Signed-off-by: Junio C Hamano <junkio@cox.net>maint
							parent
							
								
									28b8e61fc6
								
							
						
					
					
						commit
						2986c02217
					
				
							
								
								
									
										28
									
								
								git-fetch.sh
								
								
								
								
							
							
						
						
									
										28
									
								
								git-fetch.sh
								
								
								
								
							|  | @ -307,22 +307,20 @@ fetch_main () { | |||
| 		"`git-repo-config --bool http.noEPSV`" = true ]; then | ||||
| 	      noepsv_opt="--disable-epsv" | ||||
| 	  fi | ||||
| 	  max_depth=5 | ||||
| 	  depth=0 | ||||
| 	  head="ref: $remote_name" | ||||
| 	  while (expr "z$head" : "zref:" && expr $depth \< $max_depth) >/dev/null | ||||
| 	  do | ||||
| 	    remote_name_quoted=$(@@PERL@@ -e ' | ||||
| 	      my $u = $ARGV[0]; | ||||
|               $u =~ s/^ref:\s*//; | ||||
| 	      $u =~ s{([^-a-zA-Z0-9/.])}{sprintf"%%%02x",ord($1)}eg; | ||||
| 	      print "$u"; | ||||
| 	  ' "$head") | ||||
| 	    head=$(curl -nsfL $curl_extra_args $noepsv_opt "$remote/$remote_name_quoted") | ||||
| 	    depth=$( expr \( $depth + 1 \) ) | ||||
| 	  done | ||||
|  | ||||
| 	  # Find $remote_name from ls-remote output. | ||||
| 	  head=$( | ||||
| 		IFS='	' | ||||
| 		echo "$ls_remote_result" | | ||||
| 		while read sha1 name | ||||
| 		do | ||||
| 			test "z$name" = "z$remote_name" || continue | ||||
| 			echo "$sha1" | ||||
| 			break | ||||
| 		done | ||||
| 	  ) | ||||
| 	  expr "z$head" : "z$_x40\$" >/dev/null || | ||||
| 	      die "Failed to fetch $remote_name from $remote" | ||||
| 		die "No such ref $remote_name at $remote" | ||||
| 	  echo >&2 "Fetching $remote_name from $remote using $proto" | ||||
| 	  git-http-fetch -v -a "$head" "$remote/" || exit | ||||
| 	  ;; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano