aboutsummaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2026-03-02 17:06:53 -0800
committerJunio C Hamano <gitster@pobox.com>2026-03-02 17:06:53 -0800
commit13763ecf7d92be72beff75c59163c5448d9e085e (patch)
tree936c5d97e77cefb1f0da9b2aae1054b1433bc690 /object.c
parent34113149cfde760b6b791939c6d8d87d27ca2767 (diff)
parentbb5da75d6116c35924a04a418ef4c3182663d0a2 (diff)
downloadgit-13763ecf7d92be72beff75c59163c5448d9e085e.tar.xz
Merge branch 'ps/receive-pack-shallow-optim'
The code to accept shallow "git push" has been optimized. * ps/receive-pack-shallow-optim: commit: use commit graph in `lookup_commit_reference_gently()` commit: make `repo_parse_commit_no_graph()` more robust commit: avoid parsing non-commits in `lookup_commit_reference_gently()`
Diffstat (limited to 'object.c')
-rw-r--r--object.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/object.c b/object.c
index 4669b8d65e..99b6df3780 100644
--- a/object.c
+++ b/object.c
@@ -207,10 +207,11 @@ 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,
- unsigned flags)
+enum peel_status peel_object_ext(struct repository *r,
+ const struct object_id *name,
+ struct object_id *oid,
+ unsigned flags,
+ enum object_type *typep)
{
struct object *o = lookup_unknown_object(r, name);
@@ -220,8 +221,10 @@ enum peel_status peel_object(struct repository *r,
return PEEL_INVALID;
}
- if (o->type != OBJ_TAG)
+ if (o->type != OBJ_TAG) {
+ *typep = o->type;
return PEEL_NON_TAG;
+ }
while (o && o->type == OBJ_TAG) {
o = parse_object(r, &o->oid);
@@ -241,9 +244,19 @@ enum peel_status peel_object(struct repository *r,
return PEEL_INVALID;
oidcpy(oid, &o->oid);
+ *typep = o->type;
return PEEL_PEELED;
}
+enum peel_status peel_object(struct repository *r,
+ const struct object_id *name,
+ struct object_id *oid,
+ unsigned flags)
+{
+ enum object_type dummy;
+ return peel_object_ext(r, name, oid, flags, &dummy);
+}
+
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;