Thread (74 messages) flat view 74 messages, 4 authors, 2021-02-23

Re: [PATCH v2 6/8] builtin/pack-objects.c: rewrite honor-pack-keep logic

From: Jeff King <hidden>
Date: 2021-02-17 19:30:06

On Wed, Feb 17, 2021 at 02:23:27PM -0500, Taylor Blau wrote:
On Wed, Feb 17, 2021 at 11:05:22AM -0500, Jeff King wrote:
quoted
I think just bumping that:

  if (local && !p->pack_local)
	return 0;
quoted
above the new code would fix it. Or to lay out the logic more fully, the
order of checks should be:
quoted
  - does _this_ pack we found the object in disqualify it. If so, we can
    cheaply return 0. And that applies to both keep and local rules.

  - otherwise, check all packs via has_object_kept_pack(), which is
    cheaper than continuing to iterate through all packs by returning
    -1.

  - once we know definitively about keep-packs, then check any shortcuts
    related to local packs (like !have_non_local_packs)

  - and then if no shortcuts, we return -1
I don't understand what you're suggesting. Is the (local &&
!p->pack_local) a disqualifying condition? Reading the comment, I think
it is, and so we could do something like:
That's exactly what I'm suggesting. If we have a non-local pack and were
given --local, then we can shortcut immediately without caring about
kept packs: we know that we do not want the object.
[...]
But your "check any shortcuts related to local packs" makes me think
that we should leave the code as-is.
No, the "shortcuts" there is the opposite:

  if (!local || !have_non_local_packs)
	return 1;

If either of those is true, we can say "definitely include" but only
with respect to the --local requirement. So we _can't_ bump that up, but
must check it only after we've definitively resolved the keep-pack
requirement.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help