fs

package
v0.0.0-...-f13583b Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 5, 2020 License: BSD-3-Clause Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func CopyDir

func CopyDir(src, dst string) error

CopyDir recursively copies a directory tree, attempting to preserve permissions. Source directory must exist, destination directory must *not* exist.

func EnsureDir

func EnsureDir(path string, perm os.FileMode) error

EnsureDir tries to ensure that a directory is present at the given path. It first checks if the directory already exists at the given path. If there isn't one, it tries to create it with the given permissions. However, it does not try to create the directory recursively.

func EquivalentPaths

func EquivalentPaths(p1, p2 string) (bool, error)

EquivalentPaths compares the paths passed to check if they are equivalent. It respects the case-sensitivity of the underlying filesysyems.

func HasFilepathPrefix

func HasFilepathPrefix(path, prefix string) (bool, error)

HasFilepathPrefix will determine if "path" starts with "prefix" from the point of view of a filesystem.

Unlike filepath.HasPrefix, this function is path-aware, meaning that it knows that two directories /foo and /foobar are not the same thing, and therefore HasFilepathPrefix("/foobar", "/foo") will return false.

This function also handles the case where the involved filesystems are case-insensitive, meaning /foo/bar and /Foo/Bar correspond to the same file. In that situation HasFilepathPrefix("/Foo/Bar", "/foo") will return true. The implementation is *not* OS-specific, so a FAT32 filesystem mounted on Linux will be handled correctly.

func IsCaseSensitiveFilesystem

func IsCaseSensitiveFilesystem(dir string) (bool, error)

IsCaseSensitiveFilesystem determines if the filesystem where dir exists is case sensitive or not.

CAVEAT: this function works by taking the last component of the given path and flipping the case of the first letter for which case flipping is a reversible operation (/foo/Bar → /foo/bar), then testing for the existence of the new filename. There are two possibilities:

1. The alternate filename does not exist. We can conclude that the filesystem is case sensitive.

2. The filename happens to exist. We have to test if the two files are the same file (case insensitive file system) or different ones (case sensitive filesystem).

If the input directory is such that the last component is composed exclusively of case-less codepoints (e.g. numbers), this function will return false.

func IsDir

func IsDir(name string) (bool, error)

IsDir determines is the path given is a directory or not.

func IsNonEmptyDir

func IsNonEmptyDir(name string) (bool, error)

IsNonEmptyDir determines if the path given is a non-empty directory or not.

func IsRegular

func IsRegular(name string) (bool, error)

IsRegular determines if the path given is a regular file or not.

func IsSymlink(path string) (bool, error)

IsSymlink determines if the given path is a symbolic link.

func ReadActualFilenames

func ReadActualFilenames(dirPath string, names []string) (map[string]string, error)

ReadActualFilenames is used to determine the actual file names in given directory.

On case sensitive file systems like ext4, it will check if those files exist using `os.Stat` and return a map with key and value as filenames which exist in the folder.

Otherwise, it reads the contents of the directory and returns a map which has the given file name as the key and actual filename as the value(if it was found).

func RenameWithFallback

func RenameWithFallback(src, dst string) error

RenameWithFallback attempts to rename a file or directory, but falls back to copying in the event of a cross-device link error. If the fallback copy succeeds, src is still removed, emulating normal rename behavior.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL