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

Re: [PATCH] graph API: fix bug in graph_is_interesting()

From
ASAdam Simpkins <simpkins@facebook.com>
Date
Aug 19, 2009, 02:34 UTC
Message-ID
<20090819023433.GP8147@facebook.com>
In-Reply-To
<20090819022918.GO8147@facebook.com>

Previously, graph_is_interesting() did not behave quite the same way as the code in get_revision(). As a result, it would sometimes think commits were uninteresting, even though get_revision() would return them. This resulted in incorrect lines in the graph output.

This change creates a get_commit_action() function, which graph_is_interesting() and simplify_commit() both now use to determine if a commit will be shown. It is identical to the old simplify_commit() behavior, except that it never calls rewrite_parents().

This problem was reported by Santi Béjar. The following command would exhibit the problem before, but now works correctly:

  git log --graph --simplify-by-decoration --oneline v1.6.3.3

Previously git graph did not display the output for this command correctly between f29ac4f and 66996ec, among other places.

Signed-off-by: Adam Simpkins <simpkins@facebook.com>
---
 graph.c    |    5 +++--
 revision.c |   15 ++++++++++++---
 revision.h |    1 +
 3 files changed, 16 insertions(+), 5 deletions(-)
diff --git a/graph.c b/graph.c
index e466770..9087f65 100644
--- a/graph.c
+++ b/graph.c
@@ -286,9 +286,10 @@ static int graph_is_interesting(struct git_graph *graph, struct commit *commit)
 	}
 
 	/*
-	 * Uninteresting and pruned commits won't be printed
+	 * Otherwise, use get_commit_action() to see if this commit is
+	 * interesting
 	 */
-	return (commit->object.flags & (UNINTERESTING | TREESAME)) ? 0 : 1;
+	return get_commit_action(graph->revs, commit) == commit_show;
 }
 
 static struct commit_list *next_interesting_parent(struct git_graph *graph,
diff --git a/revision.c b/revision.c
index 8ffb661..fe7d522 100644
--- a/revision.c
+++ b/revision.c
@@ -1664,7 +1664,7 @@ static inline int want_ancestry(struct rev_info *revs)
 	return (revs->rewrite_parents || revs->children.name);
 }
 
-enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit)
+enum commit_action get_commit_action(struct rev_info *revs, struct commit *commit)
 {
 	if (commit->object.flags & SHOWN)
 		return commit_ignore;
@@ -1692,12 +1692,21 @@ enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit)
 			if (!commit->parents || !commit->parents->next)
 				return commit_ignore;
 		}
-		if (want_ancestry(revs) && rewrite_parents(revs, commit) < 0)
-			return commit_error;
 	}
 	return commit_show;
 }
 
+enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit)
+{
+	enum commit_action action = get_commit_action(revs, commit);
+
+	if (action == commit_show && revs->prune && revs->dense && want_ancestry(revs)) {
+		if (rewrite_parents(revs, commit) < 0)
+			return commit_error;
+	}
+	return action;
+}
+
 static struct commit *get_revision_1(struct rev_info *revs)
 {
 	if (!revs->commits)
diff --git a/revision.h b/revision.h
index b10984b..9d0dddb 100644
--- a/revision.h
+++ b/revision.h
@@ -168,6 +168,7 @@ enum commit_action {
 	commit_error
 };
 
+extern enum commit_action get_commit_action(struct rev_info *revs, struct commit *commit);
 extern enum commit_action simplify_commit(struct rev_info *revs, struct commit *commit);
 
 #endif
-- 
1.6.4.314.g0a482.dirty
Previous: Adam SimpkinsNext: Junio C Hamano
Message 5 of 14 in “RE: interaction between --graph and --simplify-by-decoration”
  1. Adam SimpkinsAug 18, 2009
  2. graph API: fix bug in graph_is_interesting()Adam Simpkins, Aug 18, 2009
  3. Junio C HamanoAug 18, 2009
  4. Adam SimpkinsAug 19, 2009
  5. Adam SimpkinsAug 19, 2009
  6. Junio C HamanoAug 19, 2009
  7. Junio C HamanoAug 19, 2009
  8. Adam SimpkinsAug 19, 2009
  9. Add test case for rev-list --parents --show-allAdam Simpkins, Aug 19, 2009
  10. Junio C HamanoAug 20, 2009
  11. Add tests for rev-list --graph with options that simplify historyAdam Simpkins, Aug 21, 2009
  12. Junio C HamanoAug 21, 2009
  13. Adam SimpkinsAug 21, 2009
  14. Santi BéjarAug 21, 2009

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.