mirror of
https://github.com/Luzifer/ansible-role-version.git
synced 2024-12-23 19:11:20 +00:00
146 lines
5.8 KiB
Go
146 lines
5.8 KiB
Go
|
package billy
|
||
|
|
||
|
import (
|
||
|
"errors"
|
||
|
"io"
|
||
|
"os"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
var (
|
||
|
ErrReadOnly = errors.New("read-only filesystem")
|
||
|
ErrNotSupported = errors.New("feature not supported")
|
||
|
ErrCrossedBoundary = errors.New("chroot boundary crossed")
|
||
|
)
|
||
|
|
||
|
// Filesystem abstract the operations in a storage-agnostic interface.
|
||
|
// Each method implementation mimics the behavior of the equivalent functions
|
||
|
// at the os package from the standard library.
|
||
|
type Filesystem interface {
|
||
|
Basic
|
||
|
TempFile
|
||
|
Dir
|
||
|
Symlink
|
||
|
Chroot
|
||
|
}
|
||
|
|
||
|
// Basic abstract the basic operations in a storage-agnostic interface as
|
||
|
// an extension to the Basic interface.
|
||
|
type Basic interface {
|
||
|
// Create creates the named file with mode 0666 (before umask), truncating
|
||
|
// it if it already exists. If successful, methods on the returned File can
|
||
|
// be used for I/O; the associated file descriptor has mode O_RDWR.
|
||
|
Create(filename string) (File, error)
|
||
|
// Open opens the named file for reading. If successful, methods on the
|
||
|
// returned file can be used for reading; the associated file descriptor has
|
||
|
// mode O_RDONLY.
|
||
|
Open(filename string) (File, error)
|
||
|
// OpenFile is the generalized open call; most users will use Open or Create
|
||
|
// instead. It opens the named file with specified flag (O_RDONLY etc.) and
|
||
|
// perm, (0666 etc.) if applicable. If successful, methods on the returned
|
||
|
// File can be used for I/O.
|
||
|
OpenFile(filename string, flag int, perm os.FileMode) (File, error)
|
||
|
// Stat returns a FileInfo describing the named file.
|
||
|
Stat(filename string) (os.FileInfo, error)
|
||
|
// Rename renames (moves) oldpath to newpath. If newpath already exists and
|
||
|
// is not a directory, Rename replaces it. OS-specific restrictions may
|
||
|
// apply when oldpath and newpath are in different directories.
|
||
|
Rename(oldpath, newpath string) error
|
||
|
// Remove removes the named file or directory.
|
||
|
Remove(filename string) error
|
||
|
// Join joins any number of path elements into a single path, adding a
|
||
|
// Separator if necessary. Join calls filepath.Clean on the result; in
|
||
|
// particular, all empty strings are ignored. On Windows, the result is a
|
||
|
// UNC path if and only if the first path element is a UNC path.
|
||
|
Join(elem ...string) string
|
||
|
}
|
||
|
|
||
|
type TempFile interface {
|
||
|
// TempFile creates a new temporary file in the directory dir with a name
|
||
|
// beginning with prefix, opens the file for reading and writing, and
|
||
|
// returns the resulting *os.File. If dir is the empty string, TempFile
|
||
|
// uses the default directory for temporary files (see os.TempDir).
|
||
|
// Multiple programs calling TempFile simultaneously will not choose the
|
||
|
// same file. The caller can use f.Name() to find the pathname of the file.
|
||
|
// It is the caller's responsibility to remove the file when no longer
|
||
|
// needed.
|
||
|
TempFile(dir, prefix string) (File, error)
|
||
|
}
|
||
|
|
||
|
// Dir abstract the dir related operations in a storage-agnostic interface as
|
||
|
// an extension to the Basic interface.
|
||
|
type Dir interface {
|
||
|
// ReadDir reads the directory named by dirname and returns a list of
|
||
|
// directory entries sorted by filename.
|
||
|
ReadDir(path string) ([]os.FileInfo, error)
|
||
|
// MkdirAll creates a directory named path, along with any necessary
|
||
|
// parents, and returns nil, or else returns an error. The permission bits
|
||
|
// perm are used for all directories that MkdirAll creates. If path is/
|
||
|
// already a directory, MkdirAll does nothing and returns nil.
|
||
|
MkdirAll(filename string, perm os.FileMode) error
|
||
|
}
|
||
|
|
||
|
// Symlink abstract the symlink related operations in a storage-agnostic
|
||
|
// interface as an extension to the Basic interface.
|
||
|
type Symlink interface {
|
||
|
// Lstat returns a FileInfo describing the named file. If the file is a
|
||
|
// symbolic link, the returned FileInfo describes the symbolic link. Lstat
|
||
|
// makes no attempt to follow the link.
|
||
|
Lstat(filename string) (os.FileInfo, error)
|
||
|
// Symlink creates a symbolic-link from link to target. target may be an
|
||
|
// absolute or relative path, and need not refer to an existing node.
|
||
|
// Parent directories of link are created as necessary.
|
||
|
Symlink(target, link string) error
|
||
|
// Readlink returns the target path of link.
|
||
|
Readlink(link string) (string, error)
|
||
|
}
|
||
|
|
||
|
// Change abstract the FileInfo change related operations in a storage-agnostic
|
||
|
// interface as an extension to the Basic interface
|
||
|
type Change interface {
|
||
|
// Chmod changes the mode of the named file to mode. If the file is a
|
||
|
// symbolic link, it changes the mode of the link's target.
|
||
|
Chmod(name string, mode os.FileMode) error
|
||
|
// Lchown changes the numeric uid and gid of the named file. If the file is
|
||
|
// a symbolic link, it changes the uid and gid of the link itself.
|
||
|
Lchown(name string, uid, gid int) error
|
||
|
// Chown changes the numeric uid and gid of the named file. If the file is a
|
||
|
// symbolic link, it changes the uid and gid of the link's target.
|
||
|
Chown(name string, uid, gid int) error
|
||
|
// Chtimes changes the access and modification times of the named file,
|
||
|
// similar to the Unix utime() or utimes() functions.
|
||
|
//
|
||
|
// The underlying filesystem may truncate or round the values to a less
|
||
|
// precise time unit.
|
||
|
Chtimes(name string, atime time.Time, mtime time.Time) error
|
||
|
}
|
||
|
|
||
|
// Chroot abstract the chroot related operations in a storage-agnostic interface
|
||
|
// as an extension to the Basic interface.
|
||
|
type Chroot interface {
|
||
|
// Chroot returns a new filesystem from the same type where the new root is
|
||
|
// the given path. Files outside of the designated directory tree cannot be
|
||
|
// accessed.
|
||
|
Chroot(path string) (Filesystem, error)
|
||
|
// Root returns the root path of the filesystem.
|
||
|
Root() string
|
||
|
}
|
||
|
|
||
|
// File represent a file, being a subset of the os.File
|
||
|
type File interface {
|
||
|
// Name returns the name of the file as presented to Open.
|
||
|
Name() string
|
||
|
io.Writer
|
||
|
io.Reader
|
||
|
io.ReaderAt
|
||
|
io.Seeker
|
||
|
io.Closer
|
||
|
// Lock locks the file like e.g. flock. It protects against access from
|
||
|
// other processes.
|
||
|
Lock() error
|
||
|
// Unlock unlocks the file.
|
||
|
Unlock() error
|
||
|
// Truncate the file.
|
||
|
Truncate(size int64) error
|
||
|
}
|