@@ -215,11 +215,24 @@ func (cmd *statusCommand) Run(ctx *dep.Ctx, args []string) error {
215
215
}
216
216
}
217
217
218
- if err := runStatusAll (ctx .Loggers , out , p , sm ); err != nil {
218
+ digestMismatch , hasMissingPkgs , err := runStatusAll (ctx .Loggers , out , p , sm )
219
+ if err != nil {
219
220
return err
220
221
}
221
222
222
- ctx .Loggers .Out .Print (buf .String ())
223
+ if digestMismatch {
224
+ if hasMissingPkgs {
225
+ ctx .Loggers .Err .Println ("Lock inputs-digest mismatch due to the following packages missing from the lock:\n " )
226
+ ctx .Loggers .Out .Print (buf .String ())
227
+ ctx .Loggers .Err .Println ("\n This happens when a new import is added. Run `dep ensure` to install the missing packages." )
228
+ } else {
229
+ ctx .Loggers .Err .Printf ("Lock inputs-digest mismatch. This happens when Gopkg.toml is modified.\n " +
230
+ "Run `dep ensure` to regenerate the inputs-digest." )
231
+ }
232
+ } else {
233
+ ctx .Loggers .Out .Print (buf .String ())
234
+ }
235
+
223
236
return nil
224
237
}
225
238
@@ -240,17 +253,19 @@ type MissingStatus struct {
240
253
MissingPackages []string
241
254
}
242
255
243
- func runStatusAll (loggers * dep.Loggers , out outputter , p * dep.Project , sm gps.SourceManager ) error {
256
+ func runStatusAll (loggers * dep.Loggers , out outputter , p * dep.Project , sm gps.SourceManager ) (bool , bool , error ) {
257
+ var digestMismatch , hasMissingPkgs bool
258
+
244
259
if p .Lock == nil {
245
260
// TODO if we have no lock file, do...other stuff
246
- return nil
261
+ return digestMismatch , hasMissingPkgs , nil
247
262
}
248
263
249
264
// While the network churns on ListVersions() requests, statically analyze
250
265
// code from the current project.
251
266
ptree , err := pkgtree .ListPackages (p .AbsRoot , string (p .ImportRoot ))
252
267
if err != nil {
253
- return errors .Errorf ("analysis of local packages failed: %v" , err )
268
+ return digestMismatch , hasMissingPkgs , errors .Errorf ("analysis of local packages failed: %v" , err )
254
269
}
255
270
256
271
// Set up a solver in order to check the InputHash.
@@ -267,7 +282,7 @@ func runStatusAll(loggers *dep.Loggers, out outputter, p *dep.Project, sm gps.So
267
282
268
283
s , err := gps .Prepare (params , sm )
269
284
if err != nil {
270
- return errors .Errorf ("could not set up solver for input hashing: %s" , err )
285
+ return digestMismatch , hasMissingPkgs , errors .Errorf ("could not set up solver for input hashing: %s" , err )
271
286
}
272
287
273
288
cm := collectConstraints (ptree , p , sm )
@@ -298,7 +313,7 @@ func runStatusAll(loggers *dep.Loggers, out outputter, p *dep.Project, sm gps.So
298
313
ptr , err := sm .ListPackages (proj .Ident (), proj .Version ())
299
314
300
315
if err != nil {
301
- return fmt .Errorf ("analysis of %s package failed: %v" , proj .Ident ().ProjectRoot , err )
316
+ return digestMismatch , hasMissingPkgs , fmt .Errorf ("analysis of %s package failed: %v" , proj .Ident ().ProjectRoot , err )
302
317
}
303
318
304
319
prm , _ := ptr .ToReachMap (true , false , false , nil )
@@ -360,7 +375,7 @@ func runStatusAll(loggers *dep.Loggers, out outputter, p *dep.Project, sm gps.So
360
375
}
361
376
out .BasicFooter ()
362
377
363
- return nil
378
+ return digestMismatch , hasMissingPkgs , nil
364
379
}
365
380
366
381
// Hash digest mismatch may indicate that some deps are no longer
@@ -369,6 +384,7 @@ func runStatusAll(loggers *dep.Loggers, out outputter, p *dep.Project, sm gps.So
369
384
//
370
385
// It's possible for digests to not match, but still have a correct
371
386
// lock.
387
+ digestMismatch = true
372
388
rm , _ := ptree .ToReachMap (true , true , false , nil )
373
389
374
390
external := rm .FlattenFn (paths .IsStandardImportPath )
@@ -401,7 +417,7 @@ func runStatusAll(loggers *dep.Loggers, out outputter, p *dep.Project, sm gps.So
401
417
loggers .Err .Printf ("\t %s: %s\n " , fail .ex , fail .err .Error ())
402
418
}
403
419
404
- return errors .New ("address issues with undeducable import paths to get more status information. " )
420
+ return digestMismatch , hasMissingPkgs , errors .New ("address issues with undeducible import paths to get more status information" )
405
421
}
406
422
407
423
out .MissingHeader ()
@@ -416,11 +432,12 @@ outer:
416
432
}
417
433
}
418
434
435
+ hasMissingPkgs = true
419
436
out .MissingLine (& MissingStatus {ProjectRoot : string (root ), MissingPackages : pkgs })
420
437
}
421
438
out .MissingFooter ()
422
439
423
- return nil
440
+ return digestMismatch , hasMissingPkgs , nil
424
441
}
425
442
426
443
func formatVersion (v gps.Version ) string {
0 commit comments