Re: [RFC/PATCH 0/2] Speed up fetch with large number of tags
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 16, 2009, 22:52 UTC
- Message-ID
- <7vtyz2wlhm.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <20090916224253.GB14660@spearce.org>
"Shawn O. Pearce" <spearce@spearce.org> writes:
Show 8 quoted lines
> JGit depends on the fact that the refs list is sorted by the remote
> peer, and that foo^{} immediately follows foo. I don't think this
> has ever been documented, but all sane implementations[1] follow
> this convention and it may be something we could simply codify as
> part of the protocol standard.
>
> [1] Sane implementations are defined to be what I consider to be
> the two stable implementations in deployed use, git.git and JGit.There is no strong reason for ordering of refs between themselves (i.e. refs/heads/master comes before refs/heads/next) other than the fact that we sort and then walk due to packed-refs reasons.
But emitting tag X and then its peeled representation X^{} immediately after it is quite fundamental in the way how anybody sane would implement ls-remote. There is no reason to violate the established order other than "I could do so", and in order not to show X and X^{} next to each other, you would need _more_ processing.
So I would say it is very safe to assume this.
Also, you might not have noticed, but my illustration patch was merely using it as a hint to optimize, and if the last ref we saw was not X when it is turn to handle X^{}, it simply falled back to the original logic, iow, the patch never compromised the correctness.