1
0
mirror of https://github.com/golang/go synced 2024-11-15 09:20:58 -07:00

[release-branch.go1] path/filepath: implement documented SkipDir behavior

««« backport 4ef88bab4b0d
path/filepath: implement documented SkipDir behavior

Currently walk() doesn't check for err == SkipDir when iterating
a directory list, but such promise is made in the docs for WalkFunc.

Fixes #3486.

R=rsc, r
CC=golang-dev
https://golang.org/cl/6257059

»»»
This commit is contained in:
Jan Mercl 2012-06-13 16:24:35 -04:00 committed by Russ Cox
parent 01faffd009
commit c30e746666
2 changed files with 28 additions and 2 deletions

View File

@ -320,8 +320,11 @@ func walk(path string, info os.FileInfo, walkFn WalkFunc) error {
}
for _, fileInfo := range list {
if err = walk(Join(path, fileInfo.Name()), fileInfo, walkFn); err != nil {
return err
err = walk(Join(path, fileInfo.Name()), fileInfo, walkFn)
if err != nil {
if !fileInfo.IsDir() || err != SkipDir {
return err
}
}
}
return nil

View File

@ -869,3 +869,26 @@ func TestDriveLetterInEvalSymlinks(t *testing.T) {
t.Errorf("Results of EvalSymlinks do not match: %q and %q", flp, fup)
}
}
func TestBug3486(t *testing.T) { // http://code.google.com/p/go/issues/detail?id=3486
root := os.Getenv("GOROOT")
lib := filepath.Join(root, "lib")
src := filepath.Join(root, "src")
seenSrc := false
filepath.Walk(root, func(pth string, info os.FileInfo, err error) error {
if err != nil {
t.Fatal(err)
}
switch pth {
case lib:
return filepath.SkipDir
case src:
seenSrc = true
}
return nil
})
if !seenSrc {
t.Fatalf("%q not seen", src)
}
}