builtin/add: add ODB transaction around add_files_to_cache

The add_files_to_cache function is invoked internally by builtin/commit.c and builtin/checkout.c for their flags that stage modified files before doing the larger operation. These commands can benefit from batched fsyncing. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Neeraj Singh committed Apr 4, 2022 at 22:20 UTC b4a0c6dc9733751788161ce3c181709be89045f9
1 file changed +9
builtin/add.c
+9
@@ -141,7 +141,16 @@ int add_files_to_cache(const char *prefix,
141 rev.diffopt.format_callback_data = &data;
142 rev.diffopt.flags.override_submodule_config = 1;
143 rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
144 +
145 + /*
146 + * Use an ODB transaction to optimize adding multiple objects.
147 + * This function is invoked from commands other than 'add', which
148 + * may not have their own transaction active.
149 + */
150 + begin_odb_transaction();
151 run_diff_files(&rev, DIFF_RACY_IS_MODIFIED);
152 + end_odb_transaction();
153 +
154 clear_pathspec(&rev.prune_data);
155 return !!data.add_errors;
156 }