Code

Merge branch 'master' into pb/gitpm
[git.git] / commit.c
index 77f0ca175c66b0ef0b7ac5b24672b106c6f17178..4d5c0c294568bb67c6e236ff2f45c61d3bdfd790 100644 (file)
--- a/commit.c
+++ b/commit.c
@@ -163,6 +163,14 @@ int register_commit_graft(struct commit_graft *graft, int ignore_dups)
        return 0;
 }
 
+void free_commit_grafts(void)
+{
+       int pos = commit_graft_nr;
+       while (pos >= 0)
+               free(commit_graft[pos--]);
+       commit_graft_nr = 0;
+}
+
 struct commit_graft *read_graft_line(char *buf, int len)
 {
        /* The format is just "Commit Parent1 Parent2 ...\n" */
@@ -215,11 +223,18 @@ int read_graft_file(const char *graft_file)
 static void prepare_commit_graft(void)
 {
        static int commit_graft_prepared;
-       char *graft_file;
+       static char *last_graft_file;
+       char *graft_file = get_graft_file();
+
+       if (last_graft_file) {
+               if (!strcmp(graft_file, last_graft_file))
+                       return;
+               free_commit_grafts();
+       }
+       if (last_graft_file)
+               free(last_graft_file);
+       last_graft_file = strdup(graft_file);
 
-       if (commit_graft_prepared)
-               return;
-       graft_file = get_graft_file();
        read_graft_file(graft_file);
        commit_graft_prepared = 1;
 }