Re: [PATCH 4/6] packed_ref_iterator_begin(): make optimization more general
- From
Jeff King <peff@peff.net>
- Date
- Jan 24, 2018, 20:32 UTC
- Message-ID
- <20180124203258.GB7773@sigill.intra.peff.net>
- In-Reply-To
- <bf6c0c67430b936738f5e8891b82022d0127acb0.1516791909.git.mhagger@alum.mit.edu>
On Wed, Jan 24, 2018 at 12:14:14PM +0100, Michael Haggerty wrote:
Show 7 quoted lines
> We can return an empty iterator not only if the `packed-refs` file is > missing, but also if it is empty or if there are no references whose > names succeed `prefix`. Optimize away those cases as well by moving > the call to `find_reference_location()` higher in the function and > checking whether the determined start position is the same as > `snapshot->eof`. (This is possible now because the previous commit > made `find_reference_location()` robust against empty snapshots.)
Makes sense.
Show 9 quoted lines
> @@ -937,11 +942,6 @@ static struct ref_iterator *packed_ref_iterator_begin( > iter->snapshot = snapshot; > acquire_snapshot(snapshot); > > - if (prefix && *prefix) > - start = find_reference_location(snapshot, prefix, 0); > - else > - start = snapshot->start; > -
I did a double-take here that we are now looking at the snapshot without calling acquire_snapshot(). But that function is just about taking a refcount on it. The actual acquisition of data happens in get_snapshot().
-Peff