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

Re: [PATCH 7/4] submodule: clarify logic in show_submodule_summary

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 22, 2013, 21:10 UTC
Message-ID
<7v620j6sz1.fsf@alter.siamese.dyndns.org>
In-Reply-To
<20130322161955.GA25857@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 23 quoted lines
> There are two uses of the "left" and "right" commit
> variables that make it hard to be sure what values they
> have (both for the reader, and for gcc, which wrongly
> complains that they might be used uninitialized).
>
> The functions starts with a cascading if statement, checking
> that the input sha1s exist, and finally working up to
> preparing a revision walk. We only prepare the walk if the
> cascading conditional did not find any problems, which we
> check by seeing whether it set the "message" variable or
> not. It's simpler and more obvious to just add a condition
> to the end of the cascade.
>
> Later, we check the same "message" variable when deciding
> whether to clear commit marks on the left/right commits; if
> it is set, we presumably never started the walk. This is
> wrong, though; we might have started the walk and munged
> commit flags, only to encounter an error afterwards. We
> should always clear the flags on left/right if they exist,
> whether the walk was successful or not.
>
> Signed-off-by: Jeff King <peff@peff.net>
> ---
Looks good.  Thanks.
Show 44 quoted lines
>  submodule.c | 13 ++++++-------
>  1 file changed, 6 insertions(+), 7 deletions(-)
>
> diff --git a/submodule.c b/submodule.c
> index 9ba1496..975bc87 100644
> --- a/submodule.c
> +++ b/submodule.c
> @@ -261,7 +261,7 @@ void show_submodule_summary(FILE *f, const char *path,
>  		const char *del, const char *add, const char *reset)
>  {
>  	struct rev_info rev;
> -	struct commit *left = left, *right = right;
> +	struct commit *left = NULL, *right = NULL;
>  	const char *message = NULL;
>  	struct strbuf sb = STRBUF_INIT;
>  	int fast_forward = 0, fast_backward = 0;
> @@ -275,10 +275,8 @@ void show_submodule_summary(FILE *f, const char *path,
>  	else if (!(left = lookup_commit_reference(one)) ||
>  		 !(right = lookup_commit_reference(two)))
>  		message = "(commits not present)";
> -
> -	if (!message &&
> -	    prepare_submodule_summary(&rev, path, left, right,
> -					&fast_forward, &fast_backward))
> +	else if (prepare_submodule_summary(&rev, path, left, right,
> +					   &fast_forward, &fast_backward))
>  		message = "(revision walker failed)";
>  
>  	if (dirty_submodule & DIRTY_SUBMODULE_UNTRACKED)
> @@ -302,11 +300,12 @@ void show_submodule_summary(FILE *f, const char *path,
>  		strbuf_addf(&sb, "%s:%s\n", fast_backward ? " (rewind)" : "", reset);
>  	fwrite(sb.buf, sb.len, 1, f);
>  
> -	if (!message) {
> +	if (!message) /* only NULL if we succeeded in setting up the walk */
>  		print_submodule_summary(&rev, f, del, add, reset);
> +	if (left)
>  		clear_commit_marks(left, ~0);
> +	if (right)
>  		clear_commit_marks(right, ~0);
> -	}
>  
>  	strbuf_release(&sb);
>  }
Previous: Jeff KingNext: Jeff King
Message 31 of 42 in “drop some "int x = x" hacks to silence gcc warnings”
  1. 0/4 drop some "int x = x" hacks to silence gcc warningsJeff King, Mar 21, 2013
  2. 1/4 wt-status: fix possible use of uninitialized variableJeff King, Mar 21, 2013
  3. Jonathan NiederMar 21, 2013
  4. Junio C HamanoMar 21, 2013
  5. Jonathan NiederMar 21, 2013
  6. Jeff KingMar 22, 2013
  7. 2/4 fast-import: use pointer-to-pointer to keep list tailJeff King, Mar 21, 2013
  8. Jonathan NiederMar 21, 2013
  9. 3/4 drop some obsolete "x = x" compiler warning hacksJeff King, Mar 21, 2013
  10. Erik Faye-LundMar 21, 2013
  11. Jonathan NiederMar 21, 2013
  12. Torsten BögershausenMar 24, 2013
  13. 4/4 transport: drop "int cmp = cmp" hackJeff King, Mar 21, 2013
  14. Jonathan NiederMar 21, 2013
  15. Junio C HamanoMar 24, 2013
  16. Jeff KingMar 24, 2013
  17. Torsten BögershausenMar 24, 2013
  18. Junio C HamanoMar 25, 2013
  19. Jeff KingMar 25, 2013
  20. Junio C HamanoMar 25, 2013
  21. Johannes SixtMar 21, 2013
  22. Jeff KingMar 21, 2013
  23. Junio C HamanoMar 21, 2013
  24. Junio C HamanoMar 21, 2013
  25. Jeff KingMar 21, 2013
  26. 5/4 fast-import: clarify "inline" logic in file_change_mJeff King, Mar 21, 2013
  27. 6/4 run-command: always set failed_errno in start_commandJeff King, Mar 21, 2013
  28. Jonathan NiederMar 21, 2013
  29. Jeff KingMar 22, 2013
  30. 7/4 submodule: clarify logic in show_submodule_summaryJeff King, Mar 22, 2013
  31. Junio C HamanoMar 22, 2013
  32. 8/4 match-trees: drop "x = x" initializationsJeff King, Mar 22, 2013
  33. Junio C HamanoMar 22, 2013
  34. Junio C HamanoMar 22, 2013
  35. Jeff KingMar 22, 2013
  36. René ScharfeMar 23, 2013
  37. Junio C HamanoMar 24, 2013
  38. Jeff KingMar 24, 2013
  39. René ScharfeMar 24, 2013
  40. Junio C HamanoMar 25, 2013
  41. Joachim SchmitzMar 21, 2013
  42. Joachim SchmitzMar 21, 2013

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.