From: Taylor Blau <ttaylorr@openai.com>
To: Patrick Steinhardt <ps@pks.im>
Cc: git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
"Jeff King" <peff@peff.net>, "Elijah Newren" <newren@gmail.com>,
"Jonathan Tan" <jonathantanmy@fastmail.com>,
"René Scharfe" <l.s.r@web.de>,
"Derrick Stolee" <stolee@gmail.com>,
"Ted Nyman" <tnyman@openai.com>,
"Daniel Reynaud" <dreynaud@openai.com>,
"Aaron Friel" <friel@openai.com>
Subject: Re: [PATCH] negotiator/skipping.c: parse parents before queueing
Date: Thu, 22 Oct 2026 15:38:27 -0500 [thread overview]
Message-ID: <atp0Q5dFHQHAZAov@com-79390> (raw)
In-Reply-To: <athgd6Ya12zRdIR_@pks.im>
On Wed, Oct 21, 2026 at 08:49:27AM +0200, Patrick Steinhardt wrote:
> On Mon, Oct 19, 2026 at 03:17:07PM -0500, Taylor Blau wrote:
> > diff --git a/negotiator/skipping.c b/negotiator/skipping.c
> > index db90fa77b53..ed6e88b59b4 100644
> > --- a/negotiator/skipping.c
> > +++ b/negotiator/skipping.c
> > @@ -151,6 +151,9 @@ static int push_parent(struct data *data, struct entry *entry,
> > parent_found:
> > ;
> > } else {
> > + /* Parse the parent before using its date to order the queue. */
> > + if (repo_parse_commit(the_repository, to_push))
> > + return 0;
> > parent_entry = rev_list_push(data, to_push, 0);
> > }
>
> Why do you parse the commit in `push_parent()` instead of parsing it in
> `rev_list_push()`? The latter would also cover the other two callsites
> that call it, and to me it's not clear why they wouldn't want to parse
> the commits before adding it to the queue.
>
> Doing so in `rev_list_push()` would also bring it in line with the
> default negotiator.
I originally wrote it this way because the skipping negotiator's version
of `rev_list_push()` returns a pointer to an 'entry' struct, whereas the
default negotiator's simply returns void. But the only caller that needs
to learn to handle a NULL return value from that function is simply
`push_parent()` itself, since the other two callers already disregard
the return value.
I agree that performing the parse in `rev_list_push()` makes more sense
from both an ergonomic and consistency perspective, so I have moved it
there for the next round.
> There's also another call to `repo_parse_commit()` in `get_rev()`. Once
> we start parsing the commit in `rev_list_push()` we could drop that call
> as we'd know that every commit in the queue is parsed already.
That makes sense. The commit struct comes from the queue, and we know
that the queue always has fully-parsed commits, so there is no need to
re-parse it (even though the second and subsequent calls are noops).
I've removed it.
> > + sed -n "s/.*fetch> have //p" trace >haves &&
> > + sed -n "1,2p" haves >actual &&
>
> Nit: `head -n2 haves >actual`
Thanks, I realized when responding here that we don't even need the
'haves' intermediate file, so we can replace this and the above line
with:
sed -n "s/.*fetch> have //p" trace | head -n 2 >actual &&
Thanks for reviewing!
Thanks,
Taylor
next prev parent reply other threads:[~2026-10-22 20:38 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 20:17 [PATCH] negotiator/skipping.c: parse parents before queueing Taylor Blau
2026-10-21 6:49 ` Patrick Steinhardt
2026-10-21 19:02 ` Junio C Hamano
2026-10-22 20:38 ` Taylor Blau [this message]
2026-10-22 21:46 ` Junio C Hamano
2026-10-22 22:49 ` Taylor Blau
2026-10-22 21:21 ` [PATCH v2] " Taylor Blau
2026-10-22 22:34 ` Junio C Hamano
2026-10-22 22:48 ` Taylor Blau
2026-10-23 14:30 ` Junio C Hamano
2026-10-24 0:03 ` Taylor Blau
2026-10-24 2:06 ` Junio C Hamano
2026-10-26 23:49 ` [PATCH v3 0/2] negotiator: parse commits " Taylor Blau
2026-10-26 23:49 ` [PATCH v3 1/2] negotiator/default.c: mark commits seen only after parsing Taylor Blau
2026-10-26 23:49 ` [PATCH v3 2/2] negotiator/skipping.c: parse parents before queueing Taylor Blau
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=atp0Q5dFHQHAZAov@com-79390 \
--to=ttaylorr@openai.com \
--cc=dreynaud@openai.com \
--cc=friel@openai.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jonathantanmy@fastmail.com \
--cc=l.s.r@web.de \
--cc=newren@gmail.com \
--cc=peff@peff.net \
--cc=ps@pks.im \
--cc=stolee@gmail.com \
--cc=tnyman@openai.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 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.