5
5
package mage
6
6
7
7
import (
8
+ "fmt"
8
9
"io"
9
- "io/ioutil "
10
+ "io/fs "
10
11
"os"
11
12
"path/filepath"
12
13
"regexp"
@@ -41,7 +42,7 @@ func (t *CopyTask) Execute() error {
41
42
return errors .Wrapf (err , "copy failed: cannot stat source file %v" , t .Source )
42
43
}
43
44
44
- return errors .Wrap (t .recursiveCopy (t .Source , t .Dest , info ), "copy failed" )
45
+ return errors .Wrap (t .recursiveCopy (t .Source , t .Dest , fs . FileInfoToDirEntry ( info ) ), "copy failed" )
45
46
}
46
47
47
48
func (t * CopyTask ) init () error {
@@ -64,14 +65,14 @@ func (t *CopyTask) isExcluded(src string) bool {
64
65
return false
65
66
}
66
67
67
- func (t * CopyTask ) recursiveCopy (src , dest string , info os. FileInfo ) error {
68
- if info .IsDir () {
69
- return t .dirCopy (src , dest , info )
68
+ func (t * CopyTask ) recursiveCopy (src , dest string , entry fs. DirEntry ) error {
69
+ if entry .IsDir () {
70
+ return t .dirCopy (src , dest , entry )
70
71
}
71
- return t .fileCopy (src , dest , info )
72
+ return t .fileCopy (src , dest , entry )
72
73
}
73
74
74
- func (t * CopyTask ) fileCopy (src , dest string , info os. FileInfo ) error {
75
+ func (t * CopyTask ) fileCopy (src , dest string , entry fs. DirEntry ) error {
75
76
if t .isExcluded (src ) {
76
77
return nil
77
78
}
@@ -82,6 +83,11 @@ func (t *CopyTask) fileCopy(src, dest string, info os.FileInfo) error {
82
83
}
83
84
defer srcFile .Close ()
84
85
86
+ info , err := entry .Info ()
87
+ if err != nil {
88
+ return fmt .Errorf ("converting dir entry: %w" , err )
89
+ }
90
+
85
91
if ! info .Mode ().IsRegular () {
86
92
return errors .Errorf ("failed to copy source file because it is not a " +
87
93
"regular file" )
@@ -104,28 +110,34 @@ func (t *CopyTask) fileCopy(src, dest string, info os.FileInfo) error {
104
110
return destFile .Close ()
105
111
}
106
112
107
- func (t * CopyTask ) dirCopy (src , dest string , info os. FileInfo ) error {
113
+ func (t * CopyTask ) dirCopy (src , dest string , entry fs. DirEntry ) error {
108
114
if t .isExcluded (src ) {
109
115
return nil
110
116
}
111
117
118
+ info , err := entry .Info ()
119
+ if err != nil {
120
+ return fmt .Errorf ("converting dir entry: %w" , err )
121
+ }
122
+
112
123
mode := t .DirMode
113
124
if mode == 0 {
114
125
mode = info .Mode ()
115
126
}
127
+
116
128
if err := os .MkdirAll (dest , mode & os .ModePerm ); err != nil {
117
129
return errors .Wrap (err , "failed creating dirs" )
118
130
}
119
131
120
- contents , err := ioutil .ReadDir (src )
132
+ contents , err := os .ReadDir (src )
121
133
if err != nil {
122
134
return errors .Wrapf (err , "failed to read dir %v" , src )
123
135
}
124
136
125
- for _ , info := range contents {
137
+ for _ , entry := range contents {
126
138
srcFile := filepath .Join (src , info .Name ())
127
139
destFile := filepath .Join (dest , info .Name ())
128
- if err = t .recursiveCopy (srcFile , destFile , info ); err != nil {
140
+ if err = t .recursiveCopy (srcFile , destFile , entry ); err != nil {
129
141
return errors .Wrapf (err , "failed to copy %v to %v" , srcFile , destFile )
130
142
}
131
143
}
0 commit comments