mirror of
https://github.com/git/git
synced 2024-11-05 18:59:29 +00:00
packed_ref_iterator_begin(): make optimization more general
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.) Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
4a14f8d093
commit
f34242975f
1 changed files with 6 additions and 6 deletions
|
@ -927,7 +927,12 @@ static struct ref_iterator *packed_ref_iterator_begin(
|
||||||
*/
|
*/
|
||||||
snapshot = get_snapshot(refs);
|
snapshot = get_snapshot(refs);
|
||||||
|
|
||||||
if (!snapshot->buf)
|
if (prefix && *prefix)
|
||||||
|
start = find_reference_location(snapshot, prefix, 0);
|
||||||
|
else
|
||||||
|
start = snapshot->start;
|
||||||
|
|
||||||
|
if (start == snapshot->eof)
|
||||||
return empty_ref_iterator_begin();
|
return empty_ref_iterator_begin();
|
||||||
|
|
||||||
iter = xcalloc(1, sizeof(*iter));
|
iter = xcalloc(1, sizeof(*iter));
|
||||||
|
@ -937,11 +942,6 @@ static struct ref_iterator *packed_ref_iterator_begin(
|
||||||
iter->snapshot = snapshot;
|
iter->snapshot = snapshot;
|
||||||
acquire_snapshot(snapshot);
|
acquire_snapshot(snapshot);
|
||||||
|
|
||||||
if (prefix && *prefix)
|
|
||||||
start = find_reference_location(snapshot, prefix, 0);
|
|
||||||
else
|
|
||||||
start = snapshot->start;
|
|
||||||
|
|
||||||
iter->pos = start;
|
iter->pos = start;
|
||||||
iter->eof = snapshot->eof;
|
iter->eof = snapshot->eof;
|
||||||
strbuf_init(&iter->refname_buf, 0);
|
strbuf_init(&iter->refname_buf, 0);
|
||||||
|
|
Loading…
Reference in a new issue