Re: [PATCH] Multiple refs from the same remote in one git fetch
- From
- Michael S. Tsirkin <mst@mellanox.co.il>
- Date
- Aug 14, 2006, 00:13 UTC
- Message-ID
- <20060814001329.GA24694@mellanox.co.il>
- In-Reply-To
- <7vveoxo8ni.fsf@assigned-by-dhcp.cox.net>
Quoting r. Junio C Hamano <junkio@cox.net>:
Show 10 quoted lines
> >> Looks Ok, although I have to admit I just gave a cursory look. > >> Thanks. > >> > > > > 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.
---
Fix git fetch for when multiple refspecs reference the same remote head.
Signed-off-by: Michael S. Tsirkin <mst@mellanox.co.il>
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..80a7a5d 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -366,6 +366,7 @@ fetch_main () { exit 1 ;; esac found= + found_any= single_force= for ref in $refs do @@ -373,26 +374,34 @@ fetch_main () { +$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:*) not_for_merge=t - found="$ref" - break ;; + found="$ref";; $remote_name:*) not_for_merge= - found="$ref" - break ;; + found="$ref";; + *) + 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 + local_name=$(expr "z$found" : 'z[^:]*:\(.*\)') + append_fetch_head "$sha1" "$remote" "$remote_name" \ + "$remote_nick" "$local_name" "$not_for_merge" + fi done ) || exit ;; esac diff --git a/t/Makefile b/t/Makefile
-- MST