Re: [PATCH v12 0/7] graph: indent visual roots in graph
- From
- Chandra Pratap <chandrapratap3519@gmail.com>
- Date
- Jul 15, 2026, 08:59 UTC
- Message-ID
- <CA+J6zkQNzEAhhY74qDrOwfFVrshEF7YFxWRRkwE3ttJo15ZbAg@mail.gmail.com>
- In-Reply-To
- <20260714-ps-pre-commit-indent-v12-0-d50938e006df@gmail.com>
On Tue, 14 Jul 2026 at 17:39, Pablo Sabater <pabloosabaterr@gmail.com> wrote:
Show 145 quoted lines
>
> 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:
>
> 1. Cleanup to bring a common function from t4215 and t6016 that will be
> used in t4218.
>
> 2. Logic extraction of the chose of from where the commit source comes
> from.
>
> 3. Add a buffer for lookahead purposes.
>
> 4. Principal commit. Implement the logic to get the visual roots
> indented.
>
> 5. Make visual root cascading wrap after 4 columns
>
> 6. Add --[no-]graph-indent and log.graphIndent options.
>
> GitHub CI: https://github.com/pabloosabaterr/git/actions/runs/29331144667
>
> [1]: https://lore.kernel.org/git/xmqqwnwajbuj.fsf@gitster.c.googlers.com/
>
> V11 DIFF:
>
> - Changed the check that required graph, to not confuse because it is a
> boolean value.
>
> - Typos
>
> Signed-off-by: Pablo Sabater <pabloosabaterr@gmail.com>
> ---
> 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 | 596 +++++++++++++++++++++++++++++
> t/t6016-rev-list-graph-simplify-history.sh | 25 +-
> 11 files changed, 1032 insertions(+), 48 deletions(-)
>
> Range-diff versus v11:
>
> 1: dd0bb0d215 = 1: d754392142 lib-log-graph: move check_graph function
> 2: 07e239533d = 2: c93c2c0771 revision: add next_commit_to_show()
> 3: 4d71f674a1 = 3: 70fe612ae1 graph: add a 2 commit buffer for lookahead
> 4: 48ad2562f0 = 4: e1ac06c4ea graph: indent visual root in graph
> 5: 45be69d11b = 5: ce52b41527 graph: wrap cascading commits after 4 columns
> 6: 8ce53ae21b = 6: 9b7bb2cebc graph: move config reading into graph_read_config()
> 7: c1fa81022e ! 7: 13e830725f graph: add --[no-]graph-indent and log.graphIndent
> @@ Documentation/rev-list-options.adoc: This implies the `--topo-order` option by d
> + When used with `--graph`, indent visual roots (commits with no parents
> + or whose parents are not shown) to differentiate them from commits that
> + are vertically adjacent but unrelated. Enabled by default. Use
> -+ `--no-graph-indent` to disable or set `graph.indent` to set a deafault
> -+ preference.
> ++ `--no-graph-indent` to disable or set `log.graphIndent` to set a
> ++ default preference.
> +
> ifdef::git-rev-list[]
> `--count`::
> @@ revision.c: int setup_revisions(int argc, const char **argv, struct rev_info *re
> if (revs->graph_max_lanes > 0 && !revs->graph)
> die(_("the option '%s' requires '%s'"), "--graph-lane-limit", "--graph");
>
> -+ if (revs->graph_indent_set > 0 && !revs->graph)
> ++ if (revs->graph_indent_set && !revs->graph)
> + die(_("the option '%s' requires '%s'"), "--[no-]graph-indent", "--graph");
> +
> if (!revs->reflog_info && revs->grep_filter.use_reflog_filter)
> @@ t/t4218-log-graph-indentation.sh: test_expect_success 'visual root cascading get
> + EOF
> +'
> +
> -+# graph.indent true and no --option is the default state.
> ++# log.graphIndent unset and no --option (which activates graph indentation) is
> ++# the default state.
> +
> test_done
>
> ---
> base-commit: f60db8d575adb79761d363e026fb49bddf330c73This version looks fine to me.
Thanks, Chandra.