@@ -50,47 +50,8 @@ func (pkg *zipPackage) InstallTo(targetDir string) (command.PackageManifest, err
50
50
zipReader , _ := zip .OpenReader (pkg .ZipFile )
51
51
defer zipReader .Close ()
52
52
for _ , file := range zipReader .Reader .File {
53
- zippedFile , err := file .Open ()
54
- if err != nil {
55
- return nil , fmt .Errorf ("installation failed: %s" , err )
56
- }
57
- defer zippedFile .Close ()
58
-
59
- extractedFilePath := filepath .Join (targetDir , file .Name )
60
- if file .FileInfo ().IsDir () {
61
- log .Println ("Directory Created:" , extractedFilePath )
62
- err := os .MkdirAll (extractedFilePath , file .Mode ())
63
- if err != nil {
64
- return nil , fmt .Errorf ("directory extraction failed: %s" , err )
65
- }
66
-
67
- fileStats , err := os .Stat (extractedFilePath )
68
- if err != nil {
69
- return nil , fmt .Errorf ("failed to stat %s: %s" , extractedFilePath , err )
70
- }
71
- permissions := fileStats .Mode ().Perm ()
72
- if permissions != 0o755 {
73
- // chmod to 755
74
- if err := os .Chmod (extractedFilePath , 0755 ); err != nil {
75
- return nil , fmt .Errorf ("failed to chmod %s to 0755: %s" , extractedFilePath , err )
76
- }
77
- }
78
- } else {
79
- log .Println ("File extracted:" , file .Name )
80
- outputFile , err := os .OpenFile (
81
- extractedFilePath ,
82
- os .O_WRONLY | os .O_CREATE | os .O_TRUNC ,
83
- file .Mode (),
84
- )
85
- if err != nil {
86
- return nil , fmt .Errorf ("file extraction failed: %s" , err )
87
- }
88
- defer outputFile .Close ()
89
-
90
- _ , err = io .Copy (outputFile , zippedFile )
91
- if err != nil {
92
- return nil , fmt .Errorf ("file data extraction failed: %s" , err )
93
- }
53
+ if err := extractZipEntry (targetDir , file ); err != nil {
54
+ return nil , err
94
55
}
95
56
}
96
57
@@ -133,3 +94,50 @@ func packageChecksum(pkgFile string) ([]byte, error) {
133
94
134
95
return h .Sum (nil ), nil
135
96
}
97
+
98
+ func extractZipEntry (targetDir string , file * zip.File ) error {
99
+ zippedFile , err := file .Open ()
100
+ if err != nil {
101
+ return fmt .Errorf ("installation failed: %s" , err )
102
+ }
103
+ defer zippedFile .Close ()
104
+
105
+ extractedFilePath := filepath .Join (targetDir , file .Name )
106
+ if file .FileInfo ().IsDir () {
107
+ log .Println ("Directory Created:" , extractedFilePath )
108
+ err := os .MkdirAll (extractedFilePath , file .Mode ())
109
+ if err != nil {
110
+ return fmt .Errorf ("directory extraction failed: %s" , err )
111
+ }
112
+
113
+ fileStats , err := os .Stat (extractedFilePath )
114
+ if err != nil {
115
+ return fmt .Errorf ("failed to stat %s: %s" , extractedFilePath , err )
116
+ }
117
+ permissions := fileStats .Mode ().Perm ()
118
+ if permissions != 0o755 {
119
+ // chmod to 755
120
+ if err := os .Chmod (extractedFilePath , 0755 ); err != nil {
121
+ return fmt .Errorf ("failed to chmod %s to 0755: %s" , extractedFilePath , err )
122
+ }
123
+ }
124
+ } else {
125
+ log .Println ("File extracted:" , file .Name )
126
+ outputFile , err := os .OpenFile (
127
+ extractedFilePath ,
128
+ os .O_WRONLY | os .O_CREATE | os .O_TRUNC ,
129
+ file .Mode (),
130
+ )
131
+ if err != nil {
132
+ return fmt .Errorf ("file extraction failed: %s" , err )
133
+ }
134
+ defer outputFile .Close ()
135
+
136
+ _ , err = io .Copy (outputFile , zippedFile )
137
+ if err != nil {
138
+ return fmt .Errorf ("file data extraction failed: %s" , err )
139
+ }
140
+ }
141
+
142
+ return nil
143
+ }
0 commit comments