Thread (114 messages) 114 messages, 7 authors, 10d ago
COOLING10d
Revisions (9)
  1. v4 [diff vs current]
  2. v5 [diff vs current]
  3. v6 [diff vs current]
  4. v7 [diff vs current]
  5. v8 [diff vs current]
  6. v9 [diff vs current]
  7. v10 [diff vs current]
  8. v11 current
  9. v12 [diff vs current]

[PATCH v11 0/7] graph: indent visual roots in graph

From: Pablo Sabater <hidden>
Date: 2026-07-13 16:44:09

When rendering a graph, if the history contains multiple "visual roots",
actual roots or commits that look like roots (i.e. have their parents
filtered out) can end up being vertically adjacent to unrelated commits,
falsely appearing to be related.

A fix for this issue was already attempted [1] a while ago.

This series adds indentation to the visual root commits, so they cannot be
vertically adjacent anymore making it easier to identify them.

Before indentation:

	* A
	* B1
	* B2
	* C1
	* C2

After indentation:

	  * A
	* B1
	 \
	  * B2
	* C1
	* C2

Indents the visual root commits that have still commits to show after
them, and if they have children it connects them with an edge at a new
row.

If there are multiple visual roots adjacent in history, the indentation
starts with the second one, avoiding redundant indentation of the first
one and cascades after the second.

	* A
	  * B
	    * C
	      * D
	* E
	  * F
	    * G
	      * H
	  * I
	* J1
	* J2

The indentation wraps after cascading columns and when wrapping back to
the initial column if the next commit is a non-visual-root commit, force
the indentation one extra level.

Series explanation:

- Cleanup to bring a common function from t4215 and t6016 that will be
  used in t4218.

- Logic extraction of the chose of from where the commit source comes
  from.

- Add a buffer for lookahead purposes.

- Principal commit. Implement the logic to get the visual roots
  indented.

- Make visual root cascading wrap after 4 columns

- Add --[no-]graph-indent and log.graphIndent options.

GitHub CI: https://github.com/pabloosabaterr/git/actions/runs/29266560903

[1]: https://lore.kernel.org/git/xmqqwnwajbuj.fsf@gitster.c.googlers.com/ (local)

V9 DIFF:

- Changed boolean variables to be bit fields.

Signed-off-by: Pablo Sabater <redacted>
---
Pablo Sabater (7):
      lib-log-graph: move check_graph function
      revision: add next_commit_to_show()
      graph: add a 2 commit buffer for lookahead
      graph: indent visual root in graph
      graph: wrap cascading commits after 4 columns
      graph: move config reading into graph_read_config()
      graph: add --[no-]graph-indent and log.graphIndent

 Documentation/config/log.adoc              |   4 +
 Documentation/rev-list-options.adoc        |   8 +
 graph.c                                    | 332 +++++++++++++++-
 graph.h                                    |  17 +
 revision.c                                 |  57 ++-
 revision.h                                 |   2 +
 t/lib-log-graph.sh                         |   5 +
 t/meson.build                              |   1 +
 t/t4215-log-skewed-merges.sh               |  33 +-
 t/t4218-log-graph-indentation.sh           | 595 +++++++++++++++++++++++++++++
 t/t6016-rev-list-graph-simplify-history.sh |  25 +-
 11 files changed, 1031 insertions(+), 48 deletions(-)

Range-diff versus v10:

1:  9541b410b7 = 1:  dd0bb0d215 lib-log-graph: move check_graph function
2:  4f8fb2cc1d = 2:  07e239533d revision: add next_commit_to_show()
3:  b50574bbe1 = 3:  4d71f674a1 graph: add a 2 commit buffer for lookahead
4:  fc3a8253fd = 4:  48ad2562f0 graph: indent visual root in graph
5:  204aae5061 = 5:  45be69d11b graph: wrap cascading commits after 4 columns
6:  1b42ed86a1 = 6:  8ce53ae21b graph: move config reading into graph_read_config()
7:  737331b68d ! 7:  c1fa81022e graph: add --[no-]graph-indent and log.graphIndent
    @@ revision.h: struct rev_info {
      	/* Display history graph */
      	struct git_graph *graph;
      	int graph_max_lanes;
    -+	int no_graph_indent;
    -+	unsigned int graph_indent_set;
    ++	unsigned int no_graph_indent:1;
    ++	unsigned int graph_indent_set:1;

      	/* special limits */
      	int skip_count;

---
base-commit: f60db8d575adb79761d363e026fb49bddf330c73
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help