commit - 40dc5ff850c9b70725e0ae5ef7e12a05fe0ea894
commit + ea35256be57fbb7d6afbedd8382c9e6e36b39718
blob - 66fcf360ef08cd9ad2a75fee374b6553129d6d2c
blob + 1cd78bd397de872885840daf766fa91b523f1545
--- lib/object.c
+++ lib/object.c
struct got_repository *repo, struct got_object *obj)
{
const struct got_error *err = NULL;
- FILE *f;
if (obj->type != GOT_OBJ_TYPE_COMMIT)
return got_error(GOT_ERR_OBJ_TYPE);
- if (obj->flags & GOT_OBJ_FLAG_PACKED)
- err = got_packfile_extract_object(&f, obj, repo);
- else
+ if (obj->flags & GOT_OBJ_FLAG_PACKED) {
+ uint8_t *buf;
+ size_t len;
+ err = got_packfile_extract_object_to_mem(&buf, &len, obj, repo);
+ if (err)
+ return err;
+ len -= obj->hdrlen;
+ err = parse_commit_object(commit, buf + obj->hdrlen, len);
+ free(buf);
+ } else {
+ FILE *f;
err = open_loose_object(&f, obj, repo);
- if (err)
- return err;
-
- err = read_commit_object(commit, repo, obj, f);
- fclose(f);
+ if (err)
+ return err;
+ err = read_commit_object(commit, repo, obj, f);
+ fclose(f);
+ }
return err;
}
blob - a9f4e70b4c44660ba309da7d3b76b74528c49f6a
blob + df4373930ad456a300065c03df84108b1aa55891
--- lib/pack.c
+++ lib/pack.c
const struct got_error *err = NULL;
FILE *packfile = NULL;
- if (obj->type != GOT_OBJ_TYPE_TREE)
- return got_error(GOT_ERR_OBJ_TYPE);
-
if ((obj->flags & GOT_OBJ_FLAG_PACKED) == 0)
return got_error(GOT_ERR_OBJ_NOT_PACKED);