|
32 | 32 | #include "advice.h"
|
33 | 33 | #include "branch.h"
|
34 | 34 | #include "list-objects-filter-options.h"
|
| 35 | +#include "wildmatch.h" |
| 36 | +#include "strbuf.h" |
35 | 37 |
|
36 | 38 | #define OPT_QUIET (1 << 0)
|
37 | 39 | #define OPT_CACHED (1 << 1)
|
@@ -3329,6 +3331,9 @@ static void configure_added_submodule(struct add_data *add_data)
|
3329 | 3331 | struct child_process add_submod = CHILD_PROCESS_INIT;
|
3330 | 3332 | struct child_process add_gitmodules = CHILD_PROCESS_INIT;
|
3331 | 3333 |
|
| 3334 | + const struct string_list *values; |
| 3335 | + size_t i; |
| 3336 | + int matched = 0; |
3332 | 3337 | key = xstrfmt("submodule.%s.url", add_data->sm_name);
|
3333 | 3338 | git_config_set_gently(key, add_data->realrepo);
|
3334 | 3339 | free(key);
|
@@ -3370,20 +3375,28 @@ static void configure_added_submodule(struct add_data *add_data)
|
3370 | 3375 | * is_submodule_active(), since that function needs to find
|
3371 | 3376 | * out the value of "submodule.active" again anyway.
|
3372 | 3377 | */
|
3373 |
| - if (!git_config_get("submodule.active")) { |
| 3378 | + if (git_config_get("submodule.active") || /* key absent */ |
| 3379 | + git_config_get_string_multi("submodule.active", &values)) { |
3374 | 3380 | /*
|
3375 | 3381 | * If the submodule being added isn't already covered by the
|
3376 | 3382 | * current configured pathspec, set the submodule's active flag
|
3377 | 3383 | */
|
3378 |
| - if (!is_submodule_active(the_repository, add_data->sm_path)) { |
| 3384 | + key = xstrfmt("submodule.%s.active", add_data->sm_name); |
| 3385 | + git_config_set_gently(key, "true"); |
| 3386 | + free(key); |
| 3387 | + } else { |
| 3388 | + for (i = 0; i < values->nr; i++) { |
| 3389 | + const char *pat = values->items[i].string; |
| 3390 | + if (!wildmatch(pat, add_data->sm_path, 0)) { /* match found */ |
| 3391 | + matched = 1; |
| 3392 | + break; |
| 3393 | + } |
| 3394 | + } |
| 3395 | + if (!matched) { /* no pattern matched -> force-enable */ |
3379 | 3396 | key = xstrfmt("submodule.%s.active", add_data->sm_name);
|
3380 | 3397 | git_config_set_gently(key, "true");
|
3381 | 3398 | free(key);
|
3382 | 3399 | }
|
3383 |
| - } else { |
3384 |
| - key = xstrfmt("submodule.%s.active", add_data->sm_name); |
3385 |
| - git_config_set_gently(key, "true"); |
3386 |
| - free(key); |
3387 | 3400 | }
|
3388 | 3401 | }
|
3389 | 3402 |
|
|
0 commit comments