Don't rely on overlaying the repository's config on top of the submodule-config, instead query the repository's config directory for the submodule's update strategy. Also remove the overlaying of the repository's config (via using 'submodule_config()') from the commands which use the unpack-trees logic (checkout, read-tree, reset). Signed-off-by: Brandon Williams <bmwill@xxxxxxxxxx> --- builtin/checkout.c | 2 +- submodule.c | 1 - unpack-trees.c | 12 +++++++++--- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/builtin/checkout.c b/builtin/checkout.c index 9661e1bcb..246e0cd16 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -858,7 +858,7 @@ static int git_checkout_config(const char *var, const char *value, void *cb) } if (starts_with(var, "submodule.")) - return submodule_config(var, value, NULL); + return git_default_submodule_config(var, value, NULL); return git_xmerge_config(var, value, NULL); } diff --git a/submodule.c b/submodule.c index f86b82fbb..13380fed1 100644 --- a/submodule.c +++ b/submodule.c @@ -235,7 +235,6 @@ void load_submodule_cache(void) return; gitmodules_config(); - git_config(submodule_config, NULL); } static int gitmodules_cb(const char *var, const char *value, void *data) diff --git a/unpack-trees.c b/unpack-trees.c index dd535bc84..dc66b880d 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1,5 +1,6 @@ #define NO_THE_INDEX_COMPATIBILITY_MACROS #include "cache.h" +#include "repository.h" #include "config.h" #include "dir.h" #include "tree.h" @@ -255,13 +256,16 @@ static int check_submodule_move_head(const struct cache_entry *ce, { unsigned flags = SUBMODULE_MOVE_HEAD_DRY_RUN; const struct submodule *sub = submodule_from_ce(ce); + struct submodule_update_strategy update; + if (!sub) return 0; if (o->reset) flags |= SUBMODULE_MOVE_HEAD_FORCE; - switch (sub->update_strategy.type) { + update = submodule_strategy_with_config_overlayed(the_repository, sub); + switch (update.type) { case SM_UPDATE_UNSPECIFIED: case SM_UPDATE_CHECKOUT: if (submodule_move_head(ce->name, old_id, new_id, flags)) @@ -293,7 +297,6 @@ static void reload_gitmodules_file(struct index_state *index, submodule_free(); checkout_entry(ce, state, NULL); gitmodules_config(); - git_config(submodule_config, NULL); } else break; } @@ -308,7 +311,10 @@ static void unlink_entry(const struct cache_entry *ce) { const struct submodule *sub = submodule_from_ce(ce); if (sub) { - switch (sub->update_strategy.type) { + struct submodule_update_strategy update = + submodule_strategy_with_config_overlayed(the_repository, + sub); + switch (update.type) { case SM_UPDATE_UNSPECIFIED: case SM_UPDATE_CHECKOUT: case SM_UPDATE_REBASE: -- 2.14.0.rc0.400.g1c36432dff-goog