forked from mirror/afero
Fix CopyOnWriteFs Stat to handle *os.PathError
CopyOnWriteFs Stat function only checks its base file system's file or directory when its layer file system returns Stat error but if the layer file system type is OsFs, it returns *os.PathError not syscall.ENOENT so in this case, the base file system's file or directory is never checked. This fixes the behavior above by expanding *os.PathError and repacking the error code if the error type is *os.PathError.
This commit is contained in:
parent
27290598eb
commit
3bf3fe3a71
|
@ -75,14 +75,17 @@ func (u *CopyOnWriteFs) Chmod(name string, mode os.FileMode) error {
|
|||
|
||||
func (u *CopyOnWriteFs) Stat(name string) (os.FileInfo, error) {
|
||||
fi, err := u.layer.Stat(name)
|
||||
switch err {
|
||||
case nil:
|
||||
return fi, nil
|
||||
case syscall.ENOENT:
|
||||
return u.base.Stat(name)
|
||||
default:
|
||||
return nil, err
|
||||
if err != nil {
|
||||
origErr := err
|
||||
if e, ok := err.(*os.PathError); ok {
|
||||
err = e.Err
|
||||
}
|
||||
if err == syscall.ENOENT {
|
||||
return u.base.Stat(name)
|
||||
}
|
||||
return nil, origErr
|
||||
}
|
||||
return fi, nil
|
||||
}
|
||||
|
||||
// Renaming files present only in the base layer is not permitted
|
||||
|
|
Loading…
Reference in New Issue