All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mirko Faina <mroik@delayed.space>
To: Jeff King <peff@peff.net>
Cc: "D. Ben Knoble" <ben.knoble@gmail.com>,
	git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
	"Patrick Steinhardt" <ps@pks.im>,
	"Jean-Noël Avila" <jn.avila@free.fr>,
	"Mirko Faina" <mroik@delayed.space>
Subject: Re: [PATCH] revision.c: implement --reverse=before for walks
Date: Mon, 20 Apr 2026 11:33:25 +0200	[thread overview]
Message-ID: <aeXxC8eR0Mn3dGEn@exploit> (raw)
In-Reply-To: <20260420002118.GB1238475@coredump.intra.peff.net>

On Sun, Apr 19, 2026 at 08:21:18PM -0400, Jeff King wrote:
> On Sun, Apr 19, 2026 at 10:31:37PM +0200, Mirko Faina wrote:
> 
> > > I think I mean that
> > > 
> > >     git log --reverse --reverse
> > > 
> > > shows commits in the same order as "git log"; what should
> > > 
> > >     git log --reverse=after --reverse
> > > 
> > > do? Or what about preserving the behavior of the original "git log
> > > --reverse --reverse," which I don't think is done here?
> > 
> > Yes, this is what I was getting at. Since it is no longer binary what
> > would a double reverse mean? What if "--reverse=after --reverse=before"?
> > How should that be handled?
> 
> Yeah, I agree it gets weird, and I think it is OK if we don't try to
> combine before/after reverses (either making it an error, or using the
> usual last-one-wins to have "before" override "after" in this example).
> 
> But we should keep "--reverse --reverse" working as before, as there is
> no other way to countermand a previously-given reverse option, and
> because it has always worked.

What about a triple reverse? That would mean the original reverse choice
is lost and it defaults to the historical "after", which I'm fine with,
but this will need some extra caveat in the documentation :')

> Usually we'd spell the option "--no-reverse", and it probably makes
> sense to add it (to override an earlier "--reverse=after"), but we'd
> still want to keep "--reverse --reverse" working for historical
> compatibility.

Yes, I will add a negated form as well.

> So combined with the earlier suggestions for using an enum and
> disallowing the un-stuck "--reverse after" form, we probably want
> something like (totally untested):
> 
> diff --git a/revision.c b/revision.c
> index 599b3a66c3..89a58a65b7 100644
> --- a/revision.c
> +++ b/revision.c
> @@ -2686,7 +2686,20 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
>  			git_log_output_encoding = xstrdup("");
>  		return argcount;
>  	} else if (!strcmp(arg, "--reverse")) {
> -		revs->reverse ^= 1;
> +		/*
> +		 * This relies on "do not reverse" being the 0 value for our
> +		 * enum, and historical "reverse after" having value 1.
> +		 */
> +		revs->reverse = !revs->reverse;
> +	} else if (!strcmp(arg, "--no-reverse")) {
> +		revs->reverse = 0;
> +	} else if (skip_prefix(arg, "--reverse=", &optarg)) {
> +		if (!strcmp(optarg, "after"))
> +			revs->reverse = REVS_REVERSE_AFTER;
> +		else if (!strcmp(optarg, "before"))
> +			revs->reverse = REVS_REVERSE_BEFORE;
> +		else
> +			die(_("unknown value for --reverse: %s"), optarg);
>  	} else if (!strcmp(arg, "--children")) {
>  		revs->children.name = "children";
>  		revs->limited = 1;

This unfortunately wouldn't work as the first condition is a prefix of
the third, so no free copy-paste for me.

Will have separate parsing for omitted and explicit forms in v2.

> Note that your original also allowed --reverse-o-matic, which we
> probably don't want (and is fixed here).
> 
> I _think_ the negation from using "--reverse" after "--reverse=before"
> should be sensible here. And "--reverse=" with two different modes just
> overrides rather than trying to be clever. But you may want to
> double-check all of the combinations.
> 
> This would all be much easier if revision.c used parse-options, of
> course, which has all of these sorts of rules baked-in. But that's a
> much bigger conversion, and probably not something you want to make a
> prerequisite for your series. ;)

