Skip to content

Commit 015518d

Browse files
jayatheerthkulkarnigitster
authored andcommitted
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 <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 2a1035f commit 015518d

File tree

2 files changed

+36
-11
lines changed

2 files changed

+36
-11
lines changed

builtin/submodule--helper.c

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
#include "advice.h"
3333
#include "branch.h"
3434
#include "list-objects-filter-options.h"
35+
#include "wildmatch.h"
36+
#include "strbuf.h"
3537

3638
#define OPT_QUIET (1 << 0)
3739
#define OPT_CACHED (1 << 1)
@@ -3328,6 +3330,9 @@ static void configure_added_submodule(struct add_data *add_data)
33283330
char *key;
33293331
struct child_process add_submod = CHILD_PROCESS_INIT;
33303332
struct child_process add_gitmodules = CHILD_PROCESS_INIT;
3333+
const struct string_list *values;
3334+
size_t i;
3335+
int matched = 0;
33313336

33323337
key = xstrfmt("submodule.%s.url", add_data->sm_name);
33333338
git_config_set_gently(key, add_data->realrepo);
@@ -3370,20 +3375,25 @@ static void configure_added_submodule(struct add_data *add_data)
33703375
* is_submodule_active(), since that function needs to find
33713376
* out the value of "submodule.active" again anyway.
33723377
*/
3373-
if (!git_config_get("submodule.active")) {
3374-
/*
3375-
* If the submodule being added isn't already covered by the
3376-
* current configured pathspec, set the submodule's active flag
3377-
*/
3378-
if (!is_submodule_active(the_repository, add_data->sm_path)) {
3379-
key = xstrfmt("submodule.%s.active", add_data->sm_name);
3380-
git_config_set_gently(key, "true");
3381-
free(key);
3382-
}
3383-
} else {
3378+
if (git_config_get("submodule.active") || /* key absent */
3379+
git_config_get_string_multi("submodule.active", &values)) {
3380+
/* submodule.active is missing -> force-enable */
33843381
key = xstrfmt("submodule.%s.active", add_data->sm_name);
33853382
git_config_set_gently(key, "true");
33863383
free(key);
3384+
} else {
3385+
for (i = 0; i < values->nr; i++) {
3386+
const char *pat = values->items[i].string;
3387+
if (!wildmatch(pat, add_data->sm_path, 0)) { /* match found */
3388+
matched = 1;
3389+
break;
3390+
}
3391+
}
3392+
if (!matched) { /* no pattern matched -> force-enable */
3393+
key = xstrfmt("submodule.%s.active", add_data->sm_name);
3394+
git_config_set_gently(key, "true");
3395+
free(key);
3396+
}
33873397
}
33883398
}
33893399

t/t7413-submodule-is-active.sh

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,19 @@ test_expect_success 'is-active, submodule.active and submodule add' '
124124
git -C super2 config --get submodule.mod.active
125125
'
126126

127+
test_expect_success 'submodule add skips redundant active entry' '
128+
git init repo &&
129+
(
130+
cd repo &&
131+
git config submodule.active "lib/*" &&
132+
git commit --allow-empty -m init &&
133+
134+
git init ../lib-origin &&
135+
git -C ../lib-origin commit --allow-empty -m init &&
136+
137+
git submodule add ../lib-origin lib/foo &&
138+
! git config --get submodule.lib/foo.active
139+
)
140+
'
141+
127142
test_done

0 commit comments

Comments
 (0)