Documentation ¶
Index ¶
- Constants
- Variables
- func Canonicalize(file string) (string, error)
- func CommonPrefix(first, second string) string
- func CopyRange(copyMethod CopyRangeMethod, src, dst File, srcOffset, dstOffset, size int64) error
- func ExpandTilde(path string) (string, error)
- func IsErrCaseConflict(err error) bool
- func IsExist(err error) bool
- func IsInternal(file string) bool
- func IsNotExist(err error) bool
- func IsParent(path, parent string) bool
- func IsPermission(err error) bool
- func IsTemporary(name string) bool
- func PathComponents(path string) []string
- func SanitizePath(path string) string
- func TempName(name string) string
- func TempNameWithPrefix(name, prefix string) string
- func UnicodeLowercaseNormalized(s string) string
- func WindowsInvalidFilename(name string) error
- func WriteFile(fs Filesystem, name string, data []byte, perm FileMode) error
- type BasicFilesystem
- func (f *BasicFilesystem) Chmod(name string, mode FileMode) error
- func (f *BasicFilesystem) Chtimes(name string, atime time.Time, mtime time.Time) error
- func (f *BasicFilesystem) Create(name string) (File, error)
- func (f *BasicFilesystem) CreateSymlink(target, name string) error
- func (f *BasicFilesystem) DirNames(name string) ([]string, error)
- func (f *BasicFilesystem) GetXattr(path string, xattrFilter XattrFilter) ([]protocol.Xattr, error)
- func (f *BasicFilesystem) Glob(pattern string) ([]string, error)
- func (f *BasicFilesystem) Hide(name string) error
- func (f *BasicFilesystem) Lchown(name, uid, gid string) error
- func (f *BasicFilesystem) Lstat(name string) (FileInfo, error)
- func (f *BasicFilesystem) Mkdir(name string, perm FileMode) error
- func (f *BasicFilesystem) MkdirAll(path string, perm FileMode) error
- func (f *BasicFilesystem) Open(name string) (File, error)
- func (f *BasicFilesystem) OpenFile(name string, flags int, mode FileMode) (File, error)
- func (f *BasicFilesystem) Options() []Option
- func (f *BasicFilesystem) PlatformData(name string, scanOwnership, scanXattrs bool, xattrFilter XattrFilter) (protocol.PlatformData, error)
- func (f *BasicFilesystem) ReadSymlink(name string) (string, error)
- func (f *BasicFilesystem) Remove(name string) error
- func (f *BasicFilesystem) RemoveAll(name string) error
- func (f *BasicFilesystem) Rename(oldpath, newpath string) error
- func (*BasicFilesystem) Roots() ([]string, error)
- func (*BasicFilesystem) SameFile(fi1, fi2 FileInfo) bool
- func (f *BasicFilesystem) SetXattr(path string, xattrs []protocol.Xattr, xattrFilter XattrFilter) error
- func (f *BasicFilesystem) Stat(name string) (FileInfo, error)
- func (*BasicFilesystem) SymlinksSupported() bool
- func (*BasicFilesystem) Type() FilesystemType
- func (f *BasicFilesystem) URI() string
- func (f *BasicFilesystem) Unhide(name string) error
- func (f *BasicFilesystem) Usage(name string) (Usage, error)
- func (*BasicFilesystem) Walk(_ string, _ WalkFunc) error
- func (f *BasicFilesystem) Watch(name string, ignore Matcher, ctx context.Context, ignorePerms bool) (<-chan Event, <-chan error, error)
- type CopyRangeMethod
- type ErrCaseConflict
- type ErrWatchEventOutsideRoot
- type Event
- type EventType
- type File
- type FileInfo
- type FileMode
- type Filesystem
- type FilesystemType
- type Matcher
- type MtimeFSOption
- type MtimeMapping
- type Option
- type OptionDetectCaseConflicts
- type OptionJunctionsAsDirs
- type Usage
- type WalkFunc
- type XattrFilter
Constants ¶
const ( ModePerm = FileMode(os.ModePerm) ModeSetgid = FileMode(os.ModeSetgid) ModeSetuid = FileMode(os.ModeSetuid) ModeSticky = FileMode(os.ModeSticky) ModeSymlink = FileMode(os.ModeSymlink) ModeType = FileMode(os.ModeType) PathSeparator = os.PathSeparator OptAppend = os.O_APPEND OptCreate = os.O_CREATE OptExclusive = os.O_EXCL OptReadOnly = os.O_RDONLY OptReadWrite = os.O_RDWR OptSync = os.O_SYNC OptTruncate = os.O_TRUNC OptWriteOnly = os.O_WRONLY )
const ( WindowsTempPrefix = "~syncthing~" UnixTempPrefix = ".syncthing." )
const WatchKqueue = false
WatchKqueue indicates if kqueue is used for filesystem watching
Variables ¶
var ( ErrWatchNotSupported = errors.New("watching is not supported") ErrXattrsNotSupported = errors.New("extended attributes are not supported on this platform") )
var CopyRangeMethod_name = map[int32]string{
0: "COPY_RANGE_METHOD_STANDARD",
1: "COPY_RANGE_METHOD_IOCTL",
2: "COPY_RANGE_METHOD_COPY_FILE_RANGE",
3: "COPY_RANGE_METHOD_SEND_FILE",
4: "COPY_RANGE_METHOD_DUPLICATE_EXTENTS",
5: "COPY_RANGE_METHOD_ALL_WITH_FALLBACK",
}
var CopyRangeMethod_value = map[string]int32{
"COPY_RANGE_METHOD_STANDARD": 0,
"COPY_RANGE_METHOD_IOCTL": 1,
"COPY_RANGE_METHOD_COPY_FILE_RANGE": 2,
"COPY_RANGE_METHOD_SEND_FILE": 3,
"COPY_RANGE_METHOD_DUPLICATE_EXTENTS": 4,
"COPY_RANGE_METHOD_ALL_WITH_FALLBACK": 5,
}
var ErrExist = fs.ErrExist
ErrExist is the equivalent of os.ErrExist
var ErrInfiniteRecursion = errors.New("infinite filesystem recursion detected")
var ErrNotExist = fs.ErrNotExist
ErrNotExist is the equivalent of os.ErrNotExist
var FilesystemType_name = map[int32]string{
0: "FILESYSTEM_TYPE_BASIC",
1: "FILESYSTEM_TYPE_FAKE",
}
var FilesystemType_value = map[string]int32{
"FILESYSTEM_TYPE_BASIC": 0,
"FILESYSTEM_TYPE_FAKE": 1,
}
var IsPathSeparator = os.IsPathSeparator
IsPathSeparator is the equivalent of os.IsPathSeparator
var SkipDir = filepath.SkipDir
SkipDir is used as a return value from WalkFuncs to indicate that the directory named in the call is to be skipped. It is not returned as an error by any function.
Functions ¶
func Canonicalize ¶ added in v0.14.46
Canonicalize checks that the file path is valid and returns it in the "canonical" form: - /foo/bar -> foo/bar - / -> "."
func CommonPrefix ¶ added in v1.1.4
func CopyRange ¶ added in v1.8.0
func CopyRange(copyMethod CopyRangeMethod, src, dst File, srcOffset, dstOffset, size int64) error
CopyRange tries to use the specified method to copy data between two files. Takes size bytes at offset srcOffset from the source file, and copies the data to destination file at offset dstOffset. If required, adjusts the size of the destination file to fit that much data.
On Linux/BSD you can ask it to use ioctl and copy_file_range system calls, which if the underlying filesystem supports it tries referencing existing data in the source file, instead of making a copy and taking up additional space.
CopyRange does its best to have no effect on src and dst file offsets (copy operation should not affect it).
func ExpandTilde ¶ added in v0.14.37
func IsErrCaseConflict ¶ added in v1.9.0
func IsInternal ¶ added in v0.14.38
IsInternal returns true if the file, as a path relative to the folder root, represents an internal file that should always be ignored. The file path must be clean (i.e., in canonical shortest form).
func IsNotExist ¶ added in v0.14.27
IsNotExist is the equivalent of os.IsNotExist
func IsParent ¶ added in v1.0.0
IsParent compares paths purely lexicographically, meaning it returns false if path and parent aren't both absolute or relative.
func IsPermission ¶ added in v0.14.37
IsPermission is the equivalent of os.IsPermission
func IsTemporary ¶ added in v0.14.38
IsTemporary is true if the file name has the temporary prefix. Regardless of the normally used prefix, the standard Windows and Unix temp prefixes are always recognized as temp files.
func PathComponents ¶ added in v1.16.0
PathComponents returns a list of names of parent directories and the leaf item for the given native (fs.PathSeparator delimited) and clean path.
func SanitizePath ¶ added in v1.12.1
SanitizePath takes a string that might contain all kinds of special characters and makes a valid, similar, path name out of it.
Spans of invalid characters, whitespace and/or non-UTF-8 sequences are replaced by a single space. The result is always UTF-8 and contains only printable characters, as determined by unicode.IsPrint.
Invalid characters are non-printing runes, things not allowed in file names in Windows, and common shell metacharacters. Even if asterisks and pipes and stuff are allowed on Unixes in general they might not be allowed by the filesystem and may surprise the user and cause shell oddness. This function is intended for file names we generate on behalf of the user, and surprising them with odd shell characters in file names is unkind.
We include whitespace in the invalid characters so that multiple whitespace is collapsed to a single space. Additionally, whitespace at either end is removed.
If the result is a name disallowed on windows, a hyphen is prepended.
func TempNameWithPrefix ¶ added in v0.14.44
func UnicodeLowercaseNormalized ¶ added in v1.17.0
UnicodeLowercaseNormalized returns the Unicode lower case variant of s, having also normalized it to normalization form C.
func WindowsInvalidFilename ¶ added in v0.14.41
func WriteFile ¶ added in v1.23.5
func WriteFile(fs Filesystem, name string, data []byte, perm FileMode) error
WriteFile writes data to the named file, creating it if necessary. If the file does not exist, WriteFile creates it with permissions perm (before umask); otherwise WriteFile truncates it before writing, without changing permissions. Since Writefile requires multiple system calls to complete, a failure mid-operation can leave the file in a partially written state.
Types ¶
type BasicFilesystem ¶ added in v0.14.13
type BasicFilesystem struct {
// contains filtered or unexported fields
}
The BasicFilesystem implements all aspects by delegating to package os. All paths are relative to the root and cannot (should not) escape the root directory.
func (*BasicFilesystem) Chmod ¶ added in v0.14.13
func (f *BasicFilesystem) Chmod(name string, mode FileMode) error
func (*BasicFilesystem) Create ¶ added in v0.14.13
func (f *BasicFilesystem) Create(name string) (File, error)
func (*BasicFilesystem) CreateSymlink ¶ added in v0.14.13
func (f *BasicFilesystem) CreateSymlink(target, name string) error
func (*BasicFilesystem) DirNames ¶ added in v0.14.13
func (f *BasicFilesystem) DirNames(name string) ([]string, error)
func (*BasicFilesystem) GetXattr ¶ added in v1.22.0
func (f *BasicFilesystem) GetXattr(path string, xattrFilter XattrFilter) ([]protocol.Xattr, error)
func (*BasicFilesystem) Glob ¶ added in v0.14.37
func (f *BasicFilesystem) Glob(pattern string) ([]string, error)
func (*BasicFilesystem) Hide ¶ added in v0.14.37
func (f *BasicFilesystem) Hide(name string) error
Hide is a noop on unix, as hiding files requires renaming them. We still check that the relative path does not try to escape the root
func (*BasicFilesystem) Lchown ¶ added in v1.1.0
func (f *BasicFilesystem) Lchown(name, uid, gid string) error
func (*BasicFilesystem) Lstat ¶ added in v0.14.13
func (f *BasicFilesystem) Lstat(name string) (FileInfo, error)
func (*BasicFilesystem) Mkdir ¶ added in v0.14.13
func (f *BasicFilesystem) Mkdir(name string, perm FileMode) error
func (*BasicFilesystem) MkdirAll ¶ added in v0.14.37
func (f *BasicFilesystem) MkdirAll(path string, perm FileMode) 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.
func (*BasicFilesystem) Open ¶ added in v0.14.13
func (f *BasicFilesystem) Open(name string) (File, error)
func (*BasicFilesystem) Options ¶ added in v1.15.0
func (f *BasicFilesystem) Options() []Option
func (*BasicFilesystem) PlatformData ¶ added in v1.21.0
func (f *BasicFilesystem) PlatformData(name string, scanOwnership, scanXattrs bool, xattrFilter XattrFilter) (protocol.PlatformData, error)
func (*BasicFilesystem) ReadSymlink ¶ added in v0.14.13
func (f *BasicFilesystem) ReadSymlink(name string) (string, error)
func (*BasicFilesystem) Remove ¶ added in v0.14.13
func (f *BasicFilesystem) Remove(name string) error
func (*BasicFilesystem) RemoveAll ¶ added in v0.14.37
func (f *BasicFilesystem) RemoveAll(name string) error
func (*BasicFilesystem) Rename ¶ added in v0.14.13
func (f *BasicFilesystem) Rename(oldpath, newpath string) error
func (*BasicFilesystem) Roots ¶ added in v0.14.37
func (*BasicFilesystem) Roots() ([]string, error)
func (*BasicFilesystem) SameFile ¶ added in v0.14.44
func (*BasicFilesystem) SameFile(fi1, fi2 FileInfo) bool
func (*BasicFilesystem) SetXattr ¶ added in v1.22.0
func (f *BasicFilesystem) SetXattr(path string, xattrs []protocol.Xattr, xattrFilter XattrFilter) error
func (*BasicFilesystem) Stat ¶ added in v0.14.13
func (f *BasicFilesystem) Stat(name string) (FileInfo, error)
func (*BasicFilesystem) SymlinksSupported ¶ added in v0.14.13
func (*BasicFilesystem) SymlinksSupported() bool
func (*BasicFilesystem) Type ¶ added in v0.14.37
func (*BasicFilesystem) Type() FilesystemType
func (*BasicFilesystem) URI ¶ added in v0.14.37
func (f *BasicFilesystem) URI() string
func (*BasicFilesystem) Unhide ¶ added in v0.14.37
func (f *BasicFilesystem) Unhide(name string) error
Unhide is a noop on unix, as unhiding files requires renaming them. We still check that the relative path does not try to escape the root
func (*BasicFilesystem) Usage ¶ added in v0.14.37
func (f *BasicFilesystem) Usage(name string) (Usage, error)
type CopyRangeMethod ¶ added in v1.8.0
type CopyRangeMethod int32
const ( CopyRangeMethodStandard CopyRangeMethod = 0 CopyRangeMethodIoctl CopyRangeMethod = 1 CopyRangeMethodCopyFileRange CopyRangeMethod = 2 CopyRangeMethodSendFile CopyRangeMethod = 3 CopyRangeMethodDuplicateExtents CopyRangeMethod = 4 CopyRangeMethodAllWithFallback CopyRangeMethod = 5 )
func (CopyRangeMethod) EnumDescriptor ¶ added in v1.10.0
func (CopyRangeMethod) EnumDescriptor() ([]byte, []int)
func (CopyRangeMethod) MarshalText ¶ added in v1.8.0
func (o CopyRangeMethod) MarshalText() ([]byte, error)
func (*CopyRangeMethod) ParseDefault ¶ added in v1.8.0
func (o *CopyRangeMethod) ParseDefault(str string) error
func (CopyRangeMethod) String ¶ added in v1.8.0
func (o CopyRangeMethod) String() string
func (*CopyRangeMethod) UnmarshalText ¶ added in v1.8.0
func (o *CopyRangeMethod) UnmarshalText(bs []byte) error
type ErrCaseConflict ¶ added in v1.9.0
type ErrCaseConflict struct {
Given, Real string
}
func (*ErrCaseConflict) Error ¶ added in v1.9.0
func (e *ErrCaseConflict) Error() string
type ErrWatchEventOutsideRoot ¶ added in v1.2.0
type ErrWatchEventOutsideRoot struct {
// contains filtered or unexported fields
}
func (*ErrWatchEventOutsideRoot) Error ¶ added in v1.2.0
func (e *ErrWatchEventOutsideRoot) Error() string
type EventType ¶ added in v0.14.40
type EventType int
type File ¶ added in v0.14.13
type File interface { io.Closer io.Reader io.ReaderAt io.Seeker io.Writer io.WriterAt Name() string Truncate(size int64) error Stat() (FileInfo, error) Sync() error }
The File interface abstracts access to a regular file, being a somewhat smaller interface than os.File
type FileInfo ¶ added in v0.14.13
type FileInfo interface { // Standard things present in os.FileInfo Name() string Mode() FileMode Size() int64 ModTime() time.Time IsDir() bool Sys() interface{} // Extensions IsRegular() bool IsSymlink() bool Owner() int Group() int InodeChangeTime() time.Time // may be zero if not supported }
The FileInfo interface is almost the same as os.FileInfo, but with the Sys method removed (as we don't want to expose whatever is underlying) and with a couple of convenience methods added.
type Filesystem ¶ added in v0.14.13
type Filesystem interface { Chmod(name string, mode FileMode) error Lchown(name string, uid, gid string) error // uid/gid as strings; numeric on POSIX, SID on Windows, like in os/user package Chtimes(name string, atime time.Time, mtime time.Time) error Create(name string) (File, error) CreateSymlink(target, name string) error DirNames(name string) ([]string, error) Lstat(name string) (FileInfo, error) Mkdir(name string, perm FileMode) error MkdirAll(name string, perm FileMode) error Open(name string) (File, error) OpenFile(name string, flags int, mode FileMode) (File, error) ReadSymlink(name string) (string, error) Remove(name string) error RemoveAll(name string) error Rename(oldname, newname string) error Stat(name string) (FileInfo, error) SymlinksSupported() bool Walk(name string, walkFn WalkFunc) error // If setup fails, returns non-nil error, and if afterwards a fatal (!) // error occurs, sends that error on the channel. Afterwards this watch // can be considered stopped. Watch(path string, ignore Matcher, ctx context.Context, ignorePerms bool) (<-chan Event, <-chan error, error) Hide(name string) error Unhide(name string) error Glob(pattern string) ([]string, error) Roots() ([]string, error) Usage(name string) (Usage, error) Type() FilesystemType URI() string Options() []Option SameFile(fi1, fi2 FileInfo) bool PlatformData(name string, withOwnership, withXattrs bool, xattrFilter XattrFilter) (protocol.PlatformData, error) GetXattr(name string, xattrFilter XattrFilter) ([]protocol.Xattr, error) SetXattr(path string, xattrs []protocol.Xattr, xattrFilter XattrFilter) error // contains filtered or unexported methods }
The Filesystem interface abstracts access to the file system.
func NewFilesystem ¶ added in v0.14.37
func NewFilesystem(fsType FilesystemType, uri string, opts ...Option) Filesystem
func NewWalkFilesystem ¶ added in v0.14.28
func NewWalkFilesystem(next Filesystem) Filesystem
type FilesystemType ¶ added in v0.14.37
type FilesystemType int32
const ( FilesystemTypeBasic FilesystemType = 0 FilesystemTypeFake FilesystemType = 1 )
func (FilesystemType) EnumDescriptor ¶ added in v1.10.0
func (FilesystemType) EnumDescriptor() ([]byte, []int)
func (FilesystemType) MarshalText ¶ added in v0.14.37
func (t FilesystemType) MarshalText() ([]byte, error)
func (FilesystemType) String ¶ added in v0.14.37
func (t FilesystemType) String() string
func (*FilesystemType) UnmarshalText ¶ added in v0.14.37
func (t *FilesystemType) UnmarshalText(bs []byte) error
type Matcher ¶ added in v0.14.40
type Matcher interface {
Match(name string) ignoreresult.R
}
type MtimeFSOption ¶ added in v0.14.41
type MtimeFSOption func(*mtimeFS)
func WithCaseInsensitivity ¶ added in v0.14.41
func WithCaseInsensitivity(v bool) MtimeFSOption
type MtimeMapping ¶ added in v1.17.0
type MtimeMapping struct { // "Real" is the on disk timestamp Real time.Time `json:"real"` // "Virtual" is what want the timestamp to be Virtual time.Time `json:"virtual"` }
MtimeMapping represents the mapping as stored in the database
func GetMtimeMapping ¶ added in v1.17.0
func GetMtimeMapping(fs Filesystem, file string) (MtimeMapping, error)
func (*MtimeMapping) Marshal ¶ added in v1.17.0
func (t *MtimeMapping) Marshal() ([]byte, error)
func (*MtimeMapping) Unmarshal ¶ added in v1.17.0
func (t *MtimeMapping) Unmarshal(bs []byte) error
type Option ¶ added in v1.9.0
type Option interface { String() string // contains filtered or unexported methods }
Option modifies a filesystem at creation. An option might be specific to a filesystem-type.
String is used to detect options with the same effect, i.e. must be different for options with different effects. Meaning if an option has parameters, a representation of those must be part of the returned string.
func NewMtimeOption ¶ added in v1.20.0
func NewMtimeOption(db database, options ...MtimeFSOption) Option
NewMtimeOption makes any filesystem provide nanosecond mtime precision, regardless of what shenanigans the underlying filesystem gets up to.
type OptionDetectCaseConflicts ¶ added in v1.20.0
type OptionDetectCaseConflicts struct{}
OptionDetectCaseConflicts ensures that the potentially case-insensitive filesystem behaves like a case-sensitive filesystem. Meaning that it takes into account the real casing of a path and returns ErrCaseConflict if the given path differs from the real path. It is safe to use with any filesystem, i.e. also a case-sensitive one. However it will add some overhead and thus shouldn't be used if the filesystem is known to already behave case-sensitively.
func (*OptionDetectCaseConflicts) String ¶ added in v1.20.0
func (*OptionDetectCaseConflicts) String() string
type OptionJunctionsAsDirs ¶ added in v1.15.0
type OptionJunctionsAsDirs struct{}
func (*OptionJunctionsAsDirs) String ¶ added in v1.15.0
func (*OptionJunctionsAsDirs) String() string
type WalkFunc ¶ added in v0.14.13
WalkFunc is the type of the function called for each file or directory visited by Walk. The path argument contains the argument to Walk as a prefix; that is, if Walk is called with "dir", which is a directory containing the file "a", the walk function will be called with argument "dir/a". The info argument is the FileInfo for the named path.
If there was a problem walking to the file or directory named by path, the incoming error will describe the problem and the function can decide how to handle that error (and Walk will not descend into that directory). If an error is returned, processing stops. The sole exception is when the function returns the special value SkipDir. If the function returns SkipDir when invoked on a directory, Walk skips the directory's contents entirely. If the function returns SkipDir when invoked on a non-directory file, Walk skips the remaining files in the containing directory.
Source Files ¶
- basicfs.go
- basicfs_copy_range.go
- basicfs_copy_range_copyfilerange.go
- basicfs_copy_range_ioctl.go
- basicfs_copy_range_sendfile.go
- basicfs_fileinfo_linuxish.go
- basicfs_fileinfo_unix.go
- basicfs_lstat_broken.go
- basicfs_platformdata_unix.go
- basicfs_unix.go
- basicfs_watch.go
- basicfs_watch_errors_linux.go
- basicfs_watch_eventtypes_inotify.go
- basicfs_watch_notkqueue.go
- basicfs_xattr_linuxish.go
- basicfs_xattr_unix.go
- casefs.go
- copyrangemethod.go
- copyrangemethod.pb.go
- debug.go
- errorfs.go
- fakefs.go
- filesystem.go
- filesystem_copy_range.go
- filesystem_copy_range_allwithfallback.go
- filesystem_copy_range_standard.go
- folding.go
- logfs.go
- metrics.go
- mtimefs.go
- platform_common.go
- tempname.go
- types.go
- types.pb.go
- util.go
- walkfs.go