@ -120,6 +120,17 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid)
commit_graft_oid_access);
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 register_commit_graft(struct repository *r, struct commit_graft *graft,
int ignore_dups)
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) *
(r->parsed_objects->grafts_nr - pos - 1) *
sizeof(*r->parsed_objects->grafts));
sizeof(*r->parsed_objects->grafts));
r->parsed_objects->grafts[pos] = graft;
r->parsed_objects->grafts[pos] = graft;
unparse_commit(r, &graft->oid);
return 0;
return 0;
}
}
@ -253,8 +265,10 @@ void reset_commit_grafts(struct repository *r)
{
{
int i;
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]);
free(r->parsed_objects->grafts[i]);
}
r->parsed_objects->grafts_nr = 0;
r->parsed_objects->grafts_nr = 0;
r->parsed_objects->commit_graft_prepared = 0;
r->parsed_objects->commit_graft_prepared = 0;
}
}