cache-tree: Write updated cache-tree after commit
[gitweb.git] / builtin / commit.c
index 12afc42d197bfaffc950e7f44acb5d75517f1fc2..77570c48ba02adf7aa78654c644b13478246a4e0 100644 (file)
@@ -342,6 +342,17 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
 
                discard_cache();
                read_cache_from(index_lock.filename);
+               if (update_main_cache_tree(WRITE_TREE_SILENT) == 0) {
+                       fd = open(index_lock.filename, O_WRONLY);
+                       if (fd >= 0)
+                               if (write_cache(fd, active_cache, active_nr) < 0)
+                                       die(_("unable to write index file"));
+                               else
+                                       close_lock_file(&index_lock);
+                       else
+                               die(_("unable to write index file"));
+               } else
+                       warning(_("Failed to update main cache tree"));
 
                commit_style = COMMIT_NORMAL;
                return index_lock.filename;
@@ -383,8 +394,12 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
        if (!only && !pathspec.nr) {
                fd = hold_locked_index(&index_lock, 1);
                refresh_cache_or_die(refresh_flags);
-               if (active_cache_changed) {
+               if (active_cache_changed
+                   || !cache_tree_fully_valid(active_cache_tree)) {
                        update_main_cache_tree(WRITE_TREE_SILENT);
+                       active_cache_changed = 1;
+               }
+               if (active_cache_changed) {
                        if (write_cache(fd, active_cache, active_nr) ||
                            commit_locked_index(&index_lock))
                                die(_("unable to write new_index file"));
@@ -435,6 +450,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix,
        fd = hold_locked_index(&index_lock, 1);
        add_remove_files(&partial);
        refresh_cache(REFRESH_QUIET);
+       update_main_cache_tree(WRITE_TREE_SILENT);
        if (write_cache(fd, active_cache, active_nr) ||
            close_lock_file(&index_lock))
                die(_("unable to write new_index file"));