@@ -18,7 +18,6 @@ package fs
1818
1919import (
2020 "fmt"
21- "io/ioutil"
2221 "os"
2322 "path/filepath"
2423 "sync"
@@ -111,7 +110,7 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er
111110 }
112111 }
113112
114- fis , err := ioutil .ReadDir (src )
113+ entries , err := os .ReadDir (src )
115114 if err != nil {
116115 return fmt .Errorf ("failed to read %s: %w" , src , err )
117116 }
@@ -124,18 +123,23 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er
124123 return fmt .Errorf ("failed to copy xattrs: %w" , err )
125124 }
126125
127- for _ , fi := range fis {
128- source := filepath .Join (src , fi .Name ())
129- target := filepath .Join (dst , fi .Name ())
126+ for _ , entry := range entries {
127+ source := filepath .Join (src , entry .Name ())
128+ target := filepath .Join (dst , entry .Name ())
129+
130+ fileInfo , err := entry .Info ()
131+ if err != nil {
132+ return fmt .Errorf ("failed to get file info for %s: %w" , entry .Name (), err )
133+ }
130134
131135 switch {
132- case fi .IsDir ():
136+ case entry .IsDir ():
133137 if err := copyDirectory (target , source , inodes , o ); err != nil {
134138 return err
135139 }
136140 continue
137- case (fi .Mode () & os .ModeType ) == 0 :
138- link , err := getLinkSource (target , fi , inodes )
141+ case (fileInfo .Mode () & os .ModeType ) == 0 :
142+ link , err := getLinkSource (target , fileInfo , inodes )
139143 if err != nil {
140144 return fmt .Errorf ("failed to get hardlink: %w" , err )
141145 }
@@ -146,26 +150,26 @@ func copyDirectory(dst, src string, inodes map[uint64]string, o *copyDirOpts) er
146150 } else if err := CopyFile (target , source ); err != nil {
147151 return fmt .Errorf ("failed to copy files: %w" , err )
148152 }
149- case (fi .Mode () & os .ModeSymlink ) == os .ModeSymlink :
153+ case (fileInfo .Mode () & os .ModeSymlink ) == os .ModeSymlink :
150154 link , err := os .Readlink (source )
151155 if err != nil {
152156 return fmt .Errorf ("failed to read link: %s: %w" , source , err )
153157 }
154158 if err := os .Symlink (link , target ); err != nil {
155159 return fmt .Errorf ("failed to create symlink: %s: %w" , target , err )
156160 }
157- case (fi .Mode () & os .ModeDevice ) == os .ModeDevice ,
158- (fi .Mode () & os .ModeNamedPipe ) == os .ModeNamedPipe ,
159- (fi .Mode () & os .ModeSocket ) == os .ModeSocket :
160- if err := copyIrregular (target , fi ); err != nil {
161+ case (fileInfo .Mode () & os .ModeDevice ) == os .ModeDevice ,
162+ (fileInfo .Mode () & os .ModeNamedPipe ) == os .ModeNamedPipe ,
163+ (fileInfo .Mode () & os .ModeSocket ) == os .ModeSocket :
164+ if err := copyIrregular (target , fileInfo ); err != nil {
161165 return fmt .Errorf ("failed to create irregular file: %w" , err )
162166 }
163167 default :
164- logrus .Warnf ("unsupported mode: %s: %s" , source , fi .Mode ())
168+ logrus .Warnf ("unsupported mode: %s: %s" , source , fileInfo .Mode ())
165169 continue
166170 }
167171
168- if err := copyFileInfo (fi , source , target ); err != nil {
172+ if err := copyFileInfo (fileInfo , source , target ); err != nil {
169173 return fmt .Errorf ("failed to copy file info: %w" , err )
170174 }
171175
0 commit comments