Re: [PATCH v4 4/4] cache-tree: Write updated cache-tree after commit
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Jul 8, 2014, 19:15 UTC
- Message-ID
- <xmqq61j7achx.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <CACsJy8C20oFdATHKTLK=9U3_kHu1QsuS4i74RPgQn0aTwVCC8w@mail.gmail.com>
Duy Nguyen <pclouds@gmail.com> writes:
Show 5 quoted lines
> 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)