Git development
 help / color / mirror / Atom feed
From: Tian Yuchen <cat@malon.dev>
To: Junio C Hamano <gitster@pobox.com>
Cc: "Mirko Faina" <mroik@delayed.space>,
	git@vger.kernel.org, "Patrick Steinhardt" <ps@pks.im>,
	"Jean-Noël Avila" <jn.avila@free.fr>, "Jeff King" <peff@peff.net>
Subject: Re: [PATCH] revision.c: implement --reverse=before for walks
Date: Tue, 21 Apr 2026 01:08:52 +0800	[thread overview]
Message-ID: <e071f152-c718-4680-ad15-769591080ac8@malon.dev> (raw)
In-Reply-To: <xmqqv7dlr4yz.fsf@gitster.g>

On 4/21/26 00:06, Junio C Hamano wrote:
> Tian Yuchen <cat@malon.dev> writes:
> 
>> I think the space complexity here could be reduced a little. After all,
>> since we’re only retrieving a few commits, there’s no need to load the
>> entire reversed commit history into memory.
> 
> Does "we're only retrieving a few commits" come from the fact that
> the command example is "log --reverse -3"?
> 
>   - What should happen when you give "git log --reverse=before"
>     without "--max-count=3"?

I still wanna talk my way out of it ;)

If we maintain a window of length K out of N nodes:

   - If K is small (e.g. 3), The space complexity is strictly O(K), 
which saves a considerable amount compared to the unoptimised one;

   - If K is huge, reduce to traversing all N nodes. At this point, the 
space complexity is the same as when unoptimised (O(N)). At most, there 
is an additional time cost of O(log N) for stack operation, which can be 
disregarded.

It seems like a strategy that could be applied consistently, but...

>   - What should happen without "--max-count" but other limiting
>     options, like "--author=Tian" or "--min-parents=2"?

I must admit you’re absolutely right on this point.

If we were to introduce a new state machine and data structure for every 
type of parameter, it would indeed be rather cumbersome to maintain and 
not particularly cost-effective.

> It might be that the right way to look at this new feature is not
> that "we are changing where reverse is applied", but "count limit is
> applied much later than usual", which may mean at the UI level, it
> may not be good at the conceptual level to sell this as an extension
> to the "--reverse" option?  I dunno.

That's what I meant to say earlier in the 'nit' section. I couldn’t 
quite put it into words at that time :((

Thanks, Yuchen


  reply	other threads:[~2026-04-20 17:09 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 [this message]
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
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=e071f152-c718-4680-ad15-769591080ac8@malon.dev \
    --to=cat@malon.dev \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jn.avila@free.fr \
    --cc=mroik@delayed.space \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox