All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pablo Sabater <pabloosabaterr@gmail.com>
To: pabloosabaterr@gmail.com
Cc: ayu.chandekar@gmail.com, chandrapratap3519@gmail.com,
	christian.couder@gmail.com, git@vger.kernel.org,
	gitster@pobox.com, jltobler@gmail.com, karthik.188@gmail.com,
	krka@spotify.com, mroik@delayed.space, peff@peff.net,
	phillip.wood@dunelm.org.uk, siddharthasthana31@gmail.com
Subject: [PATCH v12 0/7] graph: indent visual roots in graph
Date: Tue, 14 Jul 2026 14:09:31 +0200	[thread overview]
Message-ID: <20260714-ps-pre-commit-indent-v12-0-d50938e006df@gmail.com> (raw)
In-Reply-To: <20260713-ps-pre-commit-indent-v11-0-dcb65bc4ba99@gmail.com>

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: f60db8d575adb79761d363e026fb49bddf330c73

  parent reply	other threads:[~2026-07-14 12:09 UTC|newest]

Thread overview: 118+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-02 21:17 [GSoC RFC PATCH 0/1] graph: add indentation for commits preceded by a root Pablo Sabater
2026-04-02 21:17 ` [GSoC RFC PATCH 1/1] " Pablo Sabater
2026-04-03 17:55   ` Junio C Hamano
2026-04-03 18:07     ` Pablo
2026-04-03  5:04 ` [GSoC RFC PATCH 0/1] " Junio C Hamano
2026-04-03  8:25   ` Pablo
2026-04-04  9:24 ` [GSoC RFC PATCH v2 0/1] graph: add indentation for commits preceded by a parentless commit Pablo Sabater
2026-04-04  9:24   ` [GSoC RFC PATCH v2 1/1] " Pablo Sabater
2026-04-10 16:25   ` [GSoC RFC PATCH v2 0/1] " Pablo
2026-04-10 16:54     ` Junio C Hamano
2026-04-27 10:28   ` [GSoC PATCH v3 " Pablo Sabater
2026-04-27 10:28     ` [GSoC PATCH v3 1/1] " Pablo Sabater
2026-05-13 23:02       ` Jeff King
2026-05-14 10:19         ` Pablo Sabater
2026-04-27 10:35     ` [GSoC PATCH v3 0/1] " Pablo
2026-06-12 13:48     ` [PATCH v4 0/2] graph: indent visual roots in graph Pablo Sabater
2026-06-12 13:48       ` [PATCH v4 1/2] lib-log-graph: move check_graph function Pablo Sabater
2026-06-12 13:48       ` [PATCH v4 2/2] graph: indent visual root in graph Pablo Sabater
2026-06-13  3:01       ` [PATCH v4 0/2] graph: indent visual roots " Junio C Hamano
2026-06-13 19:09       ` [PATCH v5 " Pablo Sabater
2026-06-13 19:09         ` [PATCH v5 1/2] lib-log-graph: move check_graph function Pablo Sabater
2026-06-13 19:09         ` [PATCH v5 2/2] graph: indent visual root in graph Pablo Sabater
2026-06-14  4:05           ` Junio C Hamano
2026-06-14  5:28             ` Pablo Sabater
2026-06-15 15:42               ` Junio C Hamano
2026-06-16 13:06                 ` Pablo Sabater
2026-06-16 16:36                   ` Junio C Hamano
2026-06-17 20:27           ` Jeff King
2026-06-18 12:42             ` Pablo Sabater
2026-06-18 13:31               ` Junio C Hamano
2026-06-18 16:05               ` Jeff King
2026-06-18 16:07                 ` Jeff King
2026-06-19  7:34                 ` Kristofer Karlsson
2026-06-21 18:05                   ` Jeff King
2026-06-22  8:29                     ` Kristofer Karlsson
2026-06-17 10:33         ` [PATCH v5 0/2] graph: indent visual roots " Chandra Pratap
2026-06-20 10:11         ` [PATCH v6 0/3] " Pablo Sabater
2026-06-20 10:11           ` [PATCH v6 1/3] lib-log-graph: move check_graph function Pablo Sabater
2026-06-20 10:11           ` [PATCH v6 2/3] revision: add peek functions for lookahead Pablo Sabater
2026-06-20 10:18             ` Pablo Sabater
2026-06-20 14:56             ` Junio C Hamano
2026-06-20 15:15               ` Junio C Hamano
2026-06-21  1:48             ` Junio C Hamano
2026-06-21  6:42             ` Chandra Pratap
2026-06-22  8:28             ` Kristofer Karlsson
2026-06-29 21:56               ` Junio C Hamano
2026-06-29 23:29                 ` Pablo Sabater
2026-06-20 10:11           ` [PATCH v6 3/3] graph: indent visual root in graph Pablo Sabater
2026-07-04  8:52           ` [PATCH v7 0/3] graph: indent visual roots " Pablo Sabater
2026-07-04  8:52             ` [PATCH v7 1/3] lib-log-graph: move check_graph function Pablo Sabater
2026-07-04  8:52             ` [PATCH v7 2/3] graph: add a 2 commit buffer for lookahead Pablo Sabater
2026-07-06  9:49               ` Chandra Pratap
2026-07-06 13:44                 ` Kristofer Karlsson
2026-07-06 15:33                   ` Chandra Pratap
2026-07-07  6:31                     ` Pablo Sabater
2026-07-07 18:12                       ` Pablo Sabater
2026-07-04  8:52             ` [PATCH v7 3/3] graph: indent visual root in graph Pablo Sabater
2026-07-10 10:37             ` [PATCH v8 0/4] graph: indent visual roots " Pablo Sabater
2026-07-10 10:37               ` [PATCH v8 1/4] lib-log-graph: move check_graph function Pablo Sabater
2026-07-10 10:37               ` [PATCH v8 2/4] revision: add next_commit_to_show() Pablo Sabater
2026-07-10 10:37               ` [PATCH v8 3/4] graph: add a 2 commit buffer for lookahead Pablo Sabater
2026-07-10 10:37               ` [PATCH v8 4/4] graph: indent visual root in graph Pablo Sabater
2026-07-10 18:07                 ` Mirko Faina
2026-07-10 20:29                   ` Pablo Sabater
2026-07-11 13:37               ` [PATCH v9 0/4] graph: indent visual roots " Pablo Sabater
2026-07-11 13:37                 ` [PATCH v9 1/4] lib-log-graph: move check_graph function Pablo Sabater
2026-07-11 13:37                 ` [PATCH v9 2/4] revision: add next_commit_to_show() Pablo Sabater
2026-07-11 13:37                 ` [PATCH v9 3/4] graph: add a 2 commit buffer for lookahead Pablo Sabater
2026-07-11 13:37                 ` [PATCH v9 4/4] graph: indent visual root in graph Pablo Sabater
2026-07-11 14:15                 ` [PATCH v9 0/4] graph: indent visual roots " Mirko Faina
2026-07-11 15:41                   ` Pablo Sabater
2026-07-11 16:25                     ` Mirko Faina
2026-07-12  5:56                       ` Chandra Pratap
2026-07-12 13:10                         ` Mirko Faina
2026-07-12 13:12                           ` Mirko Faina
2026-07-12 16:59                           ` Pablo Sabater
2026-07-12 19:33                             ` Mirko Faina
2026-07-13  7:41                             ` Chandra Pratap
2026-07-13 10:44                 ` [PATCH v10 0/7] " Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 1/7] lib-log-graph: move check_graph function Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 2/7] revision: add next_commit_to_show() Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 3/7] graph: add a 2 commit buffer for lookahead Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 4/7] graph: indent visual root in graph Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 5/7] graph: wrap cascading commits after 4 columns Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 6/7] graph: move config reading into graph_read_config() Pablo Sabater
2026-07-13 10:44                   ` [PATCH v10 7/7] graph: add --[no-]graph-indent and log.graphIndent Pablo Sabater
2026-07-13 14:06                     ` Mirko Faina
2026-07-13 16:16                       ` Pablo Sabater
2026-07-13 16:43                   ` [PATCH v11 0/7] graph: indent visual roots in graph Pablo Sabater
2026-07-13 16:43                     ` [PATCH v11 1/7] lib-log-graph: move check_graph function Pablo Sabater
2026-07-13 16:43                     ` [PATCH v11 2/7] revision: add next_commit_to_show() Pablo Sabater
2026-07-13 16:44                     ` [PATCH v11 3/7] graph: add a 2 commit buffer for lookahead Pablo Sabater
2026-07-13 16:44                     ` [PATCH v11 4/7] graph: indent visual root in graph Pablo Sabater
2026-07-13 16:44                     ` [PATCH v11 5/7] graph: wrap cascading commits after 4 columns Pablo Sabater
2026-07-13 16:44                     ` [PATCH v11 6/7] graph: move config reading into graph_read_config() Pablo Sabater
2026-07-13 16:44                     ` [PATCH v11 7/7] graph: add --[no-]graph-indent and log.graphIndent Pablo Sabater
2026-07-14 10:19                       ` Chandra Pratap
2026-07-14 11:47                         ` Pablo Sabater
2026-07-13 20:28                     ` [PATCH v11 0/7] graph: indent visual roots in graph Junio C Hamano
2026-07-13 20:51                       ` Pablo Sabater
2026-07-14 12:09                     ` Pablo Sabater [this message]
2026-07-14 12:09                       ` [PATCH v12 1/7] lib-log-graph: move check_graph function Pablo Sabater
2026-07-14 12:09                       ` [PATCH v12 2/7] revision: add next_commit_to_show() Pablo Sabater
2026-07-14 12:09                       ` [PATCH v12 3/7] graph: add a 2 commit buffer for lookahead Pablo Sabater
2026-07-14 12:09                       ` [PATCH v12 4/7] graph: indent visual root in graph Pablo Sabater
2026-07-14 12:09                       ` [PATCH v12 5/7] graph: wrap cascading commits after 4 columns Pablo Sabater
2026-07-14 12:09                       ` [PATCH v12 6/7] graph: move config reading into graph_read_config() Pablo Sabater
2026-07-14 12:09                       ` [PATCH v12 7/7] graph: add --[no-]graph-indent and log.graphIndent Pablo Sabater
2026-05-14 15:15 ` [GSoC RFC PATCH 0/1] graph: add indentation for commits preceded by a root Phillip Wood
2026-05-14 17:45   ` Pablo Sabater
2026-05-15  9:33     ` Phillip Wood
2026-05-17  6:31       ` Chandra Pratap
2026-05-18 13:26         ` Pablo Sabater
2026-05-19  0:03           ` Junio C Hamano
2026-05-19  5:59             ` Pablo Sabater
2026-06-10 15:21               ` Junio C Hamano
2026-06-10 15:28                 ` Pablo Sabater
2026-05-19 10:39           ` Chandra Pratap

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=20260714-ps-pre-commit-indent-v12-0-d50938e006df@gmail.com \
    --to=pabloosabaterr@gmail.com \
    --cc=ayu.chandekar@gmail.com \
    --cc=chandrapratap3519@gmail.com \
    --cc=christian.couder@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jltobler@gmail.com \
    --cc=karthik.188@gmail.com \
    --cc=krka@spotify.com \
    --cc=mroik@delayed.space \
    --cc=peff@peff.net \
    --cc=phillip.wood@dunelm.org.uk \
    --cc=siddharthasthana31@gmail.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.