Skip to content

Commit 2cfd7b2

Browse files
author
Pieter-Jan Pintens
committed
Improve filemode and tar header
1 parent 41f8ac3 commit 2cfd7b2

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

pkg/drivers/k8s_driver.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,6 @@ func (d *K8sDriver) ProcessCommand(envVars []unversioned.EnvVar, fullCommand []s
156156
}
157157

158158
func (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
}
226229
func (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

233246
func (d *K8sDriver) ReadFile(path string) ([]byte, error) {

0 commit comments

Comments
 (0)