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 DebugSymlinkForTestsOnly(oldFs, newFs Filesystem, oldname, newname string) error
- func ExpandTilde(path string) (string, error)
- func IsErrCaseConflict(err error) bool
- func IsInternal(file string) bool
- func IsParent(path, parent string) 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
- 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) Glob(pattern string) ([]string, error)
- func (f *BasicFilesystem) Hide(name string) error
- func (f *BasicFilesystem) Lchown(name string, uid, gid int) 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) 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 (f *BasicFilesystem) Roots() ([]string, error)
- func (f *BasicFilesystem) SameFile(fi1, fi2 FileInfo) bool
- func (f *BasicFilesystem) Stat(name string) (FileInfo, error)
- func (BasicFilesystem) SymlinksSupported() bool
- func (f *BasicFilesystem) Type() FilesystemType
- func (f *BasicFilesystem) URI() string
- func (f *BasicFilesystem) Unhide(name string) error
- func (f *BasicFilesystem) Usage(name string) (Usage, error)
- func (f *BasicFilesystem) Walk(root string, walkFn 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 MatchResult
- type Matcher
- type MtimeFSOption
- type MtimeMapping
- type Option
- type OptionJunctionsAsDirs
- type Usage
- type WalkFunc
Constants ¶
const ( WindowsTempPrefix = "~syncthing~" UnixTempPrefix = ".syncthing." )
const ModePerm = FileMode(os.ModePerm)
const ModeSetgid = FileMode(os.ModeSetgid)
const ModeSetuid = FileMode(os.ModeSetuid)
const ModeSticky = FileMode(os.ModeSticky)
const ModeSymlink = FileMode(os.ModeSymlink)
const ModeType = FileMode(os.ModeType)
const OptAppend = os.O_APPEND
const OptCreate = os.O_CREATE
const OptExclusive = os.O_EXCL
const OptReadOnly = os.O_RDONLY
const OptReadWrite = os.O_RDWR
const OptSync = os.O_SYNC
const OptTruncate = os.O_TRUNC
const OptWriteOnly = os.O_WRONLY
const PathSeparator = os.PathSeparator
Variables ¶
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 = os.ErrExist
IsExist is the equivalent of os.ErrExist
var ErrInfiniteRecursion = errors.New("infinite filesystem recursion detected")
var ErrNotExist = os.ErrNotExist
ErrNotExist is the equivalent of os.ErrNotExist
var ErrWatchNotSupported = errors.New("watching is not supported")
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 IsExist = os.IsExist
IsExist is the equivalent of os.IsExist
var IsNotExist = os.IsNotExist
IsNotExist is the equivalent of os.IsNotExist
var IsPathSeparator = os.IsPathSeparator
IsPathSeparator is the equivalent of os.IsPathSeparator
var IsPermission = os.IsPermission
IsPermission is the equivalent of os.IsPermission
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 DebugSymlinkForTestsOnly ¶ added in v1.9.0
func DebugSymlinkForTestsOnly(oldFs, newFs Filesystem, oldname, newname string) error
DebugSymlinkForTestsOnly is not and should not be used in Syncthing code, hence the cumbersome name to make it obvious if this ever leaks. Its reason for existence is the Windows version, which allows creating symlinks when non-elevated.
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 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 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
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) 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 string, uid, gid int) 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) 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 (f *BasicFilesystem) Roots() ([]string, error)
func (*BasicFilesystem) SameFile ¶ added in v0.14.44
func (f *BasicFilesystem) SameFile(fi1, fi2 FileInfo) bool
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 (f *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 // Extensions IsRegular() bool IsSymlink() bool Owner() int Group() int }
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 int) error 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 // contains filtered or unexported methods }
The Filesystem interface abstracts access to the file system.
func NewCaseFilesystem ¶ added in v1.9.0
func NewCaseFilesystem(fs Filesystem) Filesystem
NewCaseFilesystem ensures that the given, 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 NewFilesystem ¶ added in v0.14.37
func NewFilesystem(fsType FilesystemType, uri string, opts ...Option) Filesystem
func NewMtimeFS ¶
func NewMtimeFS(fs Filesystem, db database, options ...MtimeFSOption) Filesystem
NewMtimeFS returns a filesystem with nanosecond mtime precision, regardless of what shenanigans the underlying filesystem gets up to.
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 MatchResult ¶ added in v0.14.40
type MatchResult interface {
IsIgnored() bool
}
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.
type OptionJunctionsAsDirs ¶ added in v1.15.0
type OptionJunctionsAsDirs struct{}
func (*OptionJunctionsAsDirs) String ¶ added in v1.15.0
func (o *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_unix.go
- basicfs_lstat_broken.go
- basicfs_unix.go
- basicfs_watch.go
- basicfs_watch_errors_linux.go
- basicfs_watch_eventtypes_inotify.go
- casefs.go
- copyrangemethod.go
- copyrangemethod.pb.go
- debug.go
- debug_symlink_unix.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
- mtimefs.go
- tempname.go
- types.go
- types.pb.go
- util.go
- walkfs.go