submodule: skip redundant active entries when pattern covers path
configure_added_submodule always writes an explicit submodule.<name>.active entry, even when the new path is already matched by submodule.active patterns. This leads to unnecessary and cluttered configuration. change the logic to centralize wildmatch-based pattern lookup, in configure_added_submodule. Wrap the active-entry write in a conditional that only fires when that helper reports no existing pattern covers the submodule’s path. Signed-off-by: K Jayatheerth <jayatheerthkulkarni2005@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
1fa06ceddf
commit
bb10dcf573
@@ -32,6 +32,8 @@
|
|||||||
#include "advice.h"
|
#include "advice.h"
|
||||||
#include "branch.h"
|
#include "branch.h"
|
||||||
#include "list-objects-filter-options.h"
|
#include "list-objects-filter-options.h"
|
||||||
|
#include "wildmatch.h"
|
||||||
|
#include "strbuf.h"
|
||||||
|
|
||||||
#define OPT_QUIET (1 << 0)
|
#define OPT_QUIET (1 << 0)
|
||||||
#define OPT_CACHED (1 << 1)
|
#define OPT_CACHED (1 << 1)
|
||||||
@@ -3329,6 +3331,9 @@ static void configure_added_submodule(struct add_data *add_data)
|
|||||||
struct child_process add_submod = CHILD_PROCESS_INIT;
|
struct child_process add_submod = CHILD_PROCESS_INIT;
|
||||||
struct child_process add_gitmodules = CHILD_PROCESS_INIT;
|
struct child_process add_gitmodules = CHILD_PROCESS_INIT;
|
||||||
|
|
||||||
|
const struct string_list *values;
|
||||||
|
size_t i;
|
||||||
|
int matched = 0;
|
||||||
key = xstrfmt("submodule.%s.url", add_data->sm_name);
|
key = xstrfmt("submodule.%s.url", add_data->sm_name);
|
||||||
git_config_set_gently(key, add_data->realrepo);
|
git_config_set_gently(key, add_data->realrepo);
|
||||||
free(key);
|
free(key);
|
||||||
@@ -3370,20 +3375,28 @@ static void configure_added_submodule(struct add_data *add_data)
|
|||||||
* is_submodule_active(), since that function needs to find
|
* is_submodule_active(), since that function needs to find
|
||||||
* out the value of "submodule.active" again anyway.
|
* out the value of "submodule.active" again anyway.
|
||||||
*/
|
*/
|
||||||
if (!git_config_get("submodule.active")) {
|
if (git_config_get("submodule.active") || /* key absent */
|
||||||
|
git_config_get_string_multi("submodule.active", &values)) {
|
||||||
/*
|
/*
|
||||||
* If the submodule being added isn't already covered by the
|
* If the submodule being added isn't already covered by the
|
||||||
* current configured pathspec, set the submodule's active flag
|
* current configured pathspec, set the submodule's active flag
|
||||||
*/
|
*/
|
||||||
if (!is_submodule_active(the_repository, add_data->sm_path)) {
|
key = xstrfmt("submodule.%s.active", add_data->sm_name);
|
||||||
|
git_config_set_gently(key, "true");
|
||||||
|
free(key);
|
||||||
|
} else {
|
||||||
|
for (i = 0; i < values->nr; i++) {
|
||||||
|
const char *pat = values->items[i].string;
|
||||||
|
if (!wildmatch(pat, add_data->sm_path, 0)) { /* match found */
|
||||||
|
matched = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!matched) { /* no pattern matched -> force-enable */
|
||||||
key = xstrfmt("submodule.%s.active", add_data->sm_name);
|
key = xstrfmt("submodule.%s.active", add_data->sm_name);
|
||||||
git_config_set_gently(key, "true");
|
git_config_set_gently(key, "true");
|
||||||
free(key);
|
free(key);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
key = xstrfmt("submodule.%s.active", add_data->sm_name);
|
|
||||||
git_config_set_gently(key, "true");
|
|
||||||
free(key);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -124,4 +124,19 @@ test_expect_success 'is-active, submodule.active and submodule add' '
|
|||||||
git -C super2 config --get submodule.mod.active
|
git -C super2 config --get submodule.mod.active
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'submodule add skips redundant active entry' '
|
||||||
|
git init repo &&
|
||||||
|
(
|
||||||
|
cd repo &&
|
||||||
|
git config submodule.active "lib/*" &&
|
||||||
|
git commit --allow-empty -m init &&
|
||||||
|
|
||||||
|
git init ../lib-origin &&
|
||||||
|
git -C ../lib-origin commit --allow-empty -m init &&
|
||||||
|
|
||||||
|
git submodule add ../lib-origin lib/foo &&
|
||||||
|
test_must_fail git config --get submodule.lib/foo.active
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|||||||
Reference in New Issue
Block a user