Skip to content
This repository was archived by the owner on Jul 18, 2025. It is now read-only.

Commit aa61d7f

Browse files
author
Matthieu Nottale
committed
tar handling: Handle Read returning EOF, nicer error messages.
Signed-off-by: Matthieu Nottale <[email protected]>
1 parent 028580e commit aa61d7f

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

packager/extract.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"os"
88

99
"github.com/docker/lunchbox/utils"
10+
"github.com/pkg/errors"
1011
)
1112

1213
var (
@@ -55,20 +56,20 @@ func extract(appname, outputDir string) error {
5556
break
5657
}
5758
if err != nil {
58-
return err
59+
return errors.Wrap(err, "error reading from tar header")
5960
}
6061
switch header.Typeflag {
6162
case tar.TypeDir: // = directory
6263
os.Mkdir(outputDir+header.Name, 0755)
6364
case tar.TypeReg: // = regular file
6465
data := make([]byte, header.Size)
6566
_, err := tarReader.Read(data)
66-
if err != nil {
67-
return err
67+
if err != nil && err != io.EOF {
68+
return errors.Wrap(err, "error reading from tar data")
6869
}
6970
err = ioutil.WriteFile(outputDir+header.Name, data, 0644)
7071
if err != nil {
71-
return err
72+
return errors.Wrap(err, "error writing output file")
7273
}
7374
}
7475
}

packager/registry.go

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package packager
22

33
import (
4-
"github.com/docker/lunchbox/utils"
5-
64
"archive/tar"
75
"fmt"
86
"io"
@@ -12,6 +10,9 @@ import (
1210
"os/exec"
1311
"path"
1412
"strings"
13+
14+
"github.com/docker/lunchbox/utils"
15+
"github.com/pkg/errors"
1516
)
1617

1718
func appName(appname string) string {
@@ -47,6 +48,7 @@ func Load(repotag string) error {
4748
cmd := exec.Command("docker", "save", "-o", file, repotag)
4849
output, err := cmd.CombinedOutput()
4950
if err != nil {
51+
fmt.Println("Error from docker save command:")
5052
fmt.Println(string(output))
5153
return err
5254
}
@@ -62,17 +64,17 @@ func Load(repotag string) error {
6264
break
6365
}
6466
if err != nil {
65-
return err
67+
return errors.Wrap(err, "error reading next tar header")
6668
}
6769
if path.Base(header.Name) == "layer.tar" {
6870
data := make([]byte, header.Size)
6971
_, err := tarReader.Read(data)
70-
if err != nil {
71-
return err
72+
if err != nil && err != io.EOF {
73+
return errors.Wrap(err, "error reading tar data")
7274
}
7375
repo := strings.Split(repotag, ":")[0]
7476
err = ioutil.WriteFile(appName(repo)+".docker-app", data, 0644)
75-
return err
77+
return errors.Wrap(err, "error writing output file")
7678
}
7779
}
7880
return fmt.Errorf("failed to find our layer in tarball")

0 commit comments

Comments
 (0)