From: Pablo Sabater <pabloosabaterr@gmail.com>
To: git@vger.kernel.org
Cc: christian.couder@gmail.com, karthik.188@gmail.com,
jltobler@gmail.com, ayu.chandekar@gmail.com,
siddharthasthana31@gmail.com, chandrapratap3519@gmail.com,
gitster@pobox.com, j6t@kdbg.org,
Pablo Sabater <pabloosabaterr@gmail.com>
Subject: [GSoC PATCH WIP RFC v3 0/3] graph: add --graph-lane-limit option
Date: Sun, 22 Mar 2026 20:54:03 +0100 [thread overview]
Message-ID: <20260322195406.108280-1-pabloosabaterr@gmail.com> (raw)
In-Reply-To: <20260317220929.120746-1-pabloosabaterr@gmail.com>
When viewing the history of a repository that has many branches, the graph output
can become very wide easily, making it difficult to read and sometimes pushing the
commit messages to the right and breaking the format.
Introduce --graph-lane-limit option to truncate the graph at n + 1/2 lanes (n lanes
plus the column between the lane and the truncation mark). Lanes over the limit
are replaced with '.' keeping the graph readable and shows all the information
about the visible lanes.
commit mark '*' is shown in two cases:
- When the commit lives on a visible lane.
- When the commit lives on the first hidden lane (n+1) this case instead of
'.' it will show '*' to show that there is a commit in the first hidden lane.
Any commit on deeper branches won't show any mark, but the commit subject will
still be shown.
Coming from graph_output_commit_line, merge-lanes with no relevant information
on the visible lanes (neither commit or parent lives on a visible lane) are
skipped making the graph more compact.
The original idea to limit columns was noted as a TODO in
c12172d2ea (Add history graph API, 2008-05-04), which mentions
gitk's behavior. This does not implement gitk-style column
rearrangement; it only truncates the visual output.
RFC and WIP:
1. On lane-limited graphs, there are collapsing, merge and padding lanes that don't
add any information to the graph.
- graph_output_collapsing_line mixes state handling and graph rendering, skipping
this function entirely, as is done with post-merge, would corrupt the mapping
so the function needs to be run but returning an empty buffer is not expected
by the callers and produces blank lanes.
- Suppressing redundant lanes like merges or collapses that come from graph_next_line().
graph_show_remainder() and graph_show_commit_msg() emits newlines hoping that
all lines will have content to print, returning an empty buffer to them
results in blank lines because of newlines being duplicated. graph_show_remainder
would be called from two places with different newlines needs, to make
this work graph_show_remainder() needs to be refactored. Doing this will result
in shorter graphs with less redundant lines on lane-limited graphs. Given that
the graph.c code is 17 years old is this desired ?
2. To keep the most information rendered on lane-limited graphs, collapsing and
merges are rendered as usual but when the collapse or merge to hidden lanes,
the information about from where and to where it goes it lost, are they still
useful ? if not, it could be desirable to remove them like in point 1.
Pablo Sabater (3):
graph: add --graph-lane-limit option
graph: truncate graph visual output
graph: add documentation and testing about --graph-lane-limit
Documentation/rev-list-options.adoc | 5 ++
graph.c | 130 ++++++++++++++++++++++++----
graph.h | 2 +
revision.c | 11 +++
revision.h | 1 +
t/t4215-log-skewed-merges.sh | 53 ++++++++++++
6 files changed, 185 insertions(+), 17 deletions(-)
base-commit: dc6ecd5354dca88d51b6d6562777fc8fc10d77e1
--
2.43.0
next prev parent reply other threads:[~2026-03-22 19:54 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 13:34 [GSoC RFC PATCH] graph: add --graph-max option to limit displayed columns Pablo Sabater
2026-03-16 17:04 ` Karthik Nayak
2026-03-16 19:48 ` Pablo
2026-03-17 22:09 ` [GSoC RFC PATCH v2] graph: add --max-columns " Pablo Sabater
2026-03-18 16:05 ` Junio C Hamano
2026-03-18 18:20 ` Pablo
2026-03-19 7:07 ` Johannes Sixt
2026-03-22 19:54 ` Pablo Sabater [this message]
2026-03-22 20:37 ` [GSoC PATCH WIP RFC v3 1/3] graph: add --graph-lane-limit option Pablo Sabater
2026-03-22 20:38 ` [GSoC PATCH WIP RFC v3 2/3] graph: truncate graph visual output Pablo Sabater
2026-03-22 20:38 ` [GSoC PATCH WIP RFC v3 3/3] graph: add documentation and testing about --graph-lane-limit Pablo Sabater
2026-03-22 22:09 ` [GSoC PATCH WIP RFC v3 1/3] graph: add --graph-lane-limit option Junio C Hamano
2026-03-23 2:33 ` Pablo
2026-03-23 21:59 ` [GSoC PATCH v4 0/3] " Pablo Sabater
2026-03-23 21:59 ` [GSoC PATCH v4 1/3] " Pablo Sabater
2026-03-25 7:02 ` SZEDER Gábor
2026-03-25 10:03 ` Johannes Sixt
2026-03-25 12:29 ` Pablo
2026-03-23 21:59 ` [GSoC PATCH v4 2/3] graph: truncate graph visual output Pablo Sabater
2026-03-25 10:04 ` Johannes Sixt
2026-03-25 11:19 ` Pablo
2026-03-23 21:59 ` [GSoC PATCH v4 3/3] graph: add documentation and tests about --graph-lane-limit Pablo Sabater
2026-03-25 10:07 ` Johannes Sixt
2026-03-25 11:49 ` Pablo
2026-03-25 10:02 ` [GSoC PATCH v4 0/3] graph: add --graph-lane-limit option Johannes Sixt
2026-03-25 12:28 ` Pablo
2026-03-25 17:44 ` Johannes Sixt
2026-03-25 17:58 ` Pablo
2026-03-25 17:43 ` [GSoC PATCH v5 0/2] " Pablo Sabater
2026-03-25 17:44 ` [GSoC PATCH v5 1/2] " Pablo Sabater
2026-03-25 22:11 ` Junio C Hamano
2026-03-27 14:22 ` Pablo
2026-03-27 16:07 ` Pablo
2026-03-27 16:34 ` Junio C Hamano
2026-03-25 17:44 ` [GSoC PATCH v5 2/2] graph: add documentation and tests about --graph-lane-limit Pablo Sabater
2026-03-28 0:11 ` [GSoC PATCH v6 0/3] graph: add --graph-lane-limit option Pablo Sabater
2026-03-28 0:11 ` [GSoC PATCH v6 1/3] graph: limit the graph width to a hard-coded max Pablo Sabater
2026-03-28 0:11 ` [GSoC PATCH v6 2/3] graph: add --graph-lane-limit option Pablo Sabater
2026-03-28 0:11 ` [GSoC PATCH v6 3/3] graph: add truncation mark to capped lanes Pablo Sabater
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=20260322195406.108280-1-pabloosabaterr@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=j6t@kdbg.org \
--cc=jltobler@gmail.com \
--cc=karthik.188@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox