Re: [PATCH] sequencer: clarify intention to break out of loop

2018-10-28 Thread Junio C Hamano
Eric Sunshine  writes:

>> diff --git a/sequencer.c b/sequencer.c
>> @@ -2849,10 +2849,14 @@ static int do_reset(const char *name, int len, 
>> struct replay_opts *opts)
>> /* Determine the length of the label */
>> +   for (i = 0; i < len; i++) {
>> +   if (isspace(name[i])) {
>> len = i;
>> +   break;
>> +   }
>> +   }
>> strbuf_addf(_name, "refs/rewritten/%.*s", len, name);
>
> At least for me, this would be more idiomatic if it was coded like this:
>
> for (i = 0; i < len; i++)
> if (isspace(name[i]))
> break;
> strbuf_addf(..., i, name);
>
> or, perhaps (less concise):
>
> for (i = 0; i < len; i++)
> if (isspace(name[i]))
> break;
> len = i;
> strbuf_addf(..., len, name);

Yup, the former is more idiomatic between these two; the latter is
also fine.

The result of Martin's patch shares the same "Huh?" factor as the
original that mucks with the "supposedly constant" side of the
termination condition, and from that point of view, it is not that
much of a readability improvement, I would think.



Re: [PATCH] sequencer: clarify intention to break out of loop

2018-10-28 Thread Martin Ågren
On Sun, 28 Oct 2018 at 20:01, Eric Sunshine  wrote:
>
> On Sun, Oct 28, 2018 at 11:32 AM Martin Ågren  wrote:
> > [...]
> > Let's be explicit about breaking out of the loop. This helps the
> > compiler grok our intention. As a bonus, it might make it (even) more
> > obvious to human readers that the loop stops at the first space.
>
> This did come up in review[1,2]. I had a hard time understanding the
> loop because it looked idiomatic but wasn't (and we have preconceived
> notions about behavior of things which look idiomatic).
>
> [1]: 
> https://public-inbox.org/git/CAPig+cQbG2s-LrAo9+7C7=dXifbWFJ3SzuNa-QePHDk7egK=j...@mail.gmail.com/
> [2]: 
> https://public-inbox.org/git/capig+crju6nixpt2frdwz0x1hmgf1ojvzj3uk2qxege-s7i...@mail.gmail.com/

Hmm, I should have been able to dig those up myself. Thanks for the
pointers.

> > /* Determine the length of the label */
> > +   for (i = 0; i < len; i++) {
> > +   if (isspace(name[i])) {
> > len = i;
> > +   break;
> > +   }
> > +   }
> > strbuf_addf(_name, "refs/rewritten/%.*s", len, name);
>
> At least for me, this would be more idiomatic if it was coded like this:
>
> for (i = 0; i < len; i++)
> if (isspace(name[i]))
> break;
> strbuf_addf(..., i, name);
>
> or, perhaps (less concise):
>
> for (i = 0; i < len; i++)
> if (isspace(name[i]))
> break;
> len = i;
> strbuf_addf(..., len, name);

This second one is more true to the original in that it updates `len` to
the new, shorter length. Which actually seems to be needed -- towards
the very end of the function, `len` is used, so the first of these
suggestions would change the behavior.

Thanks a lot for a review. I'll wait for any additional comments and
will try a v2 with your second suggestion.

Martin


Re: [PATCH] sequencer: clarify intention to break out of loop

2018-10-28 Thread Eric Sunshine
On Sun, Oct 28, 2018 at 11:32 AM Martin Ågren  wrote:
> [...]
> Let's be explicit about breaking out of the loop. This helps the
> compiler grok our intention. As a bonus, it might make it (even) more
> obvious to human readers that the loop stops at the first space.

This did come up in review[1,2]. I had a hard time understanding the
loop because it looked idiomatic but wasn't (and we have preconceived
notions about behavior of things which look idiomatic).

[1]: 
https://public-inbox.org/git/CAPig+cQbG2s-LrAo9+7C7=dXifbWFJ3SzuNa-QePHDk7egK=j...@mail.gmail.com/
[2]: 
https://public-inbox.org/git/capig+crju6nixpt2frdwz0x1hmgf1ojvzj3uk2qxege-s7i...@mail.gmail.com/

> Signed-off-by: Martin Ågren 
> ---
> diff --git a/sequencer.c b/sequencer.c
> @@ -2849,10 +2849,14 @@ static int do_reset(const char *name, int len, struct 
> replay_opts *opts)
> /* Determine the length of the label */
> +   for (i = 0; i < len; i++) {
> +   if (isspace(name[i])) {
> len = i;
> +   break;
> +   }
> +   }
> strbuf_addf(_name, "refs/rewritten/%.*s", len, name);

At least for me, this would be more idiomatic if it was coded like this:

for (i = 0; i < len; i++)
if (isspace(name[i]))
break;
strbuf_addf(..., i, name);

or, perhaps (less concise):

for (i = 0; i < len; i++)
if (isspace(name[i]))
break;
len = i;
strbuf_addf(..., len, name);