commit 9614da0defceed78e0660d5e75d116b96feeccd6 from: Stefan Sperling date: Sun Jul 04 10:27:59 2021 UTC avoid searching the pack index twice in 'gotadmin cleanup' commit - 2252c019b5ec7ee342e8ebf2854ec8d83182b3ee commit + 9614da0defceed78e0660d5e75d116b96feeccd6 blob - 7461d26208ce44417f438e825f9198e87bf5f41d blob + 391b44aff9089bc0157349e22029d60c4765029c --- lib/repository_admin.c +++ lib/repository_admin.c @@ -717,24 +717,6 @@ done: got_object_close(obj); free(path_objects); free(path); - return err; -} - -static const struct got_error * -search_packidx(int *found, struct got_object_id *id, - struct got_repository *repo) -{ - const struct got_error *err = NULL; - struct got_packidx *packidx = NULL; - int idx; - - *found = 0; - - err = got_repo_search_packidx(&packidx, &idx, repo, id); - if (err == NULL) - *found = 1; /* object is already packed */ - else if (err->code == GOT_ERR_NO_OBJ) - err = NULL; return err; } @@ -743,33 +725,27 @@ preserve_loose_object(struct got_object_idset *loose_i struct got_object_id *id, struct got_repository *repo, int *npacked) { const struct got_error *err = NULL; - int is_packed; + struct got_object *obj; if (!got_object_idset_contains(loose_ids, id)) return NULL; - err = search_packidx(&is_packed, id, repo); - if (err) - return err; - if (is_packed) { - struct got_object *obj; - + /* + * Try to open this object from a pack file. This ensures that + * we do in fact have a valid packed copy of the object. Otherwise + * we should not delete the loose representation of this object. + */ + err = got_object_open_packed(&obj, id, repo); + if (err == NULL) { + got_object_close(obj); /* - * Sanity check: Open the packed object to prevent a - * corrupt pack index from misleading us. + * The object is referenced and packed. + * We can purge the redundantly stored loose object. */ - err = got_object_open_packed(&obj, id, repo); - if (err == NULL) { - got_object_close(obj); - /* - * The object is referenced and packed. - * We can purge the redundantly stored loose object. - */ - (*npacked)++; - return NULL; - } else if (err->code != GOT_ERR_NO_OBJ) - return err; - } + (*npacked)++; + return NULL; + } else if (err->code != GOT_ERR_NO_OBJ) + return err; /* * This object is referenced and not packed.