git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 30/32] ident.c: fix LGTM warning on the possible abuse of the '=' operator

From
Junio C Hamano <gitster@pobox.com>
Date
Nov 6, 2019, 02:16 UTC
Message-ID
<xmqqbltpwxyd.fsf@gitster-ct.c.googlers.com>
In-Reply-To
<20191104095923.116086-1-gitter.spiros@gmail.com>
Elia Pinto <gitter.spiros@gmail.com> 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.
Show 30 quoted lines
> Signed-off-by: Elia Pinto <gitter.spiros@gmail.com>
> ---
>  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;
Previous: Elia PintoNext: Johannes Schindelin
Message 14 of 15 in “ident.c: fix LGTM warning on the possible abuse of the '=' operator”
  1. 30/32 ident.c: fix LGTM warning on the possible abuse of the '=' operatorElia Pinto, Nov 4, 2019
  2. 31/32 commit-graph.c: fix code that could convert the result of an integer multiplication to a larger typeElia Pinto, Nov 4, 2019
  3. Junio C HamanoNov 6, 2019
  4. Danh DoanNov 7, 2019
  5. Junio C HamanoNov 7, 2019
  6. Danh DoanNov 7, 2019
  7. Johannes SchindelinNov 7, 2019
  8. Johannes SchindelinNov 7, 2019
  9. 32/32 date.c: fix code that may overflow 'int' before it is converted to 'time_t'Elia Pinto, Nov 4, 2019
  10. SZEDER GáborNov 4, 2019
  11. Elia PintoNov 4, 2019
  12. Phillip WoodNov 4, 2019
  13. Elia PintoNov 4, 2019
  14. Junio C HamanoNov 6, 2019
  15. Johannes SchindelinNov 6, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.