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
This commit is contained in:
16
commit.c
16
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user