Documentation ¶
Overview ¶
Package aferocopy provides copy functionalities with afero.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // AddPermission controls the permission of the destination file. AddPermission = func(perm os.FileMode) PermissionControlFunc { return func(srcInfo os.FileInfo, destFs afero.Fs, dest string) (func(*error), error) { orig := srcInfo.Mode() if srcInfo.IsDir() { if err := destFs.MkdirAll(dest, tmpPermissionForDirectory); err != nil { return func(*error) {}, err } } return func(err *error) { chmod(destFs, dest, orig|perm, err) }, nil } } // PreservePermission preserves the original permission. PreservePermission = AddPermission(0) // DoNothing do not touch the permission. DoNothing = PermissionControlFunc(func(srcInfo os.FileInfo, destFs afero.Fs, dest string) (func(*error), error) { if srcInfo.IsDir() { if err := destFs.MkdirAll(dest, srcInfo.Mode()); err != nil { return func(*error) {}, err } } return func(*error) {}, nil }) )
Functions ¶
func Copy ¶
Copy copies src to dest, doesn't matter if src is a directory or a file.
Example ¶
err := Copy("resources/fixtures/data/example", "resources/test/data.copy/example") fmt.Println("Error:", err) info, _ := os.Stat("resources/test/data.copy/example") //nolint: errcheck fmt.Println("IsDir:", info.IsDir())
Output: Error: <nil> IsDir: true
Types ¶
type DirExistsAction ¶
type DirExistsAction int
DirExistsAction represents what to do on dest dir.
const ( // Merge preserves or overwrites existing files under the dir (default behavior). Merge DirExistsAction = iota // Replace deletes all contents under the dir and copy src files. Replace // Untouchable does nothing for the dir, and leaves it as it is. Untouchable )
type Options ¶
type Options struct { // Source filesystem. SrcFs afero.Fs // Source filesystem. DestFs afero.Fs // OnSymlink can specify what to do on symlink. OnSymlink func(srcFs afero.Fs, src string) SymlinkAction // OnDirExists can specify what to do when there is a directory already existing in destination. OnDirExists func(srcFs afero.Fs, src string, destFs afero.Fs, dest string) DirExistsAction // Skip can specify which files should be skipped Skip func(srcFs afero.Fs, src string) (bool, error) // AddPermission to every entities, // NO MORE THAN 0777 // // Deprecated: use PermissionControl instead, for example: `PermissionControl: AddPermission(perm)`. AddPermission os.FileMode // PermissionControl can control permission of // every entry. // When you want to add permission 0222, do like // // PermissionControl = AddPermission(0222) // // or if you even don't want to touch permission, // // PermissionControl = DoNothing // // By default, PermissionControl = PreservePermission PermissionControl PermissionControlFunc // Sync file after copy. // Useful in case when file must be on the disk // (in case crash happens, for example), // at the expense of some performance penalty Sync bool // Preserve the atime and the mtime of the entries. // On linux we can preserve only up to 1 millisecond accuracy. PreserveTimes bool // Preserve the uid and the gid of all entries. PreserveOwner bool // The byte size of the buffer to use for copying files. // If zero, the internal default buffer of 32KB is used. // See https://golang.org/pkg/io/#CopyBuffer for more information. CopyBufferSize uint // contains filtered or unexported fields }
Options specifies optional actions on copying.
Example ¶
err := Copy( "resources/fixtures/data/example", "resources/test/data.copy/example_with_options", Options{ Skip: func(_ afero.Fs, src string) (bool, error) { return strings.HasSuffix(src, ".git-like"), nil }, OnSymlink: func(afero.Fs, string) SymlinkAction { return Skip }, PermissionControl: AddPermission(0o200), }, ) fmt.Println("Error:", err) _, err = os.Stat("resources/test/data.copy/example_with_options/.git-like") fmt.Println("Skipped:", os.IsNotExist(err))
Output: Error: <nil> Skipped: true
type PermissionControlFunc ¶
type PermissionControlFunc func(srcInfo os.FileInfo, destFs afero.Fs, dest string) (chmodFunc func(*error), err error)
PermissionControlFunc is a function that can be used to control the permission of a file or directory while copying.
type SymlinkAction ¶
type SymlinkAction int
SymlinkAction represents what to do on symlink.
const ( // Deep creates hard-copy of contents. Deep SymlinkAction = iota // Shallow creates new symlink to the dest of symlink. Shallow // Skip does nothing with symlink. Skip )
Click to show internal directories.
Click to hide internal directories.