diff options
| author | Junio C Hamano <gitster@pobox.com> | 2024-05-23 09:14:08 -0700 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-05-23 09:14:08 -0700 |
| commit | e55f364398be3cfae6243ada1a6a8bb66ea7cc46 (patch) | |
| tree | b06054ea8aef86c3ea920c5b73b99ccffd26b11d /object.c | |
| parent | The sixth batch (diff) | |
| parent | refs/packed: remove references to `the_hash_algo` (diff) | |
| download | git-e55f364398be3cfae6243ada1a6a8bb66ea7cc46.tar.gz git-e55f364398be3cfae6243ada1a6a8bb66ea7cc46.zip | |
Merge branch 'ps/refs-without-the-repository-updates' into ps/ref-storage-migration
* ps/refs-without-the-repository-updates:
refs/packed: remove references to `the_hash_algo`
refs/files: remove references to `the_hash_algo`
refs/files: use correct repository
refs: remove `dwim_log()`
refs: drop `git_default_branch_name()`
refs: pass repo when peeling objects
refs: move object peeling into "object.c"
refs: pass ref store when detecting dangling symrefs
refs: convert iteration over replace refs to accept ref store
refs: retrieve worktree ref stores via associated repository
refs: refactor `resolve_gitlink_ref()` to accept a repository
refs: pass repo when retrieving submodule ref store
refs: track ref stores via strmap
refs: implement releasing ref storages
refs: rename `init_db` callback to avoid confusion
refs: adjust names for `init` and `init_db` callbacks
Diffstat (limited to 'object.c')
| -rw-r--r-- | object.c | 23 |
1 files changed, 23 insertions, 0 deletions
@@ -207,6 +207,29 @@ struct object *lookup_object_by_type(struct repository *r, } } +enum peel_status peel_object(struct repository *r, + const struct object_id *name, + struct object_id *oid) +{ + struct object *o = lookup_unknown_object(r, name); + + if (o->type == OBJ_NONE) { + int type = oid_object_info(r, name, NULL); + if (type < 0 || !object_as_type(o, type, 0)) + return PEEL_INVALID; + } + + if (o->type != OBJ_TAG) + return PEEL_NON_TAG; + + o = deref_tag_noverify(r, o); + if (!o) + return PEEL_INVALID; + + oidcpy(oid, &o->oid); + return PEEL_PEELED; +} + struct object *parse_object_buffer(struct repository *r, const struct object_id *oid, enum object_type type, unsigned long size, void *buffer, int *eaten_p) { struct object *obj; |
