diff --git a/go.mod b/go.mod index 62ef1388..46891a7c 100644 --- a/go.mod +++ b/go.mod @@ -64,7 +64,7 @@ require ( golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064 golang.org/x/net v0.0.0-20220225172249-27dd8689420f golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a - golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 + golang.org/x/sys v0.0.0-20220325203850-36772127a21f golang.org/x/time v0.0.0-20220224211638-0e9765cccd65 google.golang.org/api v0.73.0 gopkg.in/natefinch/lumberjack.v2 v2.0.0 @@ -115,7 +115,7 @@ require ( github.com/lestrrat-go/httpcc v1.0.0 // indirect github.com/lestrrat-go/iter v1.0.1 // indirect github.com/lestrrat-go/option v1.0.0 // indirect - github.com/lufia/plan9stats v0.0.0-20220305071607-d0b38dbe16db // indirect + github.com/lufia/plan9stats v0.0.0-20220326011226-f1430873d8db // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-colorable v0.1.12 // indirect github.com/mattn/go-isatty v0.0.14 // indirect diff --git a/go.sum b/go.sum index 14c26cf6..3a06d5ec 100644 --- a/go.sum +++ b/go.sum @@ -544,8 +544,8 @@ github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lithammer/shortuuid/v3 v3.0.7 h1:trX0KTHy4Pbwo/6ia8fscyHoGA+mf1jWbPJVuvyJQQ8= github.com/lithammer/shortuuid/v3 v3.0.7/go.mod h1:vMk8ke37EmiewwolSO1NLW8vP4ZaKlRuDIi8tWWmAts= github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lufia/plan9stats v0.0.0-20220305071607-d0b38dbe16db h1:QT3DrSQsMWGKZMArbkP9FlS2ZnPLA2z8D7fU+G3BZ3o= -github.com/lufia/plan9stats v0.0.0-20220305071607-d0b38dbe16db/go.mod h1:VgrrWVwBO2+6XKn8ypT3WUqvoxCa8R2M5to2tRzGovI= +github.com/lufia/plan9stats v0.0.0-20220326011226-f1430873d8db h1:m2s7Fwo4OwmcheIWUc/Nw9/MZ0eFtP3to0ovTpqOiCQ= +github.com/lufia/plan9stats v0.0.0-20220326011226-f1430873d8db/go.mod h1:VgrrWVwBO2+6XKn8ypT3WUqvoxCa8R2M5to2tRzGovI= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= @@ -908,8 +908,8 @@ golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220325203850-36772127a21f h1:TrmogKRsSOxRMJbLYGrB4SBbW+LJcEllYBLME5Zk5pU= +golang.org/x/sys v0.0.0-20220325203850-36772127a21f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= diff --git a/vfs/azblobfs.go b/vfs/azblobfs.go index 1f132394..e96068bf 100644 --- a/vfs/azblobfs.go +++ b/vfs/azblobfs.go @@ -19,6 +19,7 @@ import ( "sync" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" "github.com/Azure/azure-sdk-for-go/sdk/storage/azblob" "github.com/eikenb/pipeat" @@ -177,7 +178,7 @@ func (fs *AzureBlobFs) Stat(name string) (os.FileInfo, error) { if hasContents { return updateFileInfoModTime(fs.getStorageID(), name, NewFileInfo(name, true, 0, time.Now(), false)) } - return nil, errors.New("404 no such file or directory") + return nil, os.ErrNotExist } // Lstat returns a FileInfo describing the named file @@ -494,12 +495,17 @@ func (*AzureBlobFs) IsNotExist(err error) bool { if err == nil { return false } - var errResp *azblob.StorageError - if errors.As(err, &errResp) { - return errResp.StatusCode() == http.StatusNotFound + var errStorage *azblob.StorageError + if errors.As(err, &errStorage) { + return errStorage.StatusCode() == http.StatusNotFound } - return false + var errResp *azcore.ResponseError + if errors.As(err, &errResp) { + return errResp.StatusCode == http.StatusNotFound + } + // os.ErrNotExist can be returned internally by fs.Stat + return errors.Is(err, os.ErrNotExist) } // IsPermission returns a boolean indicating whether the error is known to @@ -508,12 +514,17 @@ func (*AzureBlobFs) IsPermission(err error) bool { if err == nil { return false } - var errResp *azblob.StorageError - if errors.As(err, &errResp) { - statusCode := errResp.StatusCode() + var errStorage *azblob.StorageError + if errors.As(err, &errStorage) { + statusCode := errStorage.StatusCode() return statusCode == http.StatusForbidden || statusCode == http.StatusUnauthorized } + var errResp *azcore.ResponseError + if errors.As(err, &errResp) { + return errResp.StatusCode == http.StatusForbidden || errResp.StatusCode == http.StatusUnauthorized + } + return false }