I'm sure someone will be fed up enough to bring in parse-options at some
point.

> -Peff

Thank you

  reply	other threads:[~2026-04-20  9:33 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-18 16:47 [PATCH] revision.c: implement --reverse=before for walks Mirko Faina
2026-04-18 18:20 ` Tian Yuchen
2026-04-18 18:42   ` Mirko Faina
2026-04-18 18:51     ` Mirko Faina
2026-04-20 16:06   ` Junio C Hamano
2026-04-20 17:08     ` Tian Yuchen
2026-04-20 23:50     ` Mirko Faina
2026-04-19 12:06 ` Ben Knoble
2026-04-19 18:11   ` Mirko Faina
2026-04-19 19:12     ` D. Ben Knoble
2026-04-19 20:31       ` Mirko Faina
2026-04-20  0:21         ` Jeff King
2026-04-20  9:33           ` Mirko Faina [this message]
2026-04-20 10:30             ` Mirko Faina
2026-04-21  3:48             ` Jeff King
2026-04-22 18:24         ` D. Ben Knoble
2026-04-22 19:42           ` Mirko Faina
2026-04-20  0:04 ` Jeff King
2026-04-20  9:22   ` Mirko Faina
2026-04-22  0:28 ` [PATCH v2 0/2] " Mirko Faina
2026-04-22  0:30   ` Mirko Faina
2026-04-23 22:51   ` [PATCH v3 " Mirko Faina
2026-04-23 22:51     ` [PATCH v3 1/2] " Mirko Faina
2026-04-28  1:45       ` Junio C Hamano
2026-04-23 22:52     ` [PATCH v3 2/2] revision.c: reduce memory usage on reverse before Mirko Faina
2026-04-27  0:24     ` [PATCH v4 0/2] revision.c: implement --reverse=before for walks Mirko Faina
2026-04-27  0:24       ` [PATCH v4 1/2] " Mirko Faina
2026-04-27  6:45         ` Junio C Hamano
2026-04-27  7:33           ` Johannes Sixt
2026-04-27 12:30             ` Junio C Hamano
2026-04-27 13:58               ` Chris Torek
2026-04-27 16:48           ` [PATCH v4 1/2] revision.c: implement -b-reverse=before " Mirko Faina
2026-04-28  1:46             ` Junio C Hamano
2026-04-28  1:45         ` [PATCH v4 1/2] revision.c: implement --reverse=before " Junio C Hamano
2026-04-27  0:24       ` [PATCH v4 2/2] revision.c: reduce memory usage on reverse before Mirko Faina
2026-04-28  1:46         ` Junio C Hamano
2026-04-30 19:52       ` [PATCH v5] revision.c: implement --max-count-oldest Mirko Faina
2026-05-04  5:19         ` Junio C Hamano
2026-05-04 13:08           ` Mirko Faina
2026-05-05 21:54         ` [PATCH v6] " Mirko Faina
2026-05-06  6:45           ` Johannes Sixt
2026-05-06 12:54             ` Mirko Faina
2026-05-07  9:20               ` Junio C Hamano
2026-05-08  0:09                 ` Mirko Faina
2026-05-09 12:46           ` Jean-Noël AVILA
2026-05-10  0:41             ` Mirko Faina
2026-05-09 21:01           ` Junio C Hamano
2026-05-10  0:48             ` Mirko Faina
2026-05-09 11:01         ` [PATCH v5] " Junio C Hamano
2026-05-10  0:36           ` Mirko Faina
2026-04-22  0:28 ` [PATCH v2 1/2] revision.c: implement --reverse=before for walks Mirko Faina
2026-04-22 22:44   ` Jeff King
2026-04-22 22:53     ` Mirko Faina
2026-04-22  0:28 ` [PATCH v2 2/2] revision.c: reduce memory usage on reverse before Mirko Faina

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=aeXxC8eR0Mn3dGEn@exploit \
    --to=mroik@delayed.space \
    --cc=ben.knoble@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jn.avila@free.fr \
    --cc=peff@peff.net \
    --cc=ps@pks.im \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.