Documentation
¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type DirExistsAction ¶ added in v1.4.0
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 ¶ added in v1.1.0
type Options struct {
// OnSymlink can specify what to do on symlink
OnSymlink func(src string) SymlinkAction
// OnDirExists can specify what to do when there is a directory already existing in destination.
OnDirExists func(src, dest string) DirExistsAction
// OnErr lets called decide whether or not to continue on particular copy error.
OnError func(src, dest string, err error) error
// Skip can specify which files should be skipped
Skip func(srcinfo os.FileInfo, src, dest string) (bool, error)
// RenameDestination can specify the destination file or dir name if needed to rename.
RenameDestination func(src, dest string) (string, error)
// Specials includes special files to be copied. default false.
Specials bool
// AddPermission to every entities,
// NO MORE THAN 0777
// @OBSOLETE
// Use `PermissionControl = AddPermission(perm)` instead
AddPermission os.FileMode
// PermissionControl can preserve or even add permission to
// every entries, for example
//
// opt.PermissionControl = AddPermission(0222)
//
// See permission_control.go for more detail.
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
// If you want to add some limitation on reading src file,
// you can wrap the src and provide new reader,
// such as `RateLimitReader` in the test case.
WrapReader func(src io.Reader) io.Reader
// If given, copy.Copy refers to this fs.FS instead of the OS filesystem.
// e.g., You can use embed.FS to copy files from embedded filesystem.
FS fs.FS
// NumOfWorkers represents the number of workers used for
// concurrent copying contents of directories.
// If 0 or 1, it does not use goroutine for copying directories.
// Please refer to https://pkg.go.dev/golang.org/x/sync/semaphore for more details.
NumOfWorkers int64
// PreferConcurrent is a function to determine whether or not
// to use goroutine for copying contents of directories.
// If PreferConcurrent is nil, which is default, it does concurrent
// copying for all directories.
// If NumOfWorkers is 0 or 1, this function will be ignored.
PreferConcurrent func(srcdir, destdir string) (bool, error)
// contains filtered or unexported fields
}
Options specifies optional actions on copying.
Example ¶
err := Copy(
"test/data/example",
"test/data.copy/example_with_options",
Options{
Skip: func(info os.FileInfo, src, dest string) (bool, error) {
return strings.HasSuffix(src, ".git-like"), nil
},
OnSymlink: func(src string) SymlinkAction {
return Skip
},
PermissionControl: AddPermission(0200),
},
)
fmt.Println("Error:", err)
_, err = os.Stat("test/data.copy/example_with_options/.git-like")
fmt.Println("Skipped:", os.IsNotExist(err))
Output: Error: <nil> Skipped: true
type PermissionControlFunc ¶ added in v1.7.1
type PermissionControlFunc func(srcinfo fs.FileInfo, dest string) (chmodfunc func(*error), err error)
var ( AddPermission = func(perm os.FileMode) PermissionControlFunc { return func(srcinfo fs.FileInfo, dest string) (func(*error), error) { orig := srcinfo.Mode() if srcinfo.IsDir() { if err := os.MkdirAll(dest, tmpPermissionForDirectory); err != nil { return func(*error) {}, err } } return func(err *error) { chmod(dest, orig|perm, err) }, nil } } PerservePermission PermissionControlFunc = AddPermission(0) DoNothing PermissionControlFunc = func(srcinfo fs.FileInfo, dest string) (func(*error), error) { if srcinfo.IsDir() { if err := os.MkdirAll(dest, srcinfo.Mode()); err != nil { return func(*error) {}, err } } return func(*error) {}, nil } )
type SymlinkAction ¶ added in v1.1.0
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.