Re: [PATCH 1/2] revision: Denote root commits with '#'
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jan 17, 2021, 21:10 UTC
- Message-ID
- <xmqq7dobmfrq.fsf@gitster.c.googlers.com>
- In-Reply-To
- <20210117110337.429994-2-kmarek@pdinc.us>
Kyle Marek <kmarek@pdinc.us> writes:
Show 7 quoted lines
> This aids in identifying where an unrelated branch history starts when > using `git log --graph --oneline --all` > > Signed-off-by: Kyle Marek <kmarek@pdinc.us> > --- > revision.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-)
No tests?
Show 18 quoted lines
> diff --git a/revision.c b/revision.c
> index 9dff845bed..8556923de8 100644
> --- a/revision.c
> +++ b/revision.c
> @@ -4191,9 +4191,11 @@ const char *get_revision_mark(const struct rev_info *revs, const struct commit *
> return "<";
> else
> return ">";
> - } else if (revs->graph)
> + } else if (revs->graph) {
> + if (!commit->parents)
> + return "#";
> return "*";
> - else if (revs->cherry_mark)
> + } else if (revs->cherry_mark)
> return "+";
> return "";
> }Here is what I tried to come up with, but somehow the "#" marker is not showing for me.
The "counted plus --left-right" tests stress why a single "#" is not good enough. I think the patch also needs to replace "<" and ">" for root commits that are left and right---in the tests, I used "L" to denote "root that is on the left side" (and "R" for the right side) instead of single "#", so that we do not to lose information.
By the way, as I already said in the original thread, I do not think the '#' marking is a good idea; I'd rather see the root commit shown by shifting columns.
Anyway, here is to test [1/2].
t/t6020-rev-list-boundary.sh | 132 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+)
diff --git i/t/t6020-rev-list-boundary.sh w/t/t6020-rev-list-boundary.sh new file mode 100755 index 0000000000..f25e041951 --- /dev/null +++ w/t/t6020-rev-list-boundary.sh @@ -0,0 +1,132 @@ +#!/bin/sh + +test_description='rev-list/log boundary and root' + +. ./test-lib.sh + +test_expect_success 'setup' ' + test_commit A && + test_commit B && + git reset --hard A && + test_commit C && + + git checkout --orphan side && + git rm -fr . && + test_commit X && + test_commit Y && + + test_tick && git merge --allow-unrelated-histories -m "M" B && + test_tick && git merge -m "N" C && + test_commit Z +' + +test_expect_success 'log with boundary' ' + git log --graph --boundary --format='%s' ^A ^X Z >actual && + sed -e "s/Q$//" >expect <<-\EOF && + * Z + * N + |\ Q + | * C + * | M + |\ \ Q + | * | B + | |/ Q + * | Y + o | X + / Q + o A + EOF + test_cmp expect actual +' + +test_expect_success 'log --left-right with symmetric boundary' ' + git log --graph --left-right --boundary --format='%s' B...C >actual && + sed -e "s/Q$//" >expect <<-\EOF && + > C + | < B + |/ Q + o A + EOF + test_cmp expect actual +' + +test_expect_success 'log --left-right with asymmetric boundary' ' + git log --graph --left-right --boundary --format='%s' ^A ^X Z >actual && + sed -e "s/Q$//" >expect <<-\EOF && + > Z + > N + |\ Q + | > C + > | M + |\ \ Q + | > | B + | |/ Q + > | Y + o | X + / Q + o A + EOF + test_cmp expect actual +' + +test_expect_failure 'log down to root' ' + git log --graph --format='%s' Z >actual && + sed -e "s/Q$//" >expect <<-\EOF && + * Z + * N + |\ Q + | * C + * | M + |\ \ Q + | * | B + | |/ Q + | # A + * Y + # X + EOF + test_cmp expect actual +' + +test_expect_failure 'log down to root' ' + git log --graph --format='%s' B Y >actual && + sed -e "s/Q$//" >expect <<-\EOF && + * Y + # X + * B + # A + EOF + test_cmp expect actual +' + +test_expect_failure 'log that happens to show root' ' + git log --graph -3 --format='%s' B Y >actual && + sed -e "s/Q$//" >expect <<-\EOF && + * Y + # X + * B + EOF + test_cmp expect actual +' + +test_expect_failure 'log --left-right down to root' ' + git log --graph --left-right --format='%s' B...Y >actual && + sed -e "s/Q$//" >expect <<-\EOF && + > Y + R X + < B + L A + EOF + test_cmp expect actual +' + +test_expect_failure 'log --left-right that happens to show root' ' + git log --graph -3 --left-right --format='%s' B...Y >actual && + sed -e "s/Q$//" >expect <<-\EOF && + > Y + R X + < B + EOF + test_cmp expect actual +' + +test_done