@@ -119,6 +119,9 @@ type outputter interface {
119
119
MissingHeader () error
120
120
MissingLine (* MissingStatus ) error
121
121
MissingFooter () error
122
+ StatusMissingHeader () error
123
+ StatusMissingLine (gps.ProjectRoot ) error
124
+ StatusMissingFooter () error
122
125
}
123
126
124
127
// Only a subset of the outputters should be able to output old statuses.
@@ -170,6 +173,20 @@ func (out *tableOutput) MissingFooter() error {
170
173
return out .w .Flush ()
171
174
}
172
175
176
+ func (out * tableOutput ) StatusMissingHeader () error {
177
+ _ , err := fmt .Fprintln (out .w , "Missing dependencies (not present in lock):" )
178
+ return err
179
+ }
180
+
181
+ func (out * tableOutput ) StatusMissingLine (missingDep gps.ProjectRoot ) error {
182
+ _ , err := fmt .Fprintf (out .w , " %v\n " , missingDep )
183
+ return err
184
+ }
185
+
186
+ func (out * tableOutput ) StatusMissingFooter () error {
187
+ return out .w .Flush ()
188
+ }
189
+
173
190
func (out * tableOutput ) OldHeader () error {
174
191
_ , err := fmt .Fprintf (out .w , "PROJECT\t CONSTRAINT\t REVISION\t LATEST\n " )
175
192
return err
@@ -191,10 +208,11 @@ func (out *tableOutput) OldFooter() error {
191
208
}
192
209
193
210
type jsonOutput struct {
194
- w io.Writer
195
- basic []* rawStatus
196
- missing []* MissingStatus
197
- old []* rawOldStatus
211
+ w io.Writer
212
+ basic []* rawStatus
213
+ missing []* MissingStatus
214
+ statusMissing []struct { ProjectRoot gps.ProjectRoot }
215
+ old []* rawOldStatus
198
216
}
199
217
200
218
func (out * jsonOutput ) BasicHeader () error {
@@ -225,6 +243,21 @@ func (out *jsonOutput) MissingFooter() error {
225
243
return json .NewEncoder (out .w ).Encode (out .missing )
226
244
}
227
245
246
+ func (out * jsonOutput ) StatusMissingHeader () error {
247
+ out .statusMissing = []struct { ProjectRoot gps.ProjectRoot }{}
248
+ return nil
249
+ }
250
+
251
+ func (out * jsonOutput ) StatusMissingLine (missingDep gps.ProjectRoot ) error {
252
+ out .statusMissing = append (out .statusMissing ,
253
+ struct { ProjectRoot gps.ProjectRoot }{missingDep })
254
+ return nil
255
+ }
256
+
257
+ func (out * jsonOutput ) StatusMissingFooter () error {
258
+ return json .NewEncoder (out .w ).Encode (out .statusMissing )
259
+ }
260
+
228
261
func (out * jsonOutput ) OldHeader () error {
229
262
out .old = []* rawOldStatus {}
230
263
return nil
@@ -269,9 +302,12 @@ func (out *dotOutput) BasicLine(bs *BasicStatus) error {
269
302
return nil
270
303
}
271
304
272
- func (out * dotOutput ) MissingHeader () error { return nil }
273
- func (out * dotOutput ) MissingLine (ms * MissingStatus ) error { return nil }
274
- func (out * dotOutput ) MissingFooter () error { return nil }
305
+ func (out * dotOutput ) MissingHeader () error { return nil }
306
+ func (out * dotOutput ) MissingLine (ms * MissingStatus ) error { return nil }
307
+ func (out * dotOutput ) MissingFooter () error { return nil }
308
+ func (out * dotOutput ) StatusMissingHeader () error { return nil }
309
+ func (out * dotOutput ) StatusMissingLine (missingDep gps.ProjectRoot ) error { return nil }
310
+ func (out * dotOutput ) StatusMissingFooter () error { return nil }
275
311
276
312
type templateOutput struct {
277
313
w io.Writer
@@ -303,6 +339,12 @@ func (out *templateOutput) MissingFooter() error { return nil }
303
339
func (out * templateOutput ) MissingLine (ms * MissingStatus ) error {
304
340
return out .tmpl .Execute (out .w , ms )
305
341
}
342
+ func (out * templateOutput ) StatusMissingHeader () error { return nil }
343
+ func (out * templateOutput ) StatusMissingLine (missingDep gps.ProjectRoot ) error {
344
+ t := struct { ProjectRoot gps.ProjectRoot }{missingDep }
345
+ return out .tmpl .Execute (out .w , t )
346
+ }
347
+ func (out * templateOutput ) StatusMissingFooter () error { return nil }
306
348
307
349
func (cmd * statusCommand ) Run (ctx * dep.Ctx , args []string ) error {
308
350
if cmd .examples {
@@ -373,7 +415,10 @@ func (cmd *statusCommand) Run(ctx *dep.Ctx, args []string) error {
373
415
}
374
416
375
417
if cmd .missing {
376
- err := cmd .runStatusMissing (ctx , p )
418
+ err := cmd .runStatusMissing (ctx , out , p )
419
+ if len (buf .String ()) > 0 {
420
+ ctx .Out .Print (buf .String ())
421
+ }
377
422
return err
378
423
}
379
424
@@ -491,7 +536,7 @@ func (os OldStatus) marshalJSON() *rawOldStatus {
491
536
}
492
537
493
538
// runStatusMissing analyses the project for missing dependencies in lock file.
494
- func (cmd * statusCommand ) runStatusMissing (ctx * dep.Ctx , p * dep.Project ) error {
539
+ func (cmd * statusCommand ) runStatusMissing (ctx * dep.Ctx , out outputter , p * dep.Project ) error {
495
540
496
541
ptree , err := p .ParseRootPackageTree ()
497
542
if err != nil {
@@ -500,7 +545,7 @@ func (cmd *statusCommand) runStatusMissing(ctx *dep.Ctx, p *dep.Project) error {
500
545
rm , _ := ptree .ToReachMap (true , true , false , p .Manifest .IgnoredPackages ())
501
546
external := rm .FlattenFn (paths .IsStandardImportPath )
502
547
503
- var missingDeps []string
548
+ var missingDeps []gps. ProjectRoot
504
549
505
550
missingOuter:
506
551
for _ , d := range external {
@@ -510,16 +555,23 @@ missingOuter:
510
555
}
511
556
}
512
557
513
- missingDeps = append (missingDeps , d )
558
+ missingDeps = append (missingDeps , gps . ProjectRoot ( d ) )
514
559
}
515
560
516
561
if missingDeps != nil {
517
- ctx .Err .Printf ("Missing dependencies (not present in lock):\n " )
562
+ if err = out .StatusMissingHeader (); err != nil {
563
+ return err
564
+ }
518
565
for _ , d := range missingDeps {
519
- ctx .Err .Printf (" %v\n " , d )
566
+ if err = out .StatusMissingLine (d ); err != nil {
567
+ return err
568
+ }
569
+ }
570
+ if err = out .StatusMissingFooter (); err != nil {
571
+ return err
520
572
}
521
573
} else {
522
- ctx .Err .Println ("No missing dependencies found." )
574
+ ctx .Err .Printf ("No missing dependencies found." )
523
575
}
524
576
525
577
return nil
0 commit comments