From: Junio C Hamano <gitster@pobox.com>
To: Kyle Marek <kmarek@pdinc.us>
Cc: Jason Pyeron <jpyeron@pdinc.us>,
git@vger.kernel.org,
Philippe Blain <levraiphilippeblain@gmail.com>
Subject: Re: [PATCH 1/2] revision: Denote root commits with '#'
Date: Mon, 18 Jan 2021 11:15:16 -0800 [thread overview]
Message-ID: <xmqqwnwajbuj.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <e0264a29-2112-f8c8-f066-2be445654d8e@pdinc.us> (Kyle Marek's message of "Mon, 18 Jan 2021 02:56:22 -0500")
Kyle Marek <kmarek@pdinc.us> writes:
> I'll investigate the revision-mark shifting idea. I am concerned that
> it would get complicated if a graph edge extends around a revision
> that needs to be shifted,...
The "current graph layout makes it harder to see where the root is"
problem has a natural solution: fix the graph layout so that the
root is easily visible.
I however think it is a much harder approach to solve than using a
different mark for root commits, and it is the reason why there have
been at least a few attempts in the past that did essentially the
same patch as yours, plus the "linear break" which we accepted.
> * 8d82d0a (HEAD -> master) Merge branch 'o1'
> |\
> | * 3479914 (o1) O1
> | * a674e07 O1 <-- root commit
> | * 2237b52 (t) T
> | * f525fa5 T
> |/
> * f15f936 A
> | * 9e289ed (u) U
> |/
> * ee911c8 initial <-- root commit
>
> vs:
>
> * 8ee9b14 (HEAD -> master) Merge branch 'u'
> |\
> | * ed1990f (u) U
> * | 277f31c Merge branch 'o1'
> |\ \
> | * | eaa71bb (o1) O1
> | * | 9203a43 O1 <-- root commit
> | /
> | | * bc2c4d9 (t) T
> | | * 2d3c03b T
> | |/
> |/|
> * | 6a26183 A
> |/
> * da85ccf initial <-- root commit
Sorry, I am not quite sure what you are trying to illustrate with
the comparison between the above two. The latter makes it clear
that 9203a43 and da85ccf do not have parents in the depicted part of
the history [*1*].
In the former one, does 2237b52 have no child in the depicted part of
the history, and is the problem that it appears as if it has a674e07
as a child? I wonder if we can just shift them, either:
> * 8d82d0a (HEAD -> master) Merge branch 'o1'
> |\__
> | * 3479914 (o1) O1
> | * a674e07 O1 <-- root commit
> | * 2237b52 (t) T
> | * f525fa5 T
> |/
> * f15f936 A
or
> * 8d82d0a (HEAD -> master) Merge branch 'o1'
> |\
> | * 3479914 (o1) O1
> | * a674e07 O1 <-- root commit
> | * 2237b52 (t) T
> | __* f525fa5 T
> |/
> * f15f936 A
Or we could punt to show it with an extra blank line, although it is
suboptimial.
> * 8d82d0a (HEAD -> master) Merge branch 'o1'
> |\
> | * 3479914 (o1) O1
> | * a674e07 O1 <-- root commit
> |
> | * 2237b52 (t) T
> | * f525fa5 T
> |/
> * f15f936 A
[Footnote]
*1* Stepping back a bit, I think concentrating too much on "is it
root?" is a wrong way to think about the problem. Suppose you
have two histories, e.g. (time flows from left to right; A and X
are roots)
A---B
\
X---Y---Z
and doing "git log --graph --oneline Z" would show A, B, X, Y
and Z.
If it benefits to show "A" (and "X") specially in the graph,
that would mean that the current algorithm would show some other
commit after showing A (probably X if it goes in chronological
order), and it probably is confusing because X is shown on the
same column as A, when there is no parent-child relationship
between them (A is root after all).
We are trying to highlight that A is not a child of anybody by
using '#' instead.
But in a slightly modified graph:
C
/
O---A---B
\
X---Y---Z
if you do "git log --graph --oneline C..Z", you should see the
same commits listed as above (A, B, X, Y and Z), and most likely
in the same order.
So special casing by "Ah, A is a root commit, so let's show it
with '#'" does not help, even though we are facing exactly the
same problem in the latter graph.
And the right way to look at it is "does A have any parent in
the part of the history being shown?", not "does A have any
parent?" Then 'A' will get exactly the same treatment in the
two examples, and the visual problem that makes A appear as if
it has parent-child relationship with unrelated commit X goes
away.
next prev parent reply other threads:[~2021-01-18 19:52 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-14 18:30 add a blank line when a commit has no parent in log output? Jason Pyeron
2021-01-14 19:29 ` Philippe Blain
2021-01-14 20:44 ` Jason Pyeron
2021-01-17 11:03 ` [PATCH 0/2] Option to modify revision mark for root commits Kyle Marek
2021-01-17 11:03 ` [PATCH 1/2] revision: Denote root commits with '#' Kyle Marek
2021-01-17 21:10 ` Junio C Hamano
2021-01-18 7:56 ` Kyle Marek
2021-01-18 19:15 ` Junio C Hamano [this message]
2021-01-18 20:33 ` Junio C Hamano
2021-01-19 7:43 ` Kyle Marek
2021-01-19 22:10 ` Junio C Hamano
2021-01-20 3:25 ` Kyle Marek
2021-01-20 6:47 ` Junio C Hamano
2021-01-20 15:11 ` Jason Pyeron
2021-01-20 21:52 ` Junio C Hamano
2021-01-20 23:01 ` Jason Pyeron
2021-01-23 18:07 ` Junio C Hamano
2021-01-23 23:02 ` Jason Pyeron
2021-01-23 23:45 ` Junio C Hamano
2021-01-24 0:02 ` Jason Pyeron
2021-01-25 7:00 ` Junio C Hamano
2021-01-17 22:44 ` Junio C Hamano
2021-01-17 11:03 ` [PATCH 2/2] revision: implement --show-linear-break for --graph Kyle Marek
2021-01-17 22:56 ` Junio C Hamano
2021-01-18 2:09 ` Junio C Hamano
2021-01-18 7:56 ` Kyle Marek
2021-01-18 21:01 ` Junio C Hamano
2021-01-19 7:44 ` Kyle Marek
2021-01-15 1:12 ` add a blank line when a commit has no parent in log output? Junio C Hamano
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=xmqqwnwajbuj.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=jpyeron@pdinc.us \
--cc=kmarek@pdinc.us \
--cc=levraiphilippeblain@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;
as well as URLs for NNTP newsgroup(s).