@@ -12,6 +12,35 @@ import (
12
12
"golang.org/x/crypto/ssh/terminal"
13
13
)
14
14
15
+ func tarAdd (tarout * tar.Writer , path , file string ) error {
16
+ payload , err := ioutil .ReadFile (file )
17
+ if err != nil {
18
+ return err
19
+ }
20
+ h := & tar.Header {
21
+ Name : path ,
22
+ Size : int64 (len (payload )),
23
+ Mode : 0644 ,
24
+ Typeflag : tar .TypeReg ,
25
+ }
26
+ err = tarout .WriteHeader (h )
27
+ if err != nil {
28
+ return err
29
+ }
30
+ _ , err = tarout .Write (payload )
31
+ return err
32
+ }
33
+
34
+ func tarAddDir (tarout * tar.Writer , path string ) error {
35
+ h := & tar.Header {
36
+ Name : path ,
37
+ Size : 0 ,
38
+ Typeflag : tar .TypeDir ,
39
+ Mode : 0755 ,
40
+ }
41
+ return tarout .WriteHeader (h )
42
+ }
43
+
15
44
// Pack packs the app as a single file
16
45
func Pack (appname , output string ) error {
17
46
if output == "-" && terminal .IsTerminal (int (os .Stdout .Fd ())) {
@@ -34,22 +63,32 @@ func Pack(appname, output string) error {
34
63
tarout := tar .NewWriter (target )
35
64
files := []string {"metadata.yml" , "services.yml" , "settings.yml" }
36
65
for _ , f := range files {
37
- payload , err := ioutil . ReadFile ( path .Join (appname , f ))
66
+ err = tarAdd ( tarout , f , path .Join (appname , f ))
38
67
if err != nil {
39
68
return err
40
69
}
41
- h := & tar.Header {
42
- Name : f ,
43
- Size : int64 (len (payload )),
70
+ }
71
+ // check for images
72
+ _ , err = os .Stat (path .Join (appname , "images" ))
73
+ if err == nil {
74
+ err = tarAddDir (tarout , "images" )
75
+ if err != nil {
76
+ return err
44
77
}
45
- err = tarout . WriteHeader ( h )
78
+ imageDir , err := os . Open ( path . Join ( appname , "images" ) )
46
79
if err != nil {
47
80
return err
48
81
}
49
- _ , err = tarout . Write ( payload )
82
+ images , err := imageDir . Readdirnames ( 0 )
50
83
if err != nil {
51
84
return err
52
85
}
86
+ for _ , i := range images {
87
+ err = tarAdd (tarout , path .Join ("images" , i ), path .Join (appname , "images" , i ))
88
+ if err != nil {
89
+ return err
90
+ }
91
+ }
53
92
}
54
93
return tarout .Close ()
55
94
}
0 commit comments