mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Fix use of **/ in .dockerignore
.dockerignore pattern of **/.foo incorrectly matched **/bar.foo because **/.foo was getting converted into a .*\.foo regex instead of (.*/)*\.foo Closes #29014 Signed-off-by: Doug Davis <dug@us.ibm.com>
This commit is contained in:
parent
523ad6ac71
commit
376bb84c5c
2 changed files with 11 additions and 7 deletions
|
@ -161,17 +161,19 @@ func regexpMatch(pattern, path string) (bool, error) {
|
|||
// is some flavor of "**"
|
||||
scan.Next()
|
||||
|
||||
// Treat **/ as ** so eat the "/"
|
||||
if string(scan.Peek()) == sl {
|
||||
scan.Next()
|
||||
}
|
||||
|
||||
if scan.Peek() == scanner.EOF {
|
||||
// is "**EOF" - to align with .gitignore just accept all
|
||||
regStr += ".*"
|
||||
} else {
|
||||
// is "**"
|
||||
regStr += "((.*" + escSL + ")|([^" + escSL + "]*))"
|
||||
}
|
||||
|
||||
// Treat **/ as ** so eat the "/"
|
||||
if string(scan.Peek()) == sl {
|
||||
scan.Next()
|
||||
// Note that this allows for any # of /'s (even 0) because
|
||||
// the .* will eat everything, even /'s
|
||||
regStr += "(.*" + escSL + ")?"
|
||||
}
|
||||
} else {
|
||||
// is "*" so map it to anything but "/"
|
||||
|
|
|
@ -325,7 +325,7 @@ func TestMatches(t *testing.T) {
|
|||
{"**", "/", true},
|
||||
{"**/", "/", true},
|
||||
{"**", "dir/file", true},
|
||||
{"**/", "dir/file", false},
|
||||
{"**/", "dir/file", true},
|
||||
{"**", "dir/file/", true},
|
||||
{"**/", "dir/file/", true},
|
||||
{"**/**", "dir/file", true},
|
||||
|
@ -379,6 +379,8 @@ func TestMatches(t *testing.T) {
|
|||
{"abc/**", "abc", false},
|
||||
{"abc/**", "abc/def", true},
|
||||
{"abc/**", "abc/def/ghi", true},
|
||||
{"**/.foo", ".foo", true},
|
||||
{"**/.foo", "bar.foo", false},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
|
Loading…
Reference in a new issue