Re: tracking repository
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Mar 16, 2008, 23:01 UTC
- Message-ID
- <7vbq5eff3e.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <7vzlsyfgjg.fsf@gitster.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 7 quoted lines
> Daniel Barkalow <barkalow@iabervon.org> writes: > >> Is "refs/*:refs/*" (mirror everything, including weird stuff) supposed to >> be prohibited? > > No. In fact "remote add --mirror" actively creates such. See my other > message about design level issues.
I think something like this is needed. It still has an independent issue that this is now called by "git remote show" or "git remote prune", and it will die with a nonsense "refusing to create" error message, though.
The error, as far as I can tell, is half about a misconfigured config (e.g. "fetch = refs/heads/*:refs/remotes/[]?/*") and half about screwy remote repository (e.g. a misnamed "[]?" branch on the remote end can try to update a broken "refs/remotes/origin/[]?" even the configuration is a perfectly valid "fetch = refs/heads/*:refs/remotes/origin/*"). It may make sense to reword the error message to "ignoring" from "refusing" and do just that without dying here. I dunno.
remote.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/remote.c b/remote.c index f3f7375..fbcb03c 100644 --- a/remote.c +++ b/remote.c @@ -1007,9 +1007,12 @@ int get_fetch_map(const struct ref *remote_refs, } for (rm = ref_map; rm; rm = rm->next) { - if (rm->peer_ref && check_ref_format(rm->peer_ref->name + 5)) - die("* refusing to create funny ref '%s' locally", - rm->peer_ref->name); + if (rm->peer_ref) { + int st = check_ref_format(rm->peer_ref->name + 5); + if (st && st != CHECK_REF_FORMAT_ONELEVEL) + die("* refusing to create funny ref '%s'" + " locally", rm->peer_ref->name); + } } if (ref_map)