Subject: Re: [GSoC PATCH v6 0/3] graph: add --graph-lane-limit option

From: Junio C Hamano <[email-masked]>
Date: Wed, 01 Apr 2026 09:49:46 -0700

Pablo <[email-masked]> writes:

> While working on this I spent most of the time with graph.c and
> I got to understand well how the rendering engine works. I think
> I have an idea about how to tackle the column rearrangement
> like gitk, which I believe is what you thought it was about at the
> start (and the
> TODO that's been on graph.c for 16 years c12172d2ea).
>
> FWIW, I'd like to send an RFC about the column rearrangement
> because it would be better overall, no information is lost, you can
> still limit the number of visible columns which would replace this
> in most cases (only scenario I can think of where you still
> want to keep the truncation would be if you want to keep the
> branches going straight vertically).
>
> I'd like to hold this series and send the RFC with the idea for the
> rearrangement. If it ends up not being viable I would come back
> here and add a 4th patch to remove the extra padding lines
> (merge and collapsing lines truncated) to make it more useful
> making the graph more compact vertically as well.

Oh, I may have found a volunteer to fix one of my pet peeves ;-)

Imagine a history with multiple root commits and you are drawing the
history near one of the roots.  Immediately fater pacing that root
commit, the graphing engine seems to say "ah, the next display row
immediately below this commit '*' is vacant because it does not have
any parent.  We can draw a commit right there" and draws a commit
that is unrelated to that root commit it just has drawn.

Which of course makes it impossible to tell that the commit on the
earlier row is a root, if we draw a commit immediately below it.
We'd want to leave that column/lane open for at least one row.

Instead of 

    * a child of the root commit below
    * one of the root commits
    * an unrelated commit X
    * the parent of X
    * the other root commit that is a grandparent of X

we could probably draw

    * a child of the root commit below
    * one of the root commits
      * an unrelated commit X
     /
    * the parent of X
    * the other root commit that is a grandparent of X

or you or somebody who stared at the graph engine much longer than I
have may have even better ideas to draw such a history.