Re: [PATCH/RFC] grep: add a perlRegexp configuration option
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:54:23
J Smith [off-list ref] writes:
Enables the -P flag for perl regexps by default. When both the perlRegexp and extendedRegexp options are enabled, the last enabled option wins.
Turning "grep.extendedregexp" from boolean to an extended boolean to allow "grep.extendedregexp = perl" might be a better alternative. That way, the user wouldn't have to worry about 7 variants of grep.fooRegexp variables twenty years down the road, even though the set of possible values given to "grep.extendedregexp" may have grown over time by then.
quoted hunk
--- Documentation/config.txt | 6 ++++++ Documentation/git-grep.txt | 6 ++++++ builtin/grep.c | 17 +++++++++++++++-- t/t7810-grep.sh | 34 ++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+), 2 deletions(-)diff --git a/Documentation/config.txt b/Documentation/config.txt index a95e5a4..ff3019b 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt@@ -1213,6 +1213,12 @@ grep.lineNumber:: grep.extendedRegexp:: If set to true, enable '--extended-regexp' option by default. +grep.perlRegexp:: + If set to true, enable '--perl-regexp' option by default. + +When both the 'grep.extendedRegexp' and 'grep.perlRegexp' options +are used, the last enabled option wins. + gpg.program:: Use this custom program instead of "gpg" found on $PATH when making or verifying a PGP signature. The program must support thediff --git a/Documentation/git-grep.txt b/Documentation/git-grep.txt index 3bec036..8816968 100644 --- a/Documentation/git-grep.txt +++ b/Documentation/git-grep.txt@@ -45,6 +45,12 @@ grep.lineNumber:: grep.extendedRegexp:: If set to true, enable '--extended-regexp' option by default. +grep.perlRegexp:: + If set to true, enable '--perl-regexp' option by default. + +When both the 'grep.extendedRegexp' and 'grep.perlRegexp' options +are used, the last enabled option wins. + OPTIONS -------diff --git a/builtin/grep.c b/builtin/grep.c index 29adb0a..b4475e6 100644 --- a/builtin/grep.c +++ b/builtin/grep.c@@ -268,11 +268,24 @@ static int grep_config(const char *var, const char *value, void *cb) if (userdiff_config(var, value) < 0) return -1; + if (!strcmp(var, "grep.perlregexp")) { + if (git_config_bool(var, value)) { + opt->fixed = 0; + opt->pcre = 1; + } else { + opt->pcre = 0; + } + return 0; + } + if (!strcmp(var, "grep.extendedregexp")) { - if (git_config_bool(var, value)) + if (git_config_bool(var, value)) { opt->regflags |= REG_EXTENDED; - else + opt->pcre = 0; + opt->fixed = 0; + } else { opt->regflags &= ~REG_EXTENDED; + } return 0; }diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh index 24e9b19..5479dc9 100755 --- a/t/t7810-grep.sh +++ b/t/t7810-grep.sh@@ -729,6 +729,40 @@ test_expect_success LIBPCRE 'grep -P pattern' ' test_cmp expected actual ' +test_expect_success LIBPCRE 'grep pattern with grep.perlRegexp=true' ' + git \ + -c grep.perlregexp=true \ + grep "\p{Ps}.*?\p{Pe}" hello.c >actual && + test_cmp expected actual +' + +test_expect_success LIBPCRE 'grep pattern with grep.perlRegexp=true and then grep.extendedRegexp=true' ' + test_must_fail git \ + -c grep.perlregexp=true \ + -c grep.extendedregexp=true \ + grep "\p{Ps}.*?\p{Pe}" hello.c +' + +test_expect_success LIBPCRE 'grep pattern with grep.extendedRegexp=true and then grep.perlRegexp=true' ' + git \ + -c grep.extendedregexp=true \ + -c grep.perlregexp=true \ + grep "\p{Ps}.*?\p{Pe}" hello.c >actual && + test_cmp expected actual +' + +test_expect_success LIBPCRE 'grep -E pattern with grep.perlRegexp=true' ' + test_must_fail git \ + -c grep.perlregexp=true \ + grep -E "\p{Ps}.*?\p{Pe}" hello.c +' + +test_expect_success LIBPCRE 'grep -G pattern with grep.perlRegexp=true' ' + test_must_fail git \ + -c grep.perlregexp=true \ + grep -G "\p{Ps}.*?\p{Pe}" hello.c +' + test_expect_success 'grep pattern with grep.extendedRegexp=true' ' >empty && test_must_fail git -c grep.extendedregexp=true \ --1.7.11.3