Re: [PATCH v2 2/2] remote.c: fix handling of %(push:remoteref)
From: Junio C Hamano <hidden>
Date: 2020-03-03 22:48:54
Damien Robert [off-list ref] writes:
quoted
By the way, I have a bit higher-level question. All of the above logic that decides what should happen in "git push" MUST have existing code we already use to implement "git push", no?Yes.quoted
Why do we need to reinvent it here, instead of reusing the existing code? Is it because the interface into the functions that implement the existing logic is very different from what this function wants?Mostly yes. The logic of git push is to massage the refspecs directly, for instance: case PUSH_DEFAULT_MATCHING: refspec_append(&rs, ":"); case PUSH_DEFAULT_CURRENT: ... strbuf_addf(&refspec, "%s:%s", branch->refname, branch->refname); case PUSH_DEFAULT_UPSTREAM: ... strbuf_addf(&refspec, "%s:%s", branch->refname, branch->merge[0]->src); And the error messages are also not the same, and to give a good error message we need to parse the different cases. It may be possible to refactorize all this, but not in an obvious way and it would be a lot more work than this patch series.
Yeah, in light of the analysis I agree it makes sense to take the approach of these two patches, at least for now. Thanks.