@@ -156,7 +156,6 @@ func (d *K8sDriver) ProcessCommand(envVars []unversioned.EnvVar, fullCommand []s
156156}
157157
158158func (d * K8sDriver ) StatFile (path string ) (os.FileInfo , error ) {
159- // A better approach would be to have a long-running pod and exec into it.
160159 command := []string {"stat" , "-c" , "%n,%s,%F,%a,%u,%g" , path }
161160 stdout , _ , _ , err := d .ProcessCommand (nil , command )
162161 if err != nil {
@@ -183,18 +182,22 @@ func (d *K8sDriver) StatFile(path string) (os.FileInfo, error) {
183182 }
184183
185184 // Use bitSize 32 because os.FileMode is a uint32
186- fileMode , err := strconv .ParseUint (parts [3 ], 8 , 32 )
185+ fileMode64 , err := strconv .ParseUint (parts [3 ], 8 , 32 )
187186 if err != nil {
188187 return nil , err
189188 }
189+ fileMode := os .FileMode (fileMode64 )
190+ if isDir {
191+ fileMode |= os .ModeDir
192+ }
190193
191194 return & fileInfo {
192195 name : parts [0 ],
193196 size : size ,
194197 isDir : isDir ,
195198 uid : uid ,
196199 gid : gid ,
197- fileMode : os . FileMode ( fileMode ) ,
200+ fileMode : fileMode ,
198201 }, nil
199202}
200203
@@ -224,10 +227,20 @@ func (fi *fileInfo) IsDir() bool {
224227 return fi .isDir
225228}
226229func (fi * fileInfo ) Sys () interface {} {
227- return & tar.Header {
228- Uid : int (fi .uid ),
229- Gid : int (fi .gid ),
230+ hdr := & tar.Header {
231+ Name : fi .name ,
232+ Size : fi .size ,
233+ Mode : int64 (fi .fileMode ),
234+ Uid : int (fi .uid ),
235+ Gid : int (fi .gid ),
236+ ModTime : fi .ModTime (),
237+ }
238+ if fi .isDir {
239+ hdr .Typeflag = tar .TypeDir
240+ } else {
241+ hdr .Typeflag = tar .TypeReg
230242 }
243+ return hdr
231244}
232245
233246func (d * K8sDriver ) ReadFile (path string ) ([]byte , error ) {
0 commit comments