odb: rename has_object()

Rename `has_object()` to `odb_has_object()` to match other functions
related to the object database and our modern coding guidelines.

Introduce a compatibility wrapper so that any in-flight topics will
continue to compile.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt
2025-07-01 14:22:27 +02:00
committed by Junio C Hamano
parent d4ff88aee3
commit fcf8e3e111
30 changed files with 87 additions and 74 deletions

View File

@@ -3204,7 +3204,7 @@ static int apply_binary(struct apply_state *state,
return 0; /* deletion patch */ return 0; /* deletion patch */
} }
if (has_object(the_repository, &oid, 0)) { if (odb_has_object(the_repository->objects, &oid, 0)) {
/* We already have the postimage */ /* We already have the postimage */
enum object_type type; enum object_type type;
unsigned long size; unsigned long size;

View File

@@ -67,8 +67,8 @@ static int fill_missing_blobs(const char *path UNUSED,
return 0; return 0;
for (size_t i = 0; i < list->nr; i++) { for (size_t i = 0; i < list->nr; i++) {
if (!has_object(ctx->repo, &list->oid[i], if (!odb_has_object(ctx->repo->objects, &list->oid[i],
OBJECT_INFO_FOR_PREFETCH)) OBJECT_INFO_FOR_PREFETCH))
oid_array_append(&ctx->current_batch, &list->oid[i]); oid_array_append(&ctx->current_batch, &list->oid[i]);
} }

View File

@@ -160,8 +160,8 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name)
goto cleanup; goto cleanup;
case 'e': case 'e':
ret = !has_object(the_repository, &oid, ret = !odb_has_object(the_repository->objects, &oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR); HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR);
goto cleanup; goto cleanup;
case 'w': case 'w':

View File

@@ -506,7 +506,7 @@ static void write_followtags(const struct ref *refs, const char *msg)
continue; continue;
if (ends_with(ref->name, "^{}")) if (ends_with(ref->name, "^{}"))
continue; continue;
if (!has_object(the_repository, &ref->old_oid, 0)) if (!odb_has_object(the_repository->objects, &ref->old_oid, 0))
continue; continue;
refs_update_ref(get_main_ref_store(the_repository), msg, refs_update_ref(get_main_ref_store(the_repository), msg,
ref->name, &ref->old_oid, NULL, 0, ref->name, &ref->old_oid, NULL, 0,

View File

@@ -366,9 +366,9 @@ static void find_non_local_tags(const struct ref *refs,
*/ */
if (ends_with(ref->name, "^{}")) { if (ends_with(ref->name, "^{}")) {
if (item && if (item &&
!has_object(the_repository, &ref->old_oid, 0) && !odb_has_object(the_repository->objects, &ref->old_oid, 0) &&
!oidset_contains(&fetch_oids, &ref->old_oid) && !oidset_contains(&fetch_oids, &ref->old_oid) &&
!has_object(the_repository, &item->oid, 0) && !odb_has_object(the_repository->objects, &item->oid, 0) &&
!oidset_contains(&fetch_oids, &item->oid)) !oidset_contains(&fetch_oids, &item->oid))
clear_item(item); clear_item(item);
item = NULL; item = NULL;
@@ -382,7 +382,7 @@ static void find_non_local_tags(const struct ref *refs,
* fetch. * fetch.
*/ */
if (item && if (item &&
!has_object(the_repository, &item->oid, 0) && !odb_has_object(the_repository->objects, &item->oid, 0) &&
!oidset_contains(&fetch_oids, &item->oid)) !oidset_contains(&fetch_oids, &item->oid))
clear_item(item); clear_item(item);
@@ -403,7 +403,7 @@ static void find_non_local_tags(const struct ref *refs,
* checked to see if it needs fetching. * checked to see if it needs fetching.
*/ */
if (item && if (item &&
!has_object(the_repository, &item->oid, 0) && !odb_has_object(the_repository->objects, &item->oid, 0) &&
!oidset_contains(&fetch_oids, &item->oid)) !oidset_contains(&fetch_oids, &item->oid))
clear_item(item); clear_item(item);
@@ -910,8 +910,8 @@ static int update_local_ref(struct ref *ref,
struct commit *current = NULL, *updated; struct commit *current = NULL, *updated;
int fast_forward = 0; int fast_forward = 0;
if (!has_object(the_repository, &ref->new_oid, if (!odb_has_object(the_repository->objects, &ref->new_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
die(_("object %s not found"), oid_to_hex(&ref->new_oid)); die(_("object %s not found"), oid_to_hex(&ref->new_oid));
if (oideq(&ref->old_oid, &ref->new_oid)) { if (oideq(&ref->old_oid, &ref->new_oid)) {
@@ -1330,7 +1330,8 @@ static int check_exist_and_connected(struct ref *ref_map)
* we need all direct targets to exist. * we need all direct targets to exist.
*/ */
for (r = rm; r; r = r->next) { for (r = rm; r; r = r->next) {
if (!has_object(the_repository, &r->old_oid, HAS_OBJECT_RECHECK_PACKED)) if (!odb_has_object(the_repository->objects, &r->old_oid,
HAS_OBJECT_RECHECK_PACKED))
return -1; return -1;
} }
@@ -1485,7 +1486,7 @@ static void add_negotiation_tips(struct git_transport_options *smart_options)
struct object_id oid; struct object_id oid;
if (repo_get_oid(the_repository, s, &oid)) if (repo_get_oid(the_repository, s, &oid))
die(_("%s is not a valid object"), s); die(_("%s is not a valid object"), s);
if (!has_object(the_repository, &oid, 0)) if (!odb_has_object(the_repository->objects, &oid, 0))
die(_("the object %s does not exist"), s); die(_("the object %s does not exist"), s);
oid_array_append(oids, &oid); oid_array_append(oids, &oid);
continue; continue;

View File

@@ -161,7 +161,7 @@ static int mark_object(struct object *obj, enum object_type type,
return 0; return 0;
if (!(obj->flags & HAS_OBJ)) { if (!(obj->flags & HAS_OBJ)) {
if (parent && !has_object(the_repository, &obj->oid, 1)) { if (parent && !odb_has_object(the_repository->objects, &obj->oid, 1)) {
printf_ln(_("broken link from %7s %s\n" printf_ln(_("broken link from %7s %s\n"
" to %7s %s"), " to %7s %s"),
printable_type(&parent->oid, parent->type), printable_type(&parent->oid, parent->type),

View File

@@ -893,8 +893,8 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,
if (startup_info->have_repository) { if (startup_info->have_repository) {
read_lock(); read_lock();
collision_test_needed = has_object(the_repository, oid, collision_test_needed = odb_has_object(the_repository->objects, oid,
HAS_OBJECT_FETCH_PROMISOR); HAS_OBJECT_FETCH_PROMISOR);
read_unlock(); read_unlock();
} }

View File

@@ -3968,7 +3968,7 @@ static void show_object__ma_allow_any(struct object *obj, const char *name, void
* Quietly ignore ALL missing objects. This avoids problems with * Quietly ignore ALL missing objects. This avoids problems with
* staging them now and getting an odd error later. * staging them now and getting an odd error later.
*/ */
if (!has_object(the_repository, &obj->oid, 0)) if (!odb_has_object(the_repository->objects, &obj->oid, 0))
return; return;
show_object(obj, name, data); show_object(obj, name, data);
@@ -3982,7 +3982,7 @@ static void show_object__ma_allow_promisor(struct object *obj, const char *name,
* Quietly ignore EXPECTED missing objects. This avoids problems with * Quietly ignore EXPECTED missing objects. This avoids problems with
* staging them now and getting an odd error later. * staging them now and getting an odd error later.
*/ */
if (!has_object(the_repository, &obj->oid, 0) && if (!odb_has_object(the_repository->objects, &obj->oid, 0) &&
is_promisor_object(to_pack.repo, &obj->oid)) is_promisor_object(to_pack.repo, &obj->oid))
return; return;

View File

@@ -1509,8 +1509,8 @@ static const char *update(struct command *cmd, struct shallow_info *si)
} }
if (!is_null_oid(new_oid) && if (!is_null_oid(new_oid) &&
!has_object(the_repository, new_oid, !odb_has_object(the_repository->objects, new_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) {
error("unpack should have generated %s, " error("unpack should have generated %s, "
"but I can't find it!", oid_to_hex(new_oid)); "but I can't find it!", oid_to_hex(new_oid));
ret = "bad pack"; ret = "bad pack";

View File

@@ -454,8 +454,8 @@ static int get_push_ref_states(const struct ref *remote_refs,
info->status = PUSH_STATUS_UPTODATE; info->status = PUSH_STATUS_UPTODATE;
else if (is_null_oid(&ref->old_oid)) else if (is_null_oid(&ref->old_oid))
info->status = PUSH_STATUS_CREATE; info->status = PUSH_STATUS_CREATE;
else if (has_object(the_repository, &ref->old_oid, else if (odb_has_object(the_repository->objects, &ref->old_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) && HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) &&
ref_newer(&ref->new_oid, &ref->old_oid)) ref_newer(&ref->new_oid, &ref->old_oid))
info->status = PUSH_STATUS_FASTFORWARD; info->status = PUSH_STATUS_FASTFORWARD;
else else

View File

@@ -35,8 +35,8 @@ static void show_one(const struct show_one_options *opts,
const char *hex; const char *hex;
struct object_id peeled; struct object_id peeled;
if (!has_object(the_repository, oid, if (!odb_has_object(the_repository->objects, oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
die("git show-ref: bad ref %s (%s)", refname, die("git show-ref: bad ref %s (%s)", refname,
oid_to_hex(oid)); oid_to_hex(oid));

View File

@@ -449,8 +449,8 @@ static void unpack_delta_entry(enum object_type type, unsigned long delta_size,
delta_data = get_data(delta_size); delta_data = get_data(delta_size);
if (!delta_data) if (!delta_data)
return; return;
if (has_object(the_repository, &base_oid, if (odb_has_object(the_repository->objects, &base_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
; /* Ok we have this one */ ; /* Ok we have this one */
else if (resolve_against_held(nr, &base_oid, else if (resolve_against_held(nr, &base_oid,
delta_data, delta_size)) delta_data, delta_size))

View File

@@ -130,8 +130,8 @@ static void flush_batch_fsync(void)
static int already_written(struct bulk_checkin_packfile *state, struct object_id *oid) static int already_written(struct bulk_checkin_packfile *state, struct object_id *oid)
{ {
/* The object may already exist in the repository */ /* The object may already exist in the repository */
if (has_object(the_repository, oid, if (odb_has_object(the_repository->objects, oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return 1; return 1;
/* Might want to keep the list sorted */ /* Might want to keep the list sorted */

View File

@@ -239,8 +239,8 @@ int cache_tree_fully_valid(struct cache_tree *it)
if (!it) if (!it)
return 0; return 0;
if (it->entry_count < 0 || if (it->entry_count < 0 ||
has_object(the_repository, &it->oid, odb_has_object(the_repository->objects, &it->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return 0; return 0;
for (i = 0; i < it->subtree_nr; i++) { for (i = 0; i < it->subtree_nr; i++) {
if (!cache_tree_fully_valid(it->down[i]->cache_tree)) if (!cache_tree_fully_valid(it->down[i]->cache_tree))
@@ -292,8 +292,8 @@ static int update_one(struct cache_tree *it,
} }
if (0 <= it->entry_count && if (0 <= it->entry_count &&
has_object(the_repository, &it->oid, odb_has_object(the_repository->objects, &it->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return it->entry_count; return it->entry_count;
/* /*
@@ -399,8 +399,9 @@ static int update_one(struct cache_tree *it,
ce_missing_ok = mode == S_IFGITLINK || missing_ok || ce_missing_ok = mode == S_IFGITLINK || missing_ok ||
!must_check_existence(ce); !must_check_existence(ce);
if (is_null_oid(oid) || if (is_null_oid(oid) ||
(!ce_missing_ok && !has_object(the_repository, oid, (!ce_missing_ok &&
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))) { !odb_has_object(the_repository->objects, oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))) {
strbuf_release(&buffer); strbuf_release(&buffer);
if (expected_missing) if (expected_missing)
return -1; return -1;
@@ -448,7 +449,7 @@ static int update_one(struct cache_tree *it,
struct object_id oid; struct object_id oid;
hash_object_file(the_hash_algo, buffer.buf, buffer.len, hash_object_file(the_hash_algo, buffer.buf, buffer.len,
OBJ_TREE, &oid); OBJ_TREE, &oid);
if (has_object(the_repository, &oid, HAS_OBJECT_RECHECK_PACKED)) if (odb_has_object(the_repository->objects, &oid, HAS_OBJECT_RECHECK_PACKED))
oidcpy(&it->oid, &oid); oidcpy(&it->oid, &oid);
else else
to_invalidate = 1; to_invalidate = 1;

View File

@@ -1040,7 +1040,7 @@ struct commit *lookup_commit_in_graph(struct repository *repo, const struct obje
return NULL; return NULL;
if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos)) if (!search_commit_pos_in_graph(id, repo->objects->commit_graph, &pos))
return NULL; return NULL;
if (commit_graph_paranoia && !has_object(repo, id, 0)) if (commit_graph_paranoia && !odb_has_object(repo->objects, id, 0))
return NULL; return NULL;
commit = lookup_commit(repo, id); commit = lookup_commit(repo, id);

View File

@@ -575,7 +575,7 @@ int repo_parse_commit_internal(struct repository *r,
if (commit_graph_paranoia == -1) if (commit_graph_paranoia == -1)
commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 0); commit_graph_paranoia = git_env_bool(GIT_COMMIT_GRAPH_PARANOIA, 0);
if (commit_graph_paranoia && !has_object(r, &item->object.oid, 0)) { if (commit_graph_paranoia && !odb_has_object(r->objects, &item->object.oid, 0)) {
unparse_commit(r, &item->object.oid); unparse_commit(r, &item->object.oid);
return quiet_on_missing ? -1 : return quiet_on_missing ? -1 :
error(_("commit %s exists in commit-graph but not in the object database"), error(_("commit %s exists in commit-graph but not in the object database"),

View File

@@ -142,7 +142,7 @@ static struct commit *deref_without_lazy_fetch(const struct object_id *oid,
commit = lookup_commit_in_graph(the_repository, oid); commit = lookup_commit_in_graph(the_repository, oid);
if (commit) { if (commit) {
if (mark_tags_complete_and_check_obj_db) { if (mark_tags_complete_and_check_obj_db) {
if (!has_object(the_repository, oid, 0)) if (!odb_has_object(the_repository->objects, oid, 0))
die_in_commit_graph_only(oid); die_in_commit_graph_only(oid);
} }
return commit; return commit;
@@ -770,7 +770,7 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
if (!commit) { if (!commit) {
struct object *o; struct object *o;
if (!has_object(the_repository, &ref->old_oid, 0)) if (!odb_has_object(the_repository->objects, &ref->old_oid, 0))
continue; continue;
o = parse_object(the_repository, &ref->old_oid); o = parse_object(the_repository, &ref->old_oid);
if (!o || o->type != OBJ_COMMIT) if (!o || o->type != OBJ_COMMIT)
@@ -1984,8 +1984,8 @@ static void update_shallow(struct fetch_pack_args *args,
struct oid_array extra = OID_ARRAY_INIT; struct oid_array extra = OID_ARRAY_INIT;
struct object_id *oid = si->shallow->oid; struct object_id *oid = si->shallow->oid;
for (i = 0; i < si->shallow->nr; i++) for (i = 0; i < si->shallow->nr; i++)
if (has_object(the_repository, &oid[i], if (odb_has_object(the_repository->objects, &oid[i],
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
oid_array_append(&extra, &oid[i]); oid_array_append(&extra, &oid[i]);
if (extra.nr) { if (extra.nr) {
setup_alternate_shallow(&shallow_lock, setup_alternate_shallow(&shallow_lock,

View File

@@ -1447,8 +1447,8 @@ static void one_remote_ref(const char *refname)
* may be required for updating server info later. * may be required for updating server info later.
*/ */
if (repo->can_update_info_refs && if (repo->can_update_info_refs &&
!has_object(the_repository, &ref->old_oid, !odb_has_object(the_repository->objects, &ref->old_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) {
obj = lookup_unknown_object(the_repository, &ref->old_oid); obj = lookup_unknown_object(the_repository, &ref->old_oid);
fprintf(stderr, " fetch %s for %s\n", fprintf(stderr, " fetch %s for %s\n",
oid_to_hex(&ref->old_oid), refname); oid_to_hex(&ref->old_oid), refname);
@@ -1653,14 +1653,16 @@ static int delete_remote_branch(const char *pattern, int force)
return error("Remote HEAD symrefs too deep"); return error("Remote HEAD symrefs too deep");
if (is_null_oid(&head_oid)) if (is_null_oid(&head_oid))
return error("Unable to resolve remote HEAD"); return error("Unable to resolve remote HEAD");
if (!has_object(the_repository, &head_oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) if (!odb_has_object(the_repository->objects, &head_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return error("Remote HEAD resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", oid_to_hex(&head_oid)); return error("Remote HEAD resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", oid_to_hex(&head_oid));
/* Remote branch must resolve to a known object */ /* Remote branch must resolve to a known object */
if (is_null_oid(&remote_ref->old_oid)) if (is_null_oid(&remote_ref->old_oid))
return error("Unable to resolve remote branch %s", return error("Unable to resolve remote branch %s",
remote_ref->name); remote_ref->name);
if (!has_object(the_repository, &remote_ref->old_oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) if (!odb_has_object(the_repository->objects, &remote_ref->old_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return error("Remote branch %s resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", remote_ref->name, oid_to_hex(&remote_ref->old_oid)); return error("Remote branch %s resolves to object %s\nwhich does not exist locally, perhaps you need to fetch?", remote_ref->name, oid_to_hex(&remote_ref->old_oid));
/* Remote branch must be an ancestor of remote HEAD */ /* Remote branch must be an ancestor of remote HEAD */
@@ -1881,8 +1883,8 @@ int cmd_main(int argc, const char **argv)
if (!force_all && if (!force_all &&
!is_null_oid(&ref->old_oid) && !is_null_oid(&ref->old_oid) &&
!ref->force) { !ref->force) {
if (!has_object(the_repository, &ref->old_oid, if (!odb_has_object(the_repository->objects, &ref->old_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) || HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) ||
!ref_newer(&ref->peer_ref->new_oid, !ref_newer(&ref->peer_ref->new_oid,
&ref->old_oid)) { &ref->old_oid)) {
/* /*

View File

@@ -138,8 +138,8 @@ static int fill_active_slot(void *data UNUSED)
list_for_each_safe(pos, tmp, head) { list_for_each_safe(pos, tmp, head) {
obj_req = list_entry(pos, struct object_request, node); obj_req = list_entry(pos, struct object_request, node);
if (obj_req->state == WAITING) { if (obj_req->state == WAITING) {
if (has_object(the_repository, &obj_req->oid, if (odb_has_object(the_repository->objects, &obj_req->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
obj_req->state = COMPLETE; obj_req->state = COMPLETE;
else { else {
start_object_request(obj_req); start_object_request(obj_req);
@@ -497,8 +497,8 @@ static int fetch_object(struct walker *walker, const struct object_id *oid)
if (!obj_req) if (!obj_req)
return error("Couldn't find request for %s in the queue", hex); return error("Couldn't find request for %s in the queue", hex);
if (has_object(the_repository, &obj_req->oid, if (odb_has_object(the_repository->objects, &obj_req->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) {
if (obj_req->req) if (obj_req->req)
abort_http_object_request(&obj_req->req); abort_http_object_request(&obj_req->req);
abort_object_request(obj_req); abort_object_request(obj_req);

View File

@@ -74,8 +74,8 @@ static void process_blob(struct traversal_context *ctx,
* of missing objects. * of missing objects.
*/ */
if (ctx->revs->exclude_promisor_objects && if (ctx->revs->exclude_promisor_objects &&
!has_object(the_repository, &obj->oid, !odb_has_object(the_repository->objects, &obj->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) && HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) &&
is_promisor_object(ctx->revs->repo, &obj->oid)) is_promisor_object(ctx->revs->repo, &obj->oid))
return; return;

View File

@@ -794,8 +794,8 @@ static int prune_notes_helper(const struct object_id *object_oid,
struct note_delete_list **l = (struct note_delete_list **) cb_data; struct note_delete_list **l = (struct note_delete_list **) cb_data;
struct note_delete_list *n; struct note_delete_list *n;
if (has_object(the_repository, object_oid, if (odb_has_object(the_repository->objects, object_oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return 0; /* nothing to do for this note */ return 0; /* nothing to do for this note */
/* failed to find object => prune this note */ /* failed to find object => prune this note */

6
odb.c
View File

@@ -871,7 +871,7 @@ int pretend_object_file(struct repository *repo,
char *co_buf; char *co_buf;
hash_object_file(repo->hash_algo, buf, len, type, oid); hash_object_file(repo->hash_algo, buf, len, type, oid);
if (has_object(repo, oid, 0) || if (odb_has_object(repo->objects, oid, 0) ||
find_cached_object(repo->objects, oid)) find_cached_object(repo->objects, oid))
return 0; return 0;
@@ -953,7 +953,7 @@ void *read_object_with_reference(struct repository *r,
} }
} }
int has_object(struct repository *r, const struct object_id *oid, int odb_has_object(struct object_database *odb, const struct object_id *oid,
unsigned flags) unsigned flags)
{ {
unsigned object_info_flags = 0; unsigned object_info_flags = 0;
@@ -965,7 +965,7 @@ int has_object(struct repository *r, const struct object_id *oid,
if (!(flags & HAS_OBJECT_FETCH_PROMISOR)) if (!(flags & HAS_OBJECT_FETCH_PROMISOR))
object_info_flags |= OBJECT_INFO_SKIP_FETCH_OBJECT; object_info_flags |= OBJECT_INFO_SKIP_FETCH_OBJECT;
return odb_read_object_info_extended(r->objects, oid, NULL, object_info_flags) >= 0; return odb_read_object_info_extended(odb, oid, NULL, object_info_flags) >= 0;
} }
void odb_assert_oid_type(struct object_database *odb, void odb_assert_oid_type(struct object_database *odb,

12
odb.h
View File

@@ -372,8 +372,9 @@ enum {
* Returns 1 if the object exists. This function will not lazily fetch objects * Returns 1 if the object exists. This function will not lazily fetch objects
* in a partial clone by default. * in a partial clone by default.
*/ */
int has_object(struct repository *r, const struct object_id *oid, int odb_has_object(struct object_database *odb,
unsigned flags); const struct object_id *oid,
unsigned flags);
void odb_assert_oid_type(struct object_database *odb, void odb_assert_oid_type(struct object_database *odb,
const struct object_id *oid, enum object_type expect); const struct object_id *oid, enum object_type expect);
@@ -463,4 +464,11 @@ static inline void *repo_read_object_file(struct repository *r,
return odb_read_object(r->objects, oid, type, size); return odb_read_object(r->objects, oid, type, size);
} }
static inline int has_object(struct repository *r,
const struct object_id *oid,
unsigned flags)
{
return odb_has_object(r->objects, oid, flags);
}
#endif /* ODB_H */ #endif /* ODB_H */

View File

@@ -152,7 +152,7 @@ static int tree_is_complete(const struct object_id *oid)
init_tree_desc(&desc, &tree->object.oid, tree->buffer, tree->size); init_tree_desc(&desc, &tree->object.oid, tree->buffer, tree->size);
complete = 1; complete = 1;
while (tree_entry(&desc, &entry)) { while (tree_entry(&desc, &entry)) {
if (!has_object(the_repository, &entry.oid, if (!odb_has_object(the_repository->objects, &entry.oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) || HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR) ||
(S_ISDIR(entry.mode) && !tree_is_complete(&entry.oid))) { (S_ISDIR(entry.mode) && !tree_is_complete(&entry.oid))) {
tree->object.flags |= INCOMPLETE; tree->object.flags |= INCOMPLETE;

3
refs.c
View File

@@ -376,7 +376,8 @@ int ref_resolves_to_object(const char *refname,
{ {
if (flags & REF_ISBROKEN) if (flags & REF_ISBROKEN)
return 0; return 0;
if (!has_object(repo, oid, HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { if (!odb_has_object(repo->objects, oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) {
error(_("%s does not point to a valid object!"), refname); error(_("%s does not point to a valid object!"), refname);
return 0; return 0;
} }

View File

@@ -1703,7 +1703,7 @@ void set_ref_status_for_push(struct ref *remote_refs, int send_mirror,
if (!reject_reason && !ref->deletion && !is_null_oid(&ref->old_oid)) { if (!reject_reason && !ref->deletion && !is_null_oid(&ref->old_oid)) {
if (starts_with(ref->name, "refs/tags/")) if (starts_with(ref->name, "refs/tags/"))
reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS; reject_reason = REF_STATUS_REJECT_ALREADY_EXISTS;
else if (!has_object(the_repository, &ref->old_oid, HAS_OBJECT_RECHECK_PACKED)) else if (!odb_has_object(the_repository->objects, &ref->old_oid, HAS_OBJECT_RECHECK_PACKED))
reject_reason = REF_STATUS_REJECT_FETCH_FIRST; reject_reason = REF_STATUS_REJECT_FETCH_FIRST;
else if (!lookup_commit_reference_gently(the_repository, &ref->old_oid, 1) || else if (!lookup_commit_reference_gently(the_repository, &ref->old_oid, 1) ||
!lookup_commit_reference_gently(the_repository, &ref->new_oid, 1)) !lookup_commit_reference_gently(the_repository, &ref->new_oid, 1))

View File

@@ -45,7 +45,7 @@ int option_parse_push_signed(const struct option *opt,
static void feed_object(struct repository *r, static void feed_object(struct repository *r,
const struct object_id *oid, FILE *fh, int negative) const struct object_id *oid, FILE *fh, int negative)
{ {
if (negative && !has_object(r, oid, 0)) if (negative && !odb_has_object(r->objects, oid, 0))
return; return;
if (negative) if (negative)

View File

@@ -310,8 +310,8 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
if (graft->nr_parent != -1) if (graft->nr_parent != -1)
return 0; return 0;
if (data->flags & QUICK) { if (data->flags & QUICK) {
if (!has_object(the_repository, &graft->oid, if (!odb_has_object(the_repository->objects, &graft->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
return 0; return 0;
} else if (data->flags & SEEN_ONLY) { } else if (data->flags & SEEN_ONLY) {
struct commit *c = lookup_commit(the_repository, &graft->oid); struct commit *c = lookup_commit(the_repository, &graft->oid);
@@ -477,8 +477,8 @@ void prepare_shallow_info(struct shallow_info *info, struct oid_array *sa)
ALLOC_ARRAY(info->ours, sa->nr); ALLOC_ARRAY(info->ours, sa->nr);
ALLOC_ARRAY(info->theirs, sa->nr); ALLOC_ARRAY(info->theirs, sa->nr);
for (size_t i = 0; i < sa->nr; i++) { for (size_t i = 0; i < sa->nr; i++) {
if (has_object(the_repository, sa->oid + i, if (odb_has_object(the_repository->objects, sa->oid + i,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) {
struct commit_graft *graft; struct commit_graft *graft;
graft = lookup_commit_graft(the_repository, graft = lookup_commit_graft(the_repository,
&sa->oid[i]); &sa->oid[i]);
@@ -515,8 +515,8 @@ void remove_nonexistent_theirs_shallow(struct shallow_info *info)
for (i = dst = 0; i < info->nr_theirs; i++) { for (i = dst = 0; i < info->nr_theirs; i++) {
if (i != dst) if (i != dst)
info->theirs[dst] = info->theirs[i]; info->theirs[dst] = info->theirs[i];
if (has_object(the_repository, oid + info->theirs[i], if (odb_has_object(the_repository->objects, oid + info->theirs[i],
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR))
dst++; dst++;
} }
info->nr_theirs = dst; info->nr_theirs = dst;

View File

@@ -509,7 +509,7 @@ static int got_oid(struct upload_pack_data *data,
{ {
if (get_oid_hex(hex, oid)) if (get_oid_hex(hex, oid))
die("git upload-pack: expected SHA1 object, got '%s'", hex); die("git upload-pack: expected SHA1 object, got '%s'", hex);
if (!has_object(the_repository, oid, 0)) if (!odb_has_object(the_repository->objects, oid, 0))
return -1; return -1;
return do_got_oid(data, oid); return do_got_oid(data, oid);
} }

View File

@@ -150,8 +150,8 @@ static int process(struct walker *walker, struct object *obj)
return 0; return 0;
obj->flags |= SEEN; obj->flags |= SEEN;
if (has_object(the_repository, &obj->oid, if (odb_has_object(the_repository->objects, &obj->oid,
HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) { HAS_OBJECT_RECHECK_PACKED | HAS_OBJECT_FETCH_PROMISOR)) {
/* We already have it, so we should scan it now. */ /* We already have it, so we should scan it now. */
obj->flags |= TO_SCAN; obj->flags |= TO_SCAN;
} }