On Mon, Feb 5, 2018 at 6:55 PM, Stefan Beller <sbeller@xxxxxxxxxx> wrote: > Grafts are only meaningful in the context of a single repository. > Therefore they cannot be global. > > Signed-off-by: Stefan Beller <sbeller@xxxxxxxxxx> > Signed-off-by: Jonathan Nieder <jrnieder@xxxxxxxxx> > --- > diff --git a/commit.c b/commit.c > @@ -121,20 +120,22 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups) > if (ignore_dups) > free(graft); > else { > - free(commit_graft[pos]); > - commit_graft[pos] = graft; > + free(the_repository->parsed_objects.grafts[pos]); > + the_repository->parsed_objects.grafts[pos] = graft; > diff --git a/object.h b/object.h > @@ -4,9 +4,13 @@ > struct object_parser { > struct object **obj_hash; > int nr_objs, obj_hash_size; > + > + /* parent substitutions from .git/info/grafts and .git/shallow */ > + struct commit_graft **grafts; > + int grafts_alloc, grafts_nr; > }; Do items moved to object_parser need to get freed when object_parser itself is freed? Is that happening in some other patch?