Re: [PATCH] match_push_refs(): nobody sets src->peer_ref anymore
- From
Jeff King <peff@peff.net>
- Date
- Mar 5, 2013, 05:45 UTC
- Message-ID
- <20130305054456.GA12446@sigill.intra.peff.net>
- In-Reply-To
- <7vlia2x05q.fsf@alter.siamese.dyndns.org>
On Mon, Mar 04, 2013 at 02:36:33PM -0800, Junio C Hamano wrote:
Show 15 quoted lines
> In ancient times, we used to disallow the same source ref to be > pushed to more than one places, e.g. "git push there master:master > master:naster" was disallowed. We later lifted this restriction > with db27ee63929f (send-pack: allow the same source to be pushed > more than once., 2005-08-06) and there no longer is anybody that > sets peer_ref for the source side of the ref list in the push > codepath since then. > > Remove one leftover no-op in a loop that iterates over the source > side of ref list (i.e. our local ref) to see if it can/should be > sent to a matching destination ref while skipping ones that is > marked with peer_ref (which will never exist, so we do not skip > anything). > > Signed-off-by: Junio C Hamano <gitster@pobox.com>
This looks good to me. I was curious how difficult it would be to verify the "no longer is anybody that sets peer_ref" claim. It's actually quite easy. All of the call-sites just feed the result of get_local_heads(), which is easy to verify does not ever set peer_ref. Looking at the current code, I think you could even drop the "src" parameter and just have match_push_refs call get_local_heads() itself, though that does feel like a step backwards in terms of function generality.
As an aside, I have always found the embedded "next" and "peer_ref" pointers in "struct ref" to be hacky. They are not properties of the ref at all, and the "refs to fetch" list would be more logically represented as a list of pairs of refs (and then I would not have to ever remember whether the peer is the local or remote ref in a given case). Probably not worth worrying about at this point, though, as the code fallout would be significant for little gain.
-Peff