Skip to content

Commit 1e7ad31

Browse files
committedJan 6, 2025··
fix: fix match when there is a escaped meta in the pattern
1 parent 1e20c6d commit 1e7ad31

File tree

4 files changed

+17
-17
lines changed

4 files changed

+17
-17
lines changed
 

‎doublestar_test.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -150,16 +150,17 @@ var matchTests = []MatchTest{
150150
{"working-sym*/*", "working-symlink/c", true, true, nil, false, false, true, !onWindows, 1, 1},
151151
{"b/**/f", "b/symlink-dir/f", true, true, nil, false, false, false, !onWindows, 2, 2},
152152
{"*/symlink-dir/*", "b/symlink-dir/f", true, true, nil, !onWindows, false, true, !onWindows, 2, 2},
153-
{"e/**", "e/**", true, true, nil, false, false, false, !onWindows, 11, 6},
154-
{"e/**", "e/*", true, true, nil, false, false, false, !onWindows, 11, 6},
155-
{"e/**", "e/?", true, true, nil, false, false, false, !onWindows, 11, 6},
156-
{"e/**", "e/[", true, true, nil, false, false, false, true, 11, 6},
157-
{"e/**", "e/]", true, true, nil, false, false, false, true, 11, 6},
158-
{"e/**", "e/[]", true, true, nil, false, false, false, true, 11, 6},
159-
{"e/**", "e/{", true, true, nil, false, false, false, true, 11, 6},
160-
{"e/**", "e/}", true, true, nil, false, false, false, true, 11, 6},
161-
{"e/**", "e/\\", true, true, nil, false, false, false, !onWindows, 11, 6},
162-
{"e/*", "e/*", true, true, nil, false, false, true, !onWindows, 10, 5},
153+
{"e/\\[owner\\]/*", "e/[owner]/p.tsx", true, true, nil, false, false, true, !onWindows, 1, 0},
154+
{"e/**", "e/**", true, true, nil, false, false, false, !onWindows, 13, 6},
155+
{"e/**", "e/*", true, true, nil, false, false, false, !onWindows, 13, 6},
156+
{"e/**", "e/?", true, true, nil, false, false, false, !onWindows, 13, 6},
157+
{"e/**", "e/[", true, true, nil, false, false, false, true, 13, 6},
158+
{"e/**", "e/]", true, true, nil, false, false, false, true, 13, 6},
159+
{"e/**", "e/[]", true, true, nil, false, false, false, true, 13, 6},
160+
{"e/**", "e/{", true, true, nil, false, false, false, true, 13, 6},
161+
{"e/**", "e/}", true, true, nil, false, false, false, true, 13, 6},
162+
{"e/**", "e/\\", true, true, nil, false, false, false, !onWindows, 13, 6},
163+
{"e/*", "e/*", true, true, nil, false, false, true, !onWindows, 11, 5},
163164
{"e/?", "e/?", true, true, nil, false, false, true, !onWindows, 7, 4},
164165
{"e/?", "e/*", true, true, nil, false, false, true, !onWindows, 7, 4},
165166
{"e/?", "e/[", true, true, nil, false, false, true, true, 7, 4},

‎glob.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import (
2929
//
3030
// Note: users should _not_ count on the returned error,
3131
// doublestar.ErrBadPattern, being equal to path.ErrBadPattern.
32-
//
3332
func Glob(fsys fs.FS, pattern string, opts ...GlobOption) ([]string, error) {
3433
if !ValidatePattern(pattern) {
3534
return nil, ErrBadPattern
@@ -107,11 +106,11 @@ func (g *glob) doGlob(fsys fs.FS, pattern string, m []string, firstSegment, befo
107106
// characters. They would be equal if they are both -1, which means `dir`
108107
// will be ".", and we know that doesn't have meta characters either.
109108
if splitIdx <= patternStart {
110-
return g.globDir(fsys, dir, pattern, matches, firstSegment, beforeMeta)
109+
return g.globDir(fsys, unescapeMeta(dir), pattern, matches, firstSegment, beforeMeta)
111110
}
112111

113112
var dirs []string
114-
dirs, err = g.doGlob(fsys, dir, matches, false, beforeMeta)
113+
dirs, err = g.doGlob(fsys, unescapeMeta(dir), matches, false, beforeMeta)
115114
if err != nil {
116115
return
117116
}

‎globwalk.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ func (g *glob) doGlobWalk(fsys fs.FS, pattern string, firstSegment, beforeMeta b
112112
// characters. They would be equal if they are both -1, which means `dir`
113113
// will be ".", and we know that doesn't have meta characters either.
114114
if splitIdx <= patternStart {
115-
return g.globDirWalk(fsys, dir, pattern, firstSegment, beforeMeta, fn)
115+
return g.globDirWalk(fsys, unescapeMeta(dir), pattern, firstSegment, beforeMeta, fn)
116116
}
117117

118-
return g.doGlobWalk(fsys, dir, false, beforeMeta, func(p string, d fs.DirEntry) error {
118+
return g.doGlobWalk(fsys, unescapeMeta(dir), false, beforeMeta, func(p string, d fs.DirEntry) error {
119119
if err := g.globDirWalk(fsys, p, pattern, firstSegment, false, fn); err != nil {
120120
return err
121121
}

‎utils.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -117,14 +117,14 @@ func FilepathGlob(pattern string, opts ...GlobOption) (matches []string, err err
117117
return []string{filepath.FromSlash(pattern)}, nil
118118
}
119119

120-
fs := os.DirFS(base)
120+
fs := os.DirFS(unescapeMeta(base))
121121
if matches, err = Glob(fs, f, opts...); err != nil {
122122
return nil, err
123123
}
124124
for i := range matches {
125125
// use path.Join because we used ToSlash above to ensure our paths are made
126126
// of forward slashes, no matter what the system uses
127-
matches[i] = filepath.FromSlash(path.Join(base, matches[i]))
127+
matches[i] = filepath.FromSlash(path.Join(unescapeMeta(base), matches[i]))
128128
}
129129
return
130130
}

0 commit comments

Comments
 (0)
Please sign in to comment.