Skip to content

Commit 6468a8d

Browse files
paulhammondmvdan
authored andcommitted
pattern: add NoGlobStar mode
This mode removes support for `**` filename pattern, matching the POSIX specification.
1 parent e82057a commit 6468a8d

File tree

2 files changed

+6
-1
lines changed

2 files changed

+6
-1
lines changed

pattern/pattern.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const (
3535
Braces // support "{a,b}" and "{1..4}"
3636
EntireString // match the entire string using ^$ delimiters
3737
NoGlobCase // Do case-insensitive match (that is, use (?i) in the regexp)
38+
NoGlobStar // Do not support "**"
3839
)
3940

4041
var numRange = regexp.MustCompile(`^([+-]?\d+)\.\.([+-]?\d+)}`)
@@ -81,7 +82,9 @@ writeLoop:
8182
case '*':
8283
if mode&Filenames != 0 {
8384
if i++; i < len(pat) && pat[i] == '*' {
84-
if i++; i < len(pat) && pat[i] == '/' {
85+
if mode&NoGlobStar != 0 {
86+
buf.WriteString("[^/]*")
87+
} else if i++; i < len(pat) && pat[i] == '/' {
8588
buf.WriteString("(.*/|)")
8689
dotMeta = true
8790
} else {

pattern/pattern_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,10 @@ var translateTests = []struct {
2525
{pat: `*foo`, mode: Filenames, want: `[^/]*foo`},
2626
{pat: `**`, want: `(?s).*.*`},
2727
{pat: `**`, mode: Filenames, want: `(?s).*`},
28+
{pat: `**`, mode: Filenames | NoGlobStar, want: `[^/]*`},
2829
{pat: `/**/foo`, want: `(?s)/.*.*/foo`},
2930
{pat: `/**/foo`, mode: Filenames, want: `(?s)/(.*/|)foo`},
31+
{pat: `/**/foo`, mode: Filenames | NoGlobStar, want: `/[^/]*/foo`},
3032
{pat: `/**/à`, mode: Filenames, want: `(?s)/(.*/|)à`},
3133
{pat: `/**foo`, mode: Filenames, want: `(?s)/.*foo`},
3234
{pat: `\*`, want: `\*`},

0 commit comments

Comments
 (0)