6
6
goflag "flag"
7
7
"fmt"
8
8
"os"
9
+ "reflect"
9
10
"sort"
10
11
"sync"
11
12
@@ -59,15 +60,21 @@ var RootCmd = &cobra.Command{
59
60
analyzeArgs = allAnalyzers
60
61
}
61
62
63
+ var err error
62
64
if len (args ) == 1 {
63
- analyzeImage (args [0 ], analyzeArgs )
65
+ err = analyzeImage (args [0 ], analyzeArgs )
64
66
} else {
65
- diffImages (args [0 ], args [1 ], analyzeArgs )
67
+ err = diffImages (args [0 ], args [1 ], analyzeArgs )
68
+ }
69
+
70
+ if err != nil {
71
+ glog .Error (err )
72
+ os .Exit (1 )
66
73
}
67
74
},
68
75
}
69
76
70
- func diffImages (image1Arg , image2Arg string , diffArgs []string ) {
77
+ func diffImages (image1Arg , image2Arg string , diffArgs []string ) error {
71
78
var wg sync.WaitGroup
72
79
wg .Add (2 )
73
80
@@ -80,7 +87,6 @@ func diffImages(image1Arg, image2Arg string, diffArgs []string) {
80
87
image1 , err = utils.ImagePrepper {image1Arg }.GetImage ()
81
88
if err != nil {
82
89
glog .Error (err .Error ())
83
- os .Exit (1 )
84
90
}
85
91
}()
86
92
@@ -89,16 +95,22 @@ func diffImages(image1Arg, image2Arg string, diffArgs []string) {
89
95
image2 , err = utils.ImagePrepper {image2Arg }.GetImage ()
90
96
if err != nil {
91
97
glog .Error (err .Error ())
92
- os .Exit (1 )
93
98
}
94
99
}()
100
+ wg .Wait ()
101
+ if err != nil {
102
+ cleanupImage (image1 )
103
+ cleanupImage (image2 )
104
+ return errors .New ("Could not perform image diff" )
105
+ }
95
106
96
107
diffTypes , err := differs .GetAnalyzers (diffArgs )
97
108
if err != nil {
98
109
glog .Error (err .Error ())
99
- os .Exit (1 )
110
+ cleanupImage (image1 )
111
+ cleanupImage (image2 )
112
+ return errors .New ("Could not perform image diff" )
100
113
}
101
- wg .Wait ()
102
114
103
115
req := differs.DiffRequest {image1 , image2 , diffTypes }
104
116
if diffs , err := req .GetDiff (); err == nil {
@@ -127,34 +139,36 @@ func diffImages(image1Arg, image2Arg string, diffArgs []string) {
127
139
glog .Error (err )
128
140
}
129
141
}
130
- fmt .Println ()
131
142
if ! save {
132
- glog .Info ("Removing image file system directories from system" )
133
- errMsg := remove (image1 .FSPath , true )
134
- errMsg += remove (image2 .FSPath , true )
135
- if errMsg != "" {
136
- glog .Error (errMsg )
137
- }
143
+ cleanupImage (image1 )
144
+ cleanupImage (image2 )
145
+
138
146
} else {
139
147
dir , _ := os .Getwd ()
140
148
glog .Infof ("Images were saved at %s as %s and %s" , dir , image1 .FSPath , image2 .FSPath )
141
149
}
142
150
} else {
143
151
glog .Error (err .Error ())
144
- os .Exit (1 )
152
+ cleanupImage (image1 )
153
+ cleanupImage (image2 )
154
+ return errors .New ("Could not perform image diff" )
145
155
}
156
+
157
+ return nil
146
158
}
147
159
148
- func analyzeImage (imageArg string , analyzerArgs []string ) {
160
+ func analyzeImage (imageArg string , analyzerArgs []string ) error {
149
161
image , err := utils.ImagePrepper {imageArg }.GetImage ()
150
162
if err != nil {
151
163
glog .Error (err .Error ())
152
- os .Exit (1 )
164
+ cleanupImage (image )
165
+ return errors .New ("Could not perform image analysis" )
153
166
}
154
167
analyzeTypes , err := differs .GetAnalyzers (analyzerArgs )
155
168
if err != nil {
156
169
glog .Error (err .Error ())
157
- os .Exit (1 )
170
+ cleanupImage (image )
171
+ return errors .New ("Could not perform image analysis" )
158
172
}
159
173
160
174
req := differs.SingleRequest {image , analyzeTypes }
@@ -184,22 +198,29 @@ func analyzeImage(imageArg string, analyzerArgs []string) {
184
198
glog .Error (err )
185
199
}
186
200
}
187
- fmt .Println ()
188
201
if ! save {
189
- glog .Info ("Removing image file system directory from system" )
190
- errMsg := remove (image .FSPath , true )
191
- if errMsg != "" {
192
- glog .Error (errMsg )
193
- }
202
+ cleanupImage (image )
194
203
} else {
195
204
dir , _ := os .Getwd ()
196
205
glog .Infof ("Image was saved at %s as %s" , dir , image .FSPath )
197
206
}
198
207
} else {
199
208
glog .Error (err .Error ())
200
- os .Exit (1 )
209
+ cleanupImage (image )
210
+ return errors .New ("Could not perform image analysis" )
201
211
}
202
212
213
+ return nil
214
+ }
215
+
216
+ func cleanupImage (image utils.Image ) {
217
+ if reflect .DeepEqual (image , (utils.Image {})) {
218
+ glog .Infof ("Removing image filesystem directory %s from system" , image .FSPath )
219
+ errMsg := remove (image .FSPath , true )
220
+ if errMsg != "" {
221
+ glog .Error (errMsg )
222
+ }
223
+ }
203
224
}
204
225
205
226
func getAllAnalyzers () []string {
0 commit comments