aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/otiai10/copy/permission_control.go
diff options
context:
space:
mode:
authorMitja Felicijan <mitja.felicijan@gmail.com>2024-10-25 00:47:47 +0200
committerMitja Felicijan <mitja.felicijan@gmail.com>2024-10-25 00:47:47 +0200
commitc6cc0108ca7738023b45e0eeac0fa2390532dd93 (patch)
tree36890e6cd3091bbab8efbe686cc56f467f645bfd /vendor/github.com/otiai10/copy/permission_control.go
parent0130404a1dc663d4aa68d780c9bcb23a4243e68d (diff)
downloadjbmafp-c6cc0108ca7738023b45e0eeac0fa2390532dd93.tar.gz
Added vendor lock on depsHEADmaster
Diffstat (limited to 'vendor/github.com/otiai10/copy/permission_control.go')
-rw-r--r--vendor/github.com/otiai10/copy/permission_control.go48
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 @@
1package copy
2
3import (
4 "os"
5)
6
7const (
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
14type PermissionControlFunc func(srcinfo fileInfo, dest string) (chmodfunc func(*error), err error)
15
16var (
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.
44func chmod(dir string, mode os.FileMode, reported *error) {
45 if err := os.Chmod(dir, mode); *reported == nil {
46 *reported = err
47 }
48}