Quoting r. Junio C Hamano <junkio@xxxxxxx>: > Subject: Re: [PATCH] Multiple refs from the same remote in one git fetch > > "Michael S. Tsirkin" <mst@xxxxxxxxxxxxxx> writes: > > >> > Could this go into next then? > >> > >> No. Spoke too fast. Breaks t6200 test because it reports the > >> refs fetched in duplicates. > > > > Right, The problem was with the way I coded the loop in git-fetch.sh. > > Here's the fixed versin - seems to pass make test fine. > > But what are you doing for single_force and not_for_merge when > there are more than one matches in the patch? They seem to get > set to a random value depending on whatever happens to match > last, which does not feel quite right. > I think it was only true for single_force - but here's a patch to fix it and also make this explicit. BTW, does it still look like it's worth it the effort to lift the restriction, or does fixing the error message to something like "no such remote or duplicate ref %s" make more sense to you? Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxxxxxx> diff --git a/connect.c b/connect.c index 4422a0d..3880191 100644 --- a/connect.c +++ b/connect.c @@ -115,6 +115,7 @@ int get_ack(int fd, unsigned char *resul int path_match(const char *path, int nr, char **match) { int i; + int found = 0; int pathlen = strlen(path); for (i = 0; i < nr; i++) { @@ -128,9 +129,9 @@ int path_match(const char *path, int nr, if (pathlen > len && path[pathlen - len - 1] != '/') continue; *s = 0; - return (i + 1); + found = i + 1; } - return 0; + return found; } struct refspec { diff --git a/git-fetch.sh b/git-fetch.sh index c2eebee..328168b 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -366,33 +366,44 @@ fetch_main () { exit 1 ;; esac found= - single_force= + found_any= for ref in $refs do case "$ref" in +$remote_name:*) single_force=t not_for_merge= - found="$ref" - break ;; + found="$ref";; .+$remote_name:*) single_force=t not_for_merge=t - found="$ref" - break ;; + found="$ref";; .$remote_name:*) + single_force= not_for_merge=t - found="$ref" - break ;; + found="$ref";; $remote_name:*) + single_force= + not_for_merge= + found="$ref";; + *) + single_force= not_for_merge= - found="$ref" - break ;; + found=;; esac + if test "$found" != "" + then + found_any=1 + local_name=$(expr "z$found" : 'z[^:]*:\(.*\)') + append_fetch_head "$sha1" "$remote" "$remote_name" \ + "$remote_nick" "$local_name" "$not_for_merge" + fi done - local_name=$(expr "z$found" : 'z[^:]*:\(.*\)') - append_fetch_head "$sha1" "$remote" \ - "$remote_name" "$remote_nick" "$local_name" "$not_for_merge" + if test "$found_any" == "" + then + append_fetch_head "$sha1" "$remote" "$remote_name" \ + "$remote_nick" "" "" + fi done ) || exit ;; esac diff --git a/t/Makefile b/t/Makefile -- MST - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html