On Mon, Nov 12 2018, René Scharfe wrote:

> Am 12.11.2018 um 15:55 schrieb Jeff King:
>> Commit 024aa4696c (fetch-pack.c: use oidset to check existence of loose
>> object, 2018-03-14) added a cache to avoid calling stat() for a bunch of
>> loose objects we don't have.
>>
>> Now that OBJECT_INFO_QUICK handles this caching itself, we can drop the
>> custom solution.
>>
>> Note that this might perform slightly differently, as the original code
>> stopped calling readdir() when we saw more loose objects than there were
>> refs. So:
>>
>>   1. The old code might have spent work on readdir() to fill the cache,
>>      but then decided there were too many loose objects, wasting that
>>      effort.
>>
>>   2. The new code might spend a lot of time on readdir() if you have a
>>      lot of loose objects, even though there are very few objects to
>>      ask about.
>
> Plus the old code used an oidset while the new one uses an oid_array.
>
>> In practice it probably won't matter either way; see the previous commit
>> for some discussion of the tradeoff.
>>
>> Signed-off-by: Jeff King <p...@peff.net>
>> ---
>>  fetch-pack.c | 39 ++-------------------------------------
>>  1 file changed, 2 insertions(+), 37 deletions(-)
>>
>> diff --git a/fetch-pack.c b/fetch-pack.c
>> index b3ed7121bc..25a88f4eb2 100644
>> --- a/fetch-pack.c
>> +++ b/fetch-pack.c
>> @@ -636,23 +636,6 @@ struct loose_object_iter {
>>      struct ref *refs;
>>  };
>>
>> -/*
>> - *  If the number of refs is not larger than the number of loose objects,
>> - *  this function stops inserting.
>> - */
>> -static int add_loose_objects_to_set(const struct object_id *oid,
>> -                                const char *path,
>> -                                void *data)
>> -{
>> -    struct loose_object_iter *iter = data;
>> -    oidset_insert(iter->loose_object_set, oid);
>> -    if (iter->refs == NULL)
>> -            return 1;
>> -
>> -    iter->refs = iter->refs->next;
>> -    return 0;
>> -}
>> -
>>  /*
>>   * Mark recent commits available locally and reachable from a local ref as
>>   * COMPLETE. If args->no_dependents is false, also mark COMPLETE remote 
>> refs as
>> @@ -670,30 +653,14 @@ static void mark_complete_and_common_ref(struct 
>> fetch_negotiator *negotiator,
>>      struct ref *ref;
>>      int old_save_commit_buffer = save_commit_buffer;
>>      timestamp_t cutoff = 0;
>> -    struct oidset loose_oid_set = OIDSET_INIT;
>> -    int use_oidset = 0;
>> -    struct loose_object_iter iter = {&loose_oid_set, *refs};
>> -
>> -    /* Enumerate all loose objects or know refs are not so many. */
>> -    use_oidset = !for_each_loose_object(add_loose_objects_to_set,
>> -                                        &iter, 0);
>>
>>      save_commit_buffer = 0;
>>
>>      for (ref = *refs; ref; ref = ref->next) {
>>              struct object *o;
>> -            unsigned int flags = OBJECT_INFO_QUICK;
>>
>> -            if (use_oidset &&
>> -                !oidset_contains(&loose_oid_set, &ref->old_oid)) {
>> -                    /*
>> -                     * I know this does not exist in the loose form,
>> -                     * so check if it exists in a non-loose form.
>> -                     */
>> -                    flags |= OBJECT_INFO_IGNORE_LOOSE;
>
> This removes the only user of OBJECT_INFO_IGNORE_LOOSE.  #leftoverbits

With this series applied there's still a use of it left in
oid_object_info_extended()

Reply via email to