| 2553 | } |
| 2554 | |
| 2555 | int packfile_store_for_each_object(struct packfile_store *store, |
| 2556 | const struct object_info *request, |
| 2557 | odb_for_each_object_cb cb, |
| 2558 | void *cb_data, |
| 2559 | const struct odb_for_each_object_options *opts) |
| 2560 | { |
| 2561 | struct packfile_store_for_each_object_wrapper_data data = { |
| 2562 | .store = store, |
| 2563 | .request = request, |
| 2564 | .cb = cb, |
| 2565 | .cb_data = cb_data, |
| 2566 | }; |
| 2567 | struct packfile_list_entry *e; |
| 2568 | int pack_errors = 0, ret; |
| 2569 | |
| 2570 | if (opts->prefix) |
| 2571 | return packfile_store_for_each_prefixed_object(store, opts, &data); |
| 2572 | |
| 2573 | store->skip_mru_updates = true; |
| 2574 | |
| 2575 | for (e = packfile_store_get_packs(store); e; e = e->next) { |
| 2576 | struct packed_git *p = e->pack; |
| 2577 | |
| 2578 | if ((opts->flags & ODB_FOR_EACH_OBJECT_LOCAL_ONLY) && !p->pack_local) |
| 2579 | continue; |
| 2580 | if ((opts->flags & ODB_FOR_EACH_OBJECT_PROMISOR_ONLY) && |
| 2581 | !p->pack_promisor) |
| 2582 | continue; |
| 2583 | if ((opts->flags & ODB_FOR_EACH_OBJECT_SKIP_IN_CORE_KEPT_PACKS) && |
| 2584 | p->pack_keep_in_core) |
| 2585 | continue; |
| 2586 | if ((opts->flags & ODB_FOR_EACH_OBJECT_SKIP_ON_DISK_KEPT_PACKS) && |
| 2587 | p->pack_keep) |
| 2588 | continue; |
| 2589 | if (open_pack_index(p)) { |
| 2590 | pack_errors = 1; |
| 2591 | continue; |
| 2592 | } |
| 2593 | |
| 2594 | ret = for_each_object_in_pack(p, packfile_store_for_each_object_wrapper, |
| 2595 | &data, opts->flags); |
| 2596 | if (ret) |
| 2597 | goto out; |
| 2598 | } |
| 2599 | |
| 2600 | ret = 0; |
| 2601 | |
| 2602 | out: |
| 2603 | store->skip_mru_updates = false; |
| 2604 | |
| 2605 | if (!ret && pack_errors) |
| 2606 | ret = -1; |
| 2607 | return ret; |
| 2608 | } |
| 2609 | |
| 2610 | static int extend_abbrev_len(const struct object_id *a, |
| 2611 | const struct object_id *b, |
no test coverage detected