summaryrefslogtreecommitdiff
path: root/commit.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2022-06-13 15:53:42 -0700
committerJunio C Hamano <gitster@pobox.com>2022-06-13 15:53:42 -0700
commiteef985e17af956b341b08ed7ad47f3941cb7da94 (patch)
tree64a39f19d76af42abc04114a621a3a17fac26b5f /commit.c
parent1a7f6be5b17f572fc68ff2a2e0c079d50c671c74 (diff)
parent4d4e49fff17122e0eec185857fa87d526174859f (diff)
downloadgit-eef985e17af956b341b08ed7ad47f3941cb7da94.tar.gz
Merge branch 'jt/unparse-commit-upon-graft-change'
Updating the graft information invalidates the list of parents of in-core commit objects that used to be in the graft file. * jt/unparse-commit-upon-graft-change: commit,shallow: unparse commits if grafts changed
Diffstat (limited to 'commit.c')
-rw-r--r--commit.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/commit.c b/commit.c
index 9628716bf2..73865fee15 100644
--- a/commit.c
+++ b/commit.c
@@ -120,6 +120,17 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid)
commit_graft_oid_access);
}
+static void unparse_commit(struct repository *r, const struct object_id *oid)
+{
+ struct commit *c = lookup_commit(r, oid);
+
+ if (!c->object.parsed)
+ return;
+ free_commit_list(c->parents);
+ c->parents = NULL;
+ c->object.parsed = 0;
+}
+
int register_commit_graft(struct repository *r, struct commit_graft *graft,
int ignore_dups)
{
@@ -145,6 +156,7 @@ int register_commit_graft(struct repository *r, struct commit_graft *graft,
(r->parsed_objects->grafts_nr - pos - 1) *
sizeof(*r->parsed_objects->grafts));
r->parsed_objects->grafts[pos] = graft;
+ unparse_commit(r, &graft->oid);
return 0;
}
@@ -253,8 +265,10 @@ void reset_commit_grafts(struct repository *r)
{
int i;
- for (i = 0; i < r->parsed_objects->grafts_nr; i++)
+ for (i = 0; i < r->parsed_objects->grafts_nr; i++) {
+ unparse_commit(r, &r->parsed_objects->grafts[i]->oid);
free(r->parsed_objects->grafts[i]);
+ }
r->parsed_objects->grafts_nr = 0;
r->parsed_objects->commit_graft_prepared = 0;
}