|
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