From: Junio C Hamano <gitster@pobox.com>
To: Pablo Sabater <pabloosabaterr@gmail.com>
Cc: git@vger.kernel.org, christian.couder@gmail.com,
karthik.188@gmail.com, jltobler@gmail.com,
ayu.chandekar@gmail.com, siddharthasthana31@gmail.com,
chandrapratap3519@gmail.com, j6t@kdbg.org,
szeder.dev@gmail.com
Subject: Re: [GSoC PATCH v5 1/2] graph: add --graph-lane-limit option
Date: Wed, 25 Mar 2026 15:11:57 -0700 [thread overview]
Message-ID: <xmqqh5q3sgnm.fsf@gitster.g> (raw)
In-Reply-To: <20260325174401.217577-2-pabloosabaterr@gmail.com> (Pablo Sabater's message of "Wed, 25 Mar 2026 18:44:00 +0100")
Pablo Sabater <pabloosabaterr@gmail.com> writes:
> +static int graph_needs_truncation(struct git_graph *graph, int lane)
> +{
> + int max = graph->revs->graph_max_lanes;
> + /*
> + * Ignore values <= 0, meaning no limit.
> + */
> + return max > 0 && lane >= max;
> +}
Make a mental note that this helper function works on number of
lanes, not display columns (which is roughly twice the number of
lanes).
> @@ -696,6 +705,18 @@ static void graph_update_columns(struct git_graph *graph)
> }
> }
>
> + /*
> + * If graph_max_lanes is set, cap the padding from the branches
> + */
> + if (graph->revs->graph_max_lanes > 0) {
> + /*
> + * width of "| " per lanes plus truncation mark "~ ".
> + */
> + int max_columns_width = graph->revs->graph_max_lanes * 2 + 2;
> + if (graph->width > max_columns_width)
> + graph->width = max_columns_width;
> + }
> +
> /*
> * Shrink mapping_size to be the minimum necessary
> */
> @@ -846,6 +867,10 @@ static void graph_output_padding_line(struct git_graph *graph,
> * Output a padding row, that leaves all branch lines unchanged
> */
> for (i = 0; i < graph->num_new_columns; i++) {
> + if (graph_needs_truncation(graph, i)) {
> + graph_line_addstr(line, "~ ");
> + break;
> + }
And that mental note helps to convince us this loop makes sense, as
it increments 'i' one by one ;-)
> @@ -903,6 +928,9 @@ static void graph_output_pre_commit_line(struct git_graph *graph,
> seen_this = 1;
> graph_line_write_column(line, col, '|');
> graph_line_addchars(line, ' ', graph->expansion_row);
> + } else if (seen_this && graph_needs_truncation(graph, i)) {
> + graph_line_addstr(line, "~ ");
> + break;
> } else if (seen_this && (graph->expansion_row == 0)) {
> /*
> * This is the first line of the pre-commit output.
> @@ -994,6 +1022,12 @@ static void graph_draw_octopus_merge(struct git_graph *graph, struct graph_line
> col = &graph->new_columns[j];
>
> graph_line_write_column(line, col, '-');
And here, 'j' comes from graph->mapping[] array. Does that count in
display columns or lanes?
> + if (graph_needs_truncation(graph, j / 2 + i)) {
This makes it look as if 'j' counts in columns and needs to be
divided by 2 to make it comparable to lanes.
> + graph_line_addstr(line, "~ ");
> + break;
> + }
> +
> graph_line_write_column(line, col, (i == dashed_parents - 1) ? '.' : '-');
> }
>
> + if (graph->num_parents > 1) {
> + if (!graph_needs_truncation(graph, graph->commit_index)) {
> + graph_update_state(graph, GRAPH_POST_MERGE);
> + } else {
> + struct commit_list *first_parent = first_interesting_parent(graph);
> + int first_parent_col = graph_find_new_column_by_commit(graph, first_parent->item);
Are we sure that first_interesting_parent() will always give us a
non-NULL pointer?
Can we use a bit shorter identifier names to deal with these overly
long lines? The lifetime of these two variables is very short so they
do not have to be so descriptive.
struct commit *p = first_interesting_parent(graph)->item;
int lane = graph_find_new_column_by_commit(graph, p);
> + if (!graph_needs_truncation(graph, first_parent_col))
> + graph_update_state(graph, GRAPH_POST_MERGE);
> + else if (graph_is_mapping_correct(graph))
> + graph_update_state(graph, GRAPH_PADDING);
> + else
> + graph_update_state(graph, GRAPH_COLLAPSING);
> + }
> + } else if (graph_is_mapping_correct(graph))
next prev parent reply other threads:[~2026-03-25 22:11 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 ` [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 [this message]
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=xmqqh5q3sgnm.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=ayu.chandekar@gmail.com \
--cc=chandrapratap3519@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=jltobler@gmail.com \
--cc=karthik.188@gmail.com \
--cc=pabloosabaterr@gmail.com \
--cc=siddharthasthana31@gmail.com \
--cc=szeder.dev@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