git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC/PATCH] commit-graph: verify swapped zero/non-zero generation cases
@ 2023-08-08 19:15 Jeff King
  2023-08-10 16:00 ` Taylor Blau
  0 siblings, 1 reply; 30+ messages in thread
From: Jeff King @ 2023-08-08 19:15 UTC (permalink / raw)
  To: git; +Cc: Derrick Stolee

In verify_one_commit_graph(), we have code that complains when a commit
is found with a generation number of zero, and then later with a
non-zero number. It works like this:

  1. When we see an entry with generation zero, we set the
     generation_zero flag to GENERATION_ZERO_EXISTS.

  2. When we later see an entry with a non-zero generation, we complain
     if the flag is GENERATION_ZERO_EXISTS.

There's a matching GENERATION_NUMBER_EXISTS value, which in theory would
be used to find the case that we see the entries in the opposite order:

  1. When we see an entry with a non-zero generation, we set the
     generation_zero flag to GENERATION_NUMBER_EXISTS.

  2. When we later see an entry with a zero generation, we complain if
     the flag is GENERATION_NUMBER_EXISTS.

But that doesn't work; step 2 is implemented, but there is no step 1. We
never use NUMBER_EXISTS at all, and Coverity rightly complains that step
2 is dead code.

We can fix that by implementing that step 1.

Signed-off-by: Jeff King <peff@peff.net>
---
This is marked as RFC because I'm still confused about a lot of things.
For one, my explanation above about what the code is doing is mostly a
guess. It _looks_ to me like that's what the existing check is trying to
do. But if so, then why is the generation_zero flag defined outside the
loop over each object? I'd think it would be a per-object thing.

Likewise, just below this code, we check:

                if (generation_zero == GENERATION_ZERO_EXISTS)
                        continue;

Is the intent here "if this is the zero-th generation, we can skip the
rest of the loop because there are no more parents to look at"? If so,
then would it make more sense to check commit_graph_generation()
directly? I took care to preserve the existing behavior by pushing the
set of NUMBER_EXISTS into an "else", but it seems like a weird use of
the flag to me.

So I kind of wonder if there's something I'm not getting here. Coverity
is definitely right that our "step 2" is dead code (because we never set
NUMBER_EXISTS). But I'm not sure if we should be deleting it, or trying
to fix an underlying bug.

 commit-graph.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/commit-graph.c b/commit-graph.c
index 0aa1640d15..40cd55eb15 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -2676,9 +2676,13 @@ static int verify_one_commit_graph(struct repository *r,
 				graph_report(_("commit-graph has generation number zero for commit %s, but non-zero elsewhere"),
 					     oid_to_hex(&cur_oid));
 			generation_zero = GENERATION_ZERO_EXISTS;
-		} else if (generation_zero == GENERATION_ZERO_EXISTS)
-			graph_report(_("commit-graph has non-zero generation number for commit %s, but zero elsewhere"),
+		} else {
+			if (generation_zero == GENERATION_ZERO_EXISTS)
+				graph_report(_("commit-graph has non-zero generation number for commit %s, but zero elsewhere"),
 				     oid_to_hex(&cur_oid));
+			else
+				generation_zero = GENERATION_NUMBER_EXISTS;
+		}
 
 		if (generation_zero == GENERATION_ZERO_EXISTS)
 			continue;
-- 
2.42.0.rc0.376.g66bfc4f195

^ permalink raw reply related	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2023-08-23 20:00 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-08 19:15 [RFC/PATCH] commit-graph: verify swapped zero/non-zero generation cases Jeff King
2023-08-10 16:00 ` Taylor Blau
2023-08-10 17:44   ` Taylor Blau
2023-08-10 20:37     ` [PATCH 0/4] commit-graph: fsck zero/non-zero generation number fixes Taylor Blau
2023-08-10 20:37       ` [PATCH 1/4] commit-graph: introduce `commit_graph_generation_from_graph()` Taylor Blau
2023-08-10 20:37       ` [PATCH 2/4] commit-graph: verify swapped zero/non-zero generation cases Taylor Blau
2023-08-10 21:36         ` Junio C Hamano
2023-08-11 15:01           ` Jeff King
2023-08-11 17:08             ` Taylor Blau
2023-08-10 20:37       ` [PATCH 3/4] t/t5318-commit-graph.sh: test generation zero transitions during fsck Taylor Blau
2023-08-10 20:37       ` [PATCH 4/4] commit-graph: invert negated conditional Taylor Blau
2023-08-11 15:02       ` [PATCH 0/4] commit-graph: fsck zero/non-zero generation number fixes Jeff King
2023-08-11 17:05     ` [PATCH v2 0/5] " Taylor Blau
2023-08-11 17:05       ` [PATCH v2 1/5] commit-graph: introduce `commit_graph_generation_from_graph()` Taylor Blau
2023-08-11 17:05       ` [PATCH v2 2/5] commit-graph: verify swapped zero/non-zero generation cases Taylor Blau
2023-08-11 17:05       ` [PATCH v2 3/5] t/t5318-commit-graph.sh: test generation zero transitions during fsck Taylor Blau
2023-08-11 17:05       ` [PATCH v2 4/5] commit-graph: invert negated conditional, extract to function Taylor Blau
2023-08-11 17:05       ` [PATCH v2 5/5] commit-graph: avoid repeated mixed generation number warnings Taylor Blau
2023-08-11 17:58       ` [PATCH v2 0/5] commit-graph: fsck zero/non-zero generation number fixes Jeff King
2023-08-11 19:28         ` Junio C Hamano
2023-08-17 19:51           ` Jeff King
2023-08-21 21:25             ` Taylor Blau
2023-08-21 21:34     ` [PATCH v3 0/4] " Taylor Blau
2023-08-21 21:34       ` [PATCH v3 1/4] commit-graph: introduce `commit_graph_generation_from_graph()` Taylor Blau
2023-08-21 21:34       ` [PATCH v3 2/4] commit-graph: verify swapped zero/non-zero generation cases Taylor Blau
2023-08-21 21:34       ` [PATCH v3 3/4] t/t5318-commit-graph.sh: test generation zero transitions during fsck Taylor Blau
2023-08-21 21:34       ` [PATCH v3 4/4] commit-graph: commit-graph: avoid repeated mixed generation number warnings Taylor Blau
2023-08-21 21:55       ` [PATCH v3 0/4] commit-graph: fsck zero/non-zero generation number fixes Jeff King
2023-08-21 23:22         ` Junio C Hamano
2023-08-23 19:59           ` Taylor Blau

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).