From: Junio C Hamano Date: Wed, 23 Apr 2025 20:58:50 +0000 (-0700) Subject: Merge branch 'kn/bundle-dedup-optim' X-Git-Tag: v2.50.0-rc0~90 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bb74c0abbc31da35be52999569ea481ebd149d1d;p=thirdparty%2Fgit.git Merge branch 'kn/bundle-dedup-optim' Optimize the code to dedup references recorded in a bundle file. * kn/bundle-dedup-optim: bundle: fix non-linear performance scaling with refs t6020: test for duplicate refnames in bundle creation --- bb74c0abbc31da35be52999569ea481ebd149d1d diff --cc object.c index 154525a497,a2c5986178..d054e7f0d0 --- a/object.c +++ b/object.c @@@ -492,45 -491,12 +492,12 @@@ void object_array_clear(struct object_a array->nr = array->alloc = 0; } - /* - * Return true if array already contains an entry. - */ - static int contains_object(struct object_array *array, - const struct object *item, const char *name) - { - unsigned nr = array->nr, i; - struct object_array_entry *object = array->objects; - - for (i = 0; i < nr; i++, object++) - if (item == object->item && !strcmp(object->name, name)) - return 1; - return 0; - } - - void object_array_remove_duplicates(struct object_array *array) - { - unsigned nr = array->nr, src; - struct object_array_entry *objects = array->objects; - - array->nr = 0; - for (src = 0; src < nr; src++) { - if (!contains_object(array, objects[src].item, - objects[src].name)) { - if (src != array->nr) - objects[array->nr] = objects[src]; - array->nr++; - } else { - object_array_release_entry(&objects[src]); - } - } - } - -void clear_object_flags(unsigned flags) +void clear_object_flags(struct repository *repo, unsigned flags) { int i; - for (i=0; i < repo->parsed_objects->obj_hash_size; i++) { - for (i=0; i < the_repository->parsed_objects->obj_hash_size; i++) { - struct object *obj = the_repository->parsed_objects->obj_hash[i]; ++ for (i = 0; i < repo->parsed_objects->obj_hash_size; i++) { + struct object *obj = repo->parsed_objects->obj_hash[i]; if (obj) obj->flags &= ~flags; }