github.com/avfs/avfs@v0.33.1-0.20240303173310-c6ba67c33eb7/vfs/basepathfs/basepathfs_cfg.go (about) 1 // 2 // Copyright 2020 The AVFS authors 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 // 16 17 package basepathfs 18 19 import ( 20 "errors" 21 "io/fs" 22 23 "github.com/avfs/avfs" 24 ) 25 26 // New returns a new base path file system (BasePathFS). 27 func New(baseFS avfs.VFS, basePath string) *BasePathFS { 28 const op = "basepath" 29 30 absPath, _ := baseFS.Abs(basePath) 31 32 info, err := baseFS.Stat(absPath) 33 if err != nil { 34 err = &fs.PathError{Op: op, Path: basePath, Err: errors.Unwrap(err)} 35 panic(err) 36 } 37 38 if !info.IsDir() { 39 err = &fs.PathError{Op: op, Path: basePath, Err: avfs.ErrNotADirectory} 40 panic(err) 41 } 42 43 vfs := &BasePathFS{ 44 baseFS: baseFS, 45 basePath: absPath, 46 } 47 48 _ = vfs.SetFeatures(baseFS.Features() &^ avfs.FeatSymlink) 49 50 return vfs 51 } 52 53 // Name returns the name of the fileSystem. 54 func (vfs *BasePathFS) Name() string { 55 return vfs.baseFS.Name() 56 } 57 58 // OSType returns the operating system type of the file system. 59 func (vfs *BasePathFS) OSType() avfs.OSType { 60 return vfs.baseFS.OSType() 61 } 62 63 // Type returns the type of the fileSystem or Identity manager. 64 func (*BasePathFS) Type() string { 65 return "BasePathFS" 66 }