summaryrefslogtreecommitdiff
path: root/submodule.c
diff options
context:
space:
mode:
authorLibravatar Stefan Beller <sbeller@google.com>2017-05-26 12:10:12 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-05-30 14:28:53 +0900
commitd7a3803f9e83242adac0f02af843ef0520c71f0a (patch)
tree8bf2a8812f7529fdb56606719db8e674fdf47d09 /submodule.c
parentsubmodule test invocation: only pass additional arguments (diff)
downloadtgif-d7a3803f9e83242adac0f02af843ef0520c71f0a.tar.xz
reset/checkout/read-tree: unify config callback for submodule recursion
The callback function is essentially duplicated 3 times. Remove all of them and offer a new callback function, that lives in submodule.c By putting the callback function there, we no longer need the function 'set_config_update_recurse_submodules', nor duplicate the global variable in each builtin as well as submodule.c In the three builtins we have different 2 ways how to load the .gitmodules and config file, which are slightly different. git-checkout has to load the submodule config all the time due to 23b4c7bcc5 (checkout: Use submodule.*.ignore settings from .git/config and .gitmodules, 2010-08-28) git-reset and git-read-tree do not respect these diff settings, so loading the submodule configuration is optional. Also put that into submodule.c for code deduplication. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'submodule.c')
-rw-r--r--submodule.c33
1 files changed, 27 insertions, 6 deletions
diff --git a/submodule.c b/submodule.c
index 54825100b2..c9e764b519 100644
--- a/submodule.c
+++ b/submodule.c
@@ -18,7 +18,7 @@
#include "worktree.h"
static int config_fetch_recurse_submodules = RECURSE_SUBMODULES_ON_DEMAND;
-static int config_update_recurse_submodules = RECURSE_SUBMODULES_DEFAULT;
+static int config_update_recurse_submodules = RECURSE_SUBMODULES_OFF;
static int parallel_jobs = 1;
static struct string_list changed_submodule_paths = STRING_LIST_INIT_DUP;
static int initialized_fetch_ref_tips;
@@ -169,6 +169,32 @@ int submodule_config(const char *var, const char *value, void *cb)
return 0;
}
+int option_parse_recurse_submodules_worktree_updater(const struct option *opt,
+ const char *arg, int unset)
+{
+ if (unset) {
+ config_update_recurse_submodules = RECURSE_SUBMODULES_OFF;
+ return 0;
+ }
+ if (arg)
+ config_update_recurse_submodules =
+ parse_update_recurse_submodules_arg(opt->long_name,
+ arg);
+ else
+ config_update_recurse_submodules = RECURSE_SUBMODULES_ON;
+
+ return 0;
+}
+
+void load_submodule_cache(void)
+{
+ if (config_update_recurse_submodules == RECURSE_SUBMODULES_OFF)
+ return;
+
+ gitmodules_config();
+ git_config(submodule_config, NULL);
+}
+
void gitmodules_config(void)
{
const char *work_tree = get_git_work_tree();
@@ -596,11 +622,6 @@ void set_config_fetch_recurse_submodules(int value)
config_fetch_recurse_submodules = value;
}
-void set_config_update_recurse_submodules(int value)
-{
- config_update_recurse_submodules = value;
-}
-
int should_update_submodules(void)
{
return config_update_recurse_submodules == RECURSE_SUBMODULES_ON;