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  }