Teach git that, if anyone wants to squelch such warning, can do so via `git config advice.starStarNoGlobPathspec false` --- Documentation/config/advice.txt | 4 ++++ advice.c | 3 +++ advice.h | 2 ++ pathspec.c | 6 ++++-- t/t6130-pathspec-noglob.sh | 4 +++- 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt index acbd0c09aa..35aa36cfa1 100644 --- a/Documentation/config/advice.txt +++ b/Documentation/config/advice.txt @@ -119,4 +119,8 @@ advice.*:: addEmptyPathspec:: Advice shown if a user runs the add command without providing the pathspec parameter. + starStarNoGlobPathspec:: + Advice shown if a user provides a pathspec via the terminal + that contains `**`, anticipating that the pattern will be + matched using wildmatch (aka `:(glob)` magic). -- diff --git a/advice.c b/advice.c index 164742305f..5703bfba86 100644 --- a/advice.c +++ b/advice.c @@ -33,6 +33,7 @@ int advice_checkout_ambiguous_remote_branch_name = 1; int advice_submodule_alternate_error_strategy_die = 1; int advice_add_ignored_file = 1; int advice_add_empty_pathspec = 1; +int advice_star_star_no_glob_pathspec = 1; static int advice_use_color = -1; static char advice_colors[][COLOR_MAXLEN] = { @@ -95,6 +96,7 @@ static struct { { "submoduleAlternateErrorStrategyDie", &advice_submodule_alternate_error_strategy_die }, { "addIgnoredFile", &advice_add_ignored_file }, { "addEmptyPathspec", &advice_add_empty_pathspec }, + { "starStarNoGlobPathspec", &advice_star_star_no_glob_pathspec }, /* make this an alias for backward compatibility */ { "pushNonFastForward", &advice_push_update_rejected } @@ -137,6 +139,7 @@ static struct { [ADVICE_STATUS_U_OPTION] = { "statusUoption", 1 }, [ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie", 1 }, [ADVICE_WAITING_FOR_EDITOR] = { "waitingForEditor", 1 }, + [ADVICE_STAR_STAR_NO_GLOB_PATHSPEC] = { "starStarNoGlobPathspec", 1 }, }; static const char turn_off_instructions[] = diff --git a/advice.h b/advice.h index bc2432980a..c62fb47434 100644 --- a/advice.h +++ b/advice.h @@ -33,6 +33,7 @@ extern int advice_checkout_ambiguous_remote_branch_name; extern int advice_submodule_alternate_error_strategy_die; extern int advice_add_ignored_file; extern int advice_add_empty_pathspec; +extern int advice_star_star_no_glob_pathspec; /* * To add a new advice, you need to: @@ -72,6 +73,7 @@ extern int advice_add_empty_pathspec; ADVICE_STATUS_U_OPTION, ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE, ADVICE_WAITING_FOR_EDITOR, + ADVICE_STAR_STAR_NO_GLOB_PATHSPEC, }; int git_default_advice_config(const char *var, const char *value); diff --git a/pathspec.c b/pathspec.c index d5b9c0d792..879d87260d 100644 --- a/pathspec.c +++ b/pathspec.c @@ -1,4 +1,4 @@ -#include <string.h> +#include "git-compat-util.h" #include "cache.h" #include "config.h" #include "dir.h" @@ -744,11 +744,13 @@ int match_pathspec_attrs(const struct index_state *istate, } void check_missing_glob(const char *pathspec_entry, int flags) { + const char *advice = NULL; if (flags & (PATHSPEC_GLOB | PATHSPEC_LITERAL)) { return; } + advice = _("Pathspec provided contains `**`, but no :(glob) magic.\nIt will not match 0 or more directories!"); if (strstr(pathspec_entry, "**")) { - warning(_("Pathspec provided contains `**`, but no :(glob) magic.\nIt will not match 0 or more directories!")); + advise_if_enabled(ADVICE_STAR_STAR_NO_GLOB_PATHSPEC, advice); } } diff --git a/t/t6130-pathspec-noglob.sh b/t/t6130-pathspec-noglob.sh index af6cd16f76..0482030243 100755 --- a/t/t6130-pathspec-noglob.sh +++ b/t/t6130-pathspec-noglob.sh @@ -158,7 +158,9 @@ test_expect_success '**/ does not work with :(literal) and --glob-pathspecs' ' ' cat > expected <<"EOF" -warning: Pathspec provided contains `**`, but no :(glob) magic. +hint: Pathspec provided contains `**`, but no :(glob) magic. +hint: It will not match 0 or more directories! +hint: Disable this message with "git config advice.starStarNoGlobPathspec false" EOF test_expect_success '** without :(glob) warns of lacking glob magic' ' test_might_fail git stash -- "**/bar" 2>warns && -- 2.31.0