github.com/mgoltzsche/ctnr@v0.7.1-alpha/pkg/fs/node.go (about) 1 package fs 2 3 import ( 4 "io" 5 6 "github.com/mgoltzsche/ctnr/pkg/idutils" 7 "github.com/openSUSE/umoci/pkg/fseval" 8 "github.com/opencontainers/go-digest" 9 ) 10 11 // TODO: also support opaque whiteout (.wh..wh..opq): https://github.com/opencontainers/image-spec/blob/master/layer.md#opaque-whiteout 12 const WhiteoutPrefix = ".wh." 13 14 type FSOptions struct { 15 Rootless bool 16 IdMappings idutils.IdMappings 17 FsEval fseval.FsEval 18 } 19 20 func NewFSOptions(rootless bool) FSOptions { 21 idMap := idutils.MapIdentity 22 fsEval := fseval.DefaultFsEval 23 if rootless { 24 idMap = idutils.MapRootless 25 fsEval = fseval.RootlessFsEval 26 } 27 return FSOptions{rootless, idMap, fsEval} 28 } 29 30 type FsNode interface { 31 Name() string 32 Path() string 33 Empty() bool 34 SetSource(src Source) 35 Node(path string) (FsNode, error) 36 Mkdirs(path string) (FsNode, error) 37 Link(path, targetPath string) (FsNode, FsNode, error) 38 AddUpper(path string, src Source) (FsNode, error) 39 AddLower(path string, src Source) (FsNode, error) 40 AddWhiteout(path string) (FsNode, error) 41 Remove() 42 MockDevices() 43 Normalized() (FsNode, error) 44 WriteTo(w io.Writer, attrs AttrSet) error 45 Write(Writer) error 46 Diff(FsNode) (FsNode, error) 47 Hash(AttrSet) (digest.Digest, error) 48 }