Duy Nguyen <pclouds@xxxxxxxxx> writes: > Writing cache tree early in prepare_index() does help hooks, but I > would say hooks are uncommon case and we could add an option to > update-index to explicitly rebuild cache-tree, then hooks that do diff > a lot (or other operations that use cache-tree) could rebuild > cache-tree by themselves. Yes, "update-index --update-cache-tree" would be a good addition for completeness; scripts working with plumbing should be able to do what built-in Porcelains can. They can of course do "write-tree" in the meantime so I do not see it as a very high priority, though. This should apply on top of 'master', and if the series under discussion turns out to be a good idea, the new call to update-main-cache-tree I added to this code path should use the option added by the series that only repairs parts of cache-trees that can be repaird without writing out new trees, so it is just to give hints to future people (iow I am not going to apply this patch myself right now). builtin/update-index.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/builtin/update-index.c b/builtin/update-index.c index ebea285..1ce2274 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -26,6 +26,7 @@ static int allow_remove; static int allow_replace; static int info_only; static int force_remove; +static int update_cache_tree; static int verbose; static int mark_valid_only; static int mark_skip_worktree_only; @@ -762,6 +763,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix) OPT_BIT(0, "unmerged", &refresh_args.flags, N_("refresh even if index contains unmerged entries"), REFRESH_UNMERGED), + OPT_BOOL(0, "update-cache-tree", &update_cache_tree, + N_("update cache-tree before writing the result out")), {OPTION_CALLBACK, 0, "refresh", &refresh_args, NULL, N_("refresh stat information"), PARSE_OPT_NOARG | PARSE_OPT_NONEG, @@ -918,6 +921,11 @@ int cmd_update_index(int argc, const char **argv, const char *prefix) strbuf_release(&buf); } + if (update_cache_tree && !unmerged_cache()) { + update_main_cache_tree(0); + active_cache_changed = 1; /* force write-out */ + } + if (active_cache_changed) { if (newfd < 0) { if (refresh_args.flags & REFRESH_QUIET) -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html