summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryuangli <yuangli@mathworks.com>2022-07-28 16:03:59 +0100
committeryuangli <yuangli@mathworks.com>2022-07-28 16:03:59 +0100
commit62cc77a16d62410140e31960189e566f16b22772 (patch)
tree84d81e460d50f6f8f0e03762f9b59c9b949cb064
parent14d2a60a5bdb6fe62b65751bda0ce01a66ac5e99 (diff)
downloadlibgit2-62cc77a16d62410140e31960189e566f16b22772.tar.gz
refactor commit parent assignment with graft
-rw-r--r--src/libgit2/commit.c36
1 files changed, 21 insertions, 15 deletions
diff --git a/src/libgit2/commit.c b/src/libgit2/commit.c
index 2138d6eb2..6f689e362 100644
--- a/src/libgit2/commit.c
+++ b/src/libgit2/commit.c
@@ -499,6 +499,22 @@ int git_commit__parse_raw(void *commit, const char *data, size_t size)
return commit_parse(commit, data, size, 0);
}
+static int assign_parents_from_graft(git_commit *commit, git_commit_graft *graft) {
+ size_t idx;
+ git_oid *oid;
+
+ git_array_clear(commit->parent_ids);
+ git_array_init_to_size(commit->parent_ids, git_array_size(graft->parents));
+ git_array_foreach(graft->parents, idx, oid) {
+ git_oid *id = git_array_alloc(commit->parent_ids);
+ GIT_ERROR_CHECK_ALLOC(id);
+
+ git_oid_cpy(id, oid);
+ }
+
+ return 0;
+}
+
int git_commit__parse_ext(git_commit *commit, git_odb_object *odb_obj, unsigned int flags)
{
git_repository *repo = git_object_owner((git_object *)commit);
@@ -513,21 +529,11 @@ int git_commit__parse_ext(git_commit *commit, git_odb_object *odb_obj, unsigned
return 0;
/* Perform necessary grafts */
- if (git_grafts_get(&graft, repo->grafts, git_odb_object_id(odb_obj)) == 0 ||
- git_grafts_get(&graft, repo->shallow_grafts, git_odb_object_id(odb_obj)) == 0) {
- size_t idx;
- git_oid *oid;
- git_array_clear(commit->parent_ids);
- git_array_init_to_size(commit->parent_ids, git_array_size(graft->parents));
- git_array_foreach(graft->parents, idx, oid) {
- git_oid *id = git_array_alloc(commit->parent_ids);
- GIT_ERROR_CHECK_ALLOC(id);
-
- git_oid_cpy(id, oid);
- }
- }
-
- return 0;
+ if (git_grafts_get(&graft, repo->grafts, git_odb_object_id(odb_obj)) != 0 &&
+ git_grafts_get(&graft, repo->shallow_grafts, git_odb_object_id(odb_obj)) != 0)
+ return 0;
+
+ return assign_parents_from_graft(commit, graft);
}
int git_commit__parse(void *_commit, git_odb_object *odb_obj)