[PATCH] Multiple refs from the same remote in one git fetch
- From
- Michael S. Tsirkin <mst@mellanox.co.il>
- Date
- Aug 7, 2006, 22:19 UTC
- Message-ID
- <20060807221914.GA24393@mellanox.co.il>
- In-Reply-To
- <7vu04o1fwm.fsf@assigned-by-dhcp.cox.net>
Quoting r. Junio C Hamano <junkio@cox.net>:
Show 5 quoted lines
> > At least, fix the error message? > > That would touch the same vicinity of code so if I were to do > that myself I would rather see if the restriction can be > loosened properly first.
The following seems to fix this issue: simply scan the full refspec list for each remote instead of breaking on the first match. I had to touch the git-fetch.sh script as well as it is scanning the remote list, too. Works for me.
---
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/Makefile b/Makefile 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/fetch-pack.c b/fetch-pack.c diff --git a/git-fetch.sh b/git-fetch.sh index c2eebee..c35bae6 100755 --- a/git-fetch.sh +++ b/git-fetch.sh @@ -373,26 +373,22 @@ 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";; esac - done - local_name=$(expr "z$found" : 'z[^:]*:\(.*\)') - append_fetch_head "$sha1" "$remote" \ + local_name=$(expr "z$found" : 'z[^:]*:\(.*\)') + append_fetch_head "$sha1" "$remote" \ "$remote_name" "$remote_nick" "$local_name" "$not_for_merge" + done done ) || exit ;; esac
-- MST