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:
parent
01faffd009
commit
c30e746666
@ -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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user