From: Junio C Hamano <gitster@pobox.com>
To: Felipe Contreras <felipe.contreras@gmail.com>
Cc: git@vger.kernel.org, Jeff King <peff@peff.net>,
Johannes Schindelin <johannes.schindelin@gmx.de>
Subject: Re: [PATCH v2 10/11] sha1_name: reorganize get_sha1_basic()
Date: Wed, 08 May 2013 14:51:42 -0700 [thread overview]
Message-ID: <7vsj1xcf81.fsf@alter.siamese.dyndns.org> (raw)
In-Reply-To: <CAMP44s38eJP6WRQTQMDRqo-AXb7-YE1ZS-tJ7NK_QRwgHB3Obw@mail.gmail.com> (Felipe Contreras's message of "Wed, 8 May 2013 15:39:25 -0500")
Felipe Contreras <felipe.contreras@gmail.com> writes:
> On Wed, May 8, 2013 at 1:18 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> Felipe Contreras <felipe.contreras@gmail.com> writes:
>>
>>> Through the years the functionality to handle @{-N} and @{u} has moved
>>> around the code, and as a result, code that once made sense, doesn't any
>>> more.
>>>
>>> There is no need to call this function recursively with the branch of
>>> @{-N} substituted because dwim_{ref,log} already replaces it.
>>>
>>> However, there's one corner-case where @{-N} resolves to a detached
>>> HEAD, in which case we wouldn't get any ref back.
>>>
>>> So we parse the nth-prior manually, and deal with it depending on
>>> weather it's a SHA-1, or a ref.
>>> ...
>>
>> s/weather/whether/;
>>
>>> @@ -447,6 +448,10 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1)
>>> if (len && str[len-1] == '}') {
>>> for (at = len-4; at >= 0; at--) {
>>> if (str[at] == '@' && str[at+1] == '{') {
>>> + if (at == 0 && str[2] == '-') {
>>> + nth_prior = 1;
>>> + continue;
>>> + }
>>
>> Does this have to be inside the loop?
>
> Yes, the whole purpose is to avoid reflog_len to be set.
What I meant was the "<nothing>@{-" check, which happens only at==0.
if (!memcmp(str, "@{-", 3) && len > 3)
nth_prior = 1;
else
for (at = len - 4; at; at--) {
... look for and break at the first "@{" ...
}
or something.
>> Ahh, OK, the new code will now let dwim_ref/log to process @{-N}
>> again (the log message hints this but it wasn't all that clear),
>
> I thought it was clear we would let dwim_{ref,log} do the job:
Yes, the reason I did not immediately think of that is because I
knew @{-N} was expensive (need to read reflog backwards) and didn't
think anybody would redo the code to deliberately do that twice ;-)
>> Also, a few points this patch highlights in the code before the
>> change:
>>
>> - If we were on a branch with 40-hex name at nth prior checkout,
>> would we mistake it as being detached at the commit?
>>
>> - If we were on a branch 'foo' at nth prior checkout, would our
>> previous get_sha1_1() have made us mistake it as referring to a
>> tag 'foo' with the same name if it exists?
>
> I don't know, but I suspect there's no change after this patch.
Yes, didn't I say "the code before the change" above?
These two correctness issues look more important issues to me, with
or without the restructure patch (in other words, they are
independent).
next prev parent reply other threads:[~2013-05-08 21:51 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-05-07 21:55 [PATCH v2 00/11] sha1_name: improvements Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 01/11] tests: at-combinations: simplify setup Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 02/11] tests: at-combinations: check ref names directly Felipe Contreras
2013-05-08 5:55 ` Junio C Hamano
2013-05-08 6:03 ` Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 03/11] tests: at-combinations: improve nonsense() Felipe Contreras
2013-05-08 5:55 ` Junio C Hamano
2013-05-08 6:49 ` Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 04/11] tests: at-combinations: increase coverage Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 05/11] tests: at-combinations: @{N} versus HEAD@{N} Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 06/11] sha1_name: remove no-op Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 07/11] sha1_name: remove unnecessary braces Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 08/11] sha1_name: avoid Yoda conditions Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 09/11] sha1_name: don't waste cycles in the @-parsing loop Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 10/11] sha1_name: reorganize get_sha1_basic() Felipe Contreras
2013-05-08 7:39 ` Ramkumar Ramachandra
2013-05-08 7:42 ` Felipe Contreras
2013-05-08 18:18 ` Junio C Hamano
2013-05-08 18:41 ` Junio C Hamano
2013-05-08 20:39 ` Felipe Contreras
2013-05-08 21:51 ` Junio C Hamano [this message]
2013-05-08 22:06 ` Felipe Contreras
2013-05-07 21:55 ` [PATCH v2 11/11] sha1_name: check @{-N} errors sooner Felipe Contreras
2013-05-07 22:11 ` [PATCH v2 00/11] sha1_name: improvements Felipe Contreras
2013-05-08 5:56 ` Junio C Hamano
2013-05-08 10:44 ` Ramkumar Ramachandra
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vsj1xcf81.fsf@alter.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=felipe.contreras@gmail.com \
--cc=git@vger.kernel.org \
--cc=johannes.schindelin@gmx.de \
--cc=peff@peff.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).