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 v4 0/3] graph: add --graph-lane-limit option
Date: Mon, 23 Mar 2026 22:59:32 +0100 [thread overview]
Message-ID: <20260323215935.74486-1-pabloosabaterr@gmail.com> (raw)
In-Reply-To: <20260322195406.108280-1-pabloosabaterr@gmail.com>
Repositories that have many active branches at the same time produce
wide graphs. A lane consists of two columns, the edge and the space
padding, each branch takes a lane in the graph and there is no way
to limit how many can be shown.
Add '--graph-lane-limit=<n>' option that caps the visible lanes to n. Lanes over
this limit are replaced with '.' truncation mark.
The '*' commit mark is visible when it lives on a visible lane or the first
hidden lane, any deeper lane doesn't show the commit mark but keeps the commit
message visible.
Merges where neither the commit nor its parents live on a visible lane are skipped
because they dont carry any visible information.
The original idea to limit columns was noted as a TODO in c12172d2ea
(Add history graph API, 2008-05-04). This does not implement
gitk-style column rearrangement, it only truncates the visual output.
Possible future improvements:
- When all branches involved in collapsing or padding are over the limit, the
truncated lane doesn't show any information, this lane could be removed to
make the graph more compact. Currently these lanes still appear because
graph_output_collapsing_line() mixes state handling with rendering, so it can't
be skipped but callers always expect a non empty buffer. Fixing it would need
to refactor the callers to handle empty buffers instead of expecting them to
always have content.
- Collapsing and merges lanes that start on visible lanes but end on hidden ones
are kept to maintain the most information possible on the visible lanes, but
the information about where they go is lost. They can be kept, removed or think
of a way to show that information without showing the lanes.
Changes since v3:
- Rewrote commit messages to focus on reasoning rather than the
implementation details.
- Changed graph_max_lanes to int for consistency with other
rev_info fields like max_count.
- Zero and negative values are now accepted and silently treated
as "no limit", following what --max-parents does with negative values.
- Removed the MINIMUM_GRAPH_COLUMNS macro.
- Fixed missing "--" prefix in the documentation.
Pablo Sabater (3):
graph: add --graph-lane-limit option
graph: truncate graph visual output
graph: add documentation and tests about --graph-lane-limit
Documentation/rev-list-options.adoc | 5 ++
graph.c | 131 ++++++++++++++++++++++++----
revision.c | 6 ++
revision.h | 1 +
t/t4215-log-skewed-merges.sh | 53 +++++++++++
5 files changed, 180 insertions(+), 16 deletions(-)
base-commit: dc6ecd5354dca88d51b6d6562777fc8fc10d77e1
--
2.43.0
next prev parent reply other threads:[~2026-03-23 21:59 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 ` [GSoC PATCH WIP RFC v3 0/3] graph: add --graph-lane-limit option Pablo Sabater
2026-03-22 20:37 ` [GSoC PATCH WIP RFC v3 1/3] " 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 ` Pablo Sabater [this message]
2026-03-23 21:59 ` [GSoC PATCH v4 " 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=20260323215935.74486-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