diff options
| author | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-10-25 00:47:47 +0200 |
|---|---|---|
| committer | Mitja Felicijan <mitja.felicijan@gmail.com> | 2024-10-25 00:47:47 +0200 |
| commit | c6cc0108ca7738023b45e0eeac0fa2390532dd93 (patch) | |
| tree | 36890e6cd3091bbab8efbe686cc56f467f645bfd /vendor/github.com/otiai10/copy/permission_control.go | |
| parent | 0130404a1dc663d4aa68d780c9bcb23a4243e68d (diff) | |
| download | jbmafp-c6cc0108ca7738023b45e0eeac0fa2390532dd93.tar.gz | |
Diffstat (limited to 'vendor/github.com/otiai10/copy/permission_control.go')
| -rw-r--r-- | vendor/github.com/otiai10/copy/permission_control.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/vendor/github.com/otiai10/copy/permission_control.go b/vendor/github.com/otiai10/copy/permission_control.go new file mode 100644 index 0000000..97ae12d --- /dev/null +++ b/vendor/github.com/otiai10/copy/permission_control.go | |||
| @@ -0,0 +1,48 @@ | |||
| 1 | package copy | ||
| 2 | |||
| 3 | import ( | ||
| 4 | "os" | ||
| 5 | ) | ||
| 6 | |||
| 7 | const ( | ||
| 8 | // tmpPermissionForDirectory makes the destination directory writable, | ||
| 9 | // so that stuff can be copied recursively even if any original directory is NOT writable. | ||
| 10 | // See https://github.com/otiai10/copy/pull/9 for more information. | ||
| 11 | tmpPermissionForDirectory = os.FileMode(0755) | ||
| 12 | ) | ||
| 13 | |||
| 14 | type PermissionControlFunc func(srcinfo fileInfo, dest string) (chmodfunc func(*error), err error) | ||
| 15 | |||
| 16 | var ( | ||
| 17 | AddPermission = func(perm os.FileMode) PermissionControlFunc { | ||
| 18 | return func(srcinfo fileInfo, dest string) (func(*error), error) { | ||
| 19 | orig := srcinfo.Mode() | ||
| 20 | if srcinfo.IsDir() { | ||
| 21 | if err := os.MkdirAll(dest, tmpPermissionForDirectory); err != nil { | ||
| 22 | return func(*error) {}, err | ||
| 23 | } | ||
| 24 | } | ||
| 25 | return func(err *error) { | ||
| 26 | chmod(dest, orig|perm, err) | ||
| 27 | }, nil | ||
| 28 | } | ||
| 29 | } | ||
| 30 | PerservePermission PermissionControlFunc = AddPermission(0) | ||
| 31 | DoNothing PermissionControlFunc = func(srcinfo fileInfo, dest string) (func(*error), error) { | ||
| 32 | if srcinfo.IsDir() { | ||
| 33 | if err := os.MkdirAll(dest, srcinfo.Mode()); err != nil { | ||
| 34 | return func(*error) {}, err | ||
| 35 | } | ||
| 36 | } | ||
| 37 | return func(*error) {}, nil | ||
| 38 | } | ||
| 39 | ) | ||
| 40 | |||
| 41 | // chmod ANYHOW changes file mode, | ||
| 42 | // with asiging error raised during Chmod, | ||
| 43 | // BUT respecting the error already reported. | ||
| 44 | func chmod(dir string, mode os.FileMode, reported *error) { | ||
| 45 | if err := os.Chmod(dir, mode); *reported == nil { | ||
| 46 | *reported = err | ||
| 47 | } | ||
| 48 | } | ||
