git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Johannes Sixt <j.sixt@viscovery.net>, git@vger.kernel.org
Subject: [PATCH 7/4] submodule: clarify logic in show_submodule_summary
Date: Fri, 22 Mar 2013 12:19:56 -0400	[thread overview]
Message-ID: <20130322161955.GA25857@sigill.intra.peff.net> (raw)
In-Reply-To: <20130322161837.GG3083@sigill.intra.peff.net>

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>
---
 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);
 }
-- 
1.8.2.13.g0f18d3c

  reply	other threads:[~2013-03-22 16:20 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-21 11:03 [PATCH 0/4] drop some "int x = x" hacks to silence gcc warnings Jeff King
2013-03-21 11:05 ` [PATCH 1/4] wt-status: fix possible use of uninitialized variable Jeff King
2013-03-21 19:49   ` Jonathan Nieder
2013-03-21 19:55     ` Junio C Hamano
2013-03-21 19:58       ` Jonathan Nieder
2013-03-22 16:15     ` Jeff King
2013-03-21 11:08 ` [PATCH 2/4] fast-import: use pointer-to-pointer to keep list tail Jeff King
2013-03-21 20:43   ` Jonathan Nieder
2013-03-21 11:10 ` [PATCH 3/4] drop some obsolete "x = x" compiler warning hacks Jeff King
2013-03-21 15:16   ` Erik Faye-Lund
2013-03-21 20:47   ` Jonathan Nieder
2013-03-24  7:17     ` Torsten Bögershausen
2013-03-21 11:13 ` [PATCH 4/4] transport: drop "int cmp = cmp" hack Jeff King
2013-03-21 20:59   ` Jonathan Nieder
2013-03-24  4:00   ` Junio C Hamano
2013-03-24  9:32     ` Jeff King
2013-03-24 14:54       ` Torsten Bögershausen
2013-03-25 19:50       ` Junio C Hamano
2013-03-25 21:06         ` Jeff King
2013-03-25 21:55           ` Junio C Hamano
2013-03-21 11:45 ` [PATCH 0/4] drop some "int x = x" hacks to silence gcc warnings Johannes Sixt
2013-03-21 11:55   ` Jeff King
2013-03-21 14:58     ` Junio C Hamano
2013-03-21 15:19       ` Junio C Hamano
2013-03-21 15:44         ` Jeff King
2013-03-21 15:44           ` [PATCH 5/4] fast-import: clarify "inline" logic in file_change_m Jeff King
2013-03-21 15:45           ` [PATCH 6/4] run-command: always set failed_errno in start_command Jeff King
2013-03-21 21:02           ` [PATCH 0/4] drop some "int x = x" hacks to silence gcc warnings Jonathan Nieder
2013-03-22 16:18           ` Jeff King
2013-03-22 16:19             ` Jeff King [this message]
2013-03-22 21:10               ` [PATCH 7/4] submodule: clarify logic in show_submodule_summary Junio C Hamano
2013-03-22 16:21             ` [PATCH 8/4] match-trees: drop "x = x" initializations Jeff King
2013-03-22 21:26               ` Junio C Hamano
2013-03-22 21:33                 ` Junio C Hamano
2013-03-22 21:36                   ` Jeff King
2013-03-23 18:57               ` René Scharfe
2013-03-24  4:55                 ` Junio C Hamano
2013-03-24 10:01                   ` Jeff King
2013-03-24 22:46                   ` René Scharfe
2013-03-25 16:10                     ` Junio C Hamano
2013-03-21 13:44   ` [PATCH 0/4] drop some "int x = x" hacks to silence gcc warnings Joachim Schmitz
2013-03-21 13:56     ` Joachim Schmitz

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=20130322161955.GA25857@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=j.sixt@viscovery.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).