git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Derrick Stolee <derrickstolee@github.com>
To: "René Scharfe" <l.s.r@web.de>, "Git List" <git@vger.kernel.org>
Cc: Junio C Hamano <gitster@pobox.com>
Subject: Re: [PATCH] commit: skip already cleared parents in clear_commit_marks_1()
Date: Thu, 15 Dec 2022 10:13:59 -0500	[thread overview]
Message-ID: <112d189c-f2f9-8e12-fe13-82e41316c41b@github.com> (raw)
In-Reply-To: <7cf2ea1f-8dbf-5639-3874-86de391ae20a@web.de>

On 12/13/22 1:27 AM, René Scharfe wrote:
> Don't put clean parents on the pending list, as they and their ancestors
> don't need any treatment and would be skipped later anyway.  This saves
> the allocation and release of a commit list item in ca. 20% of the cases
> during a run of the test suite.

> -		while ((parents = parents->next))
> -			commit_list_insert(parents->item, plist);
> +		while ((parents = parents->next)) {
> +			if (parents->item->object.flags & mark)
> +				commit_list_insert(parents->item, plist);
> +		}

From this context, it looks like this is a change of behavior (the
walk only continues to parents that have the flag, so if the flag
is not closed under reachability, such as the UNINTERESTING flag,
then we won't clear all flags) but above this we already skip a
commit that doesn't have the flag enabled.

One thing that is odd about this method is that it sets the
'commit' value to the first parent, and adds the later parents
to the list. It's a minor point, but that check for the flag
on the 'commit' is what prevents us from walking too far along
the first-parent history.

All this to say, this is a safe change with a nice upside.

Thanks,
-Stolee

      reply	other threads:[~2022-12-15 15:14 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-12-13  6:27 [PATCH] commit: skip already cleared parents in clear_commit_marks_1() René Scharfe
2022-12-15 15:13 ` Derrick Stolee [this message]

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=112d189c-f2f9-8e12-fe13-82e41316c41b@github.com \
    --to=derrickstolee@github.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=l.s.r@web.de \
    /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).