Hi, On Wed, 6 Nov 2019, Junio C Hamano wrote: > Elia Pinto <gitter.spiros@xxxxxxxxx> writes: > > Did I miss the first 29 patches (with what I see in this patch, I > do not know if I want to see them immediately, though ;-))? > > > Fix the LGTM warning of the rule that finds uses of the assignment > > operator = in places where the equality operator == would > > make more sense. > > I know you did not mean that existing > > } else if ((email = query_user_email()) && email[0]) { > > better reads if it were written like so: > > } else if ((email == query_user_email()) && email[0]) { > > but that is the only way how that sentence can be read (at least to > me) without looking at what the patch actually does. > > As "email" has already been assigned to at this point in the > codeflow, I agree that, to an eye that does not (and is not willing > to spend cycles to) understand what the code is doing, the latter do > look more natural: "If the value of the variable is the same as the > return value of the query_user_email() function, and ...". And if > "email" were a simpler arithmetic type it would have been even more > (iow, it is clear "email" is a character string from "&& email[0]", > so it is unlikely that "email == que()" is what the user intended). > > So I am somewhat sympathetic to the "warnings" here, but not all > that much, especially if squelching makes the codeflow harder to > follow by introducing otherwise unnecessary nesting levels (like > this patch did). I suspect that it might be possible to futher > restructure the code in such a way that we do not have to do an > assignment in a conditional without making the code deeply nested, > and that may perhaps be worth doing. > > But the thing is, assignment in a cascading conditional is so useful > in avoiding pointless nesting of the code (imagine a reverse patch > of this one---which is easy to sell as cleaning-up and streamlining > the code). > > So, I dunno. For what it's worth, my reaction was exactly the same: I understand how some developers might deem the assignment inside an `if ()` condition undesirable, in Git's context I do strongly prefer the current code over the version proposed in this patch. Thanks, Johannes > > > Signed-off-by: Elia Pinto <gitter.spiros@xxxxxxxxx> > > --- > > ident.c | 13 ++++++++----- > > 1 file changed, 8 insertions(+), 5 deletions(-) > > > > diff --git a/ident.c b/ident.c > > index e666ee4e59..07f2f03b0a 100644 > > --- a/ident.c > > +++ b/ident.c > > @@ -172,12 +172,15 @@ const char *ident_default_email(void) > > strbuf_addstr(&git_default_email, email); > > committer_ident_explicitly_given |= IDENT_MAIL_GIVEN; > > author_ident_explicitly_given |= IDENT_MAIL_GIVEN; > > - } else if ((email = query_user_email()) && email[0]) { > > - strbuf_addstr(&git_default_email, email); > > - free((char *)email); > > - } else > > - copy_email(xgetpwuid_self(&default_email_is_bogus), > > + } else { > > + email = query_user_email(); > > + if (email && email[0]) { > > + strbuf_addstr(&git_default_email, email); > > + free((char *)email); > > + } else > > + copy_email(xgetpwuid_self(&default_email_is_bogus), > > &git_default_email, &default_email_is_bogus); > > + } > > strbuf_trim(&git_default_email); > > } > > return git_default_email.buf; >