diff options
author | Junio C Hamano <gitster@pobox.com> | 2022-06-13 15:53:42 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-06-13 15:53:42 -0700 |
commit | eef985e17af956b341b08ed7ad47f3941cb7da94 (patch) | |
tree | 64a39f19d76af42abc04114a621a3a17fac26b5f /commit.c | |
parent | 1a7f6be5b17f572fc68ff2a2e0c079d50c671c74 (diff) | |
parent | 4d4e49fff17122e0eec185857fa87d526174859f (diff) | |
download | git-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.c | 16 |
1 files changed, 15 insertions, 1 deletions
@@ -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; } |