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
}