add, reset: ensure submodules can be added or reset

Commit aee9c7d65 (Submodules: Add the new "ignore" config option for diff and status) introduced the ignore configuration option for submodules so that configured submodules could be omitted from the status and diff commands. Because this flag is respected in the diff machinery it has the unintended consequence of potentially prohibiting users from adding or resetting a submodule, even when a path to the submodule is explicitly given. Ensure that submodules can be added or set, even if they are configured to be ignored, by setting the `DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG` diff flag. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Brandon Williams committed Jul 25, 2017 at 14:39 UTC 5556808690ea245708fb80383be5c1afee2fb3eb
2 files changed +2
builtin/add.c
+1
@@ -116,6 +116,7 @@ int add_files_to_cache(const char *prefix,
116 rev.diffopt.output_format = DIFF_FORMAT_CALLBACK;
117 rev.diffopt.format_callback = update_callback;
118 rev.diffopt.format_callback_data = &data;
119 + rev.diffopt.flags |= DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
120 rev.max_count = 0; /* do not compare unmerged paths with stage #2 */
121 run_diff_files(&rev, DIFF_RACY_IS_MODIFIED);
122 return !!data.add_errors;
builtin/reset.c
+1
@@ -156,6 +156,7 @@ static int read_from_tree(const struct pathspec *pathspec,
156 opt.output_format = DIFF_FORMAT_CALLBACK;
157 opt.format_callback = update_index_from_diff;
158 opt.format_callback_data = &intent_to_add;
159 + opt.flags |= DIFF_OPT_OVERRIDE_SUBMODULE_CONFIG;
160
161 if (do_diff_cache(tree_oid, &opt))
162 return 1;