@@ -211,11 +211,6 @@ func (cmd *ensureCommand) Run(ctx *dep.Ctx, args []string) error {
211
211
statchan <- status
212
212
}(filepath .Join (p .AbsRoot , "vendor" ), lps )
213
213
214
- params .RootPackageTree , err = p .ParseRootPackageTree ()
215
- if err != nil {
216
- return err
217
- }
218
-
219
214
if fatal , err := checkErrors (params .RootPackageTree .Packages , p .Manifest .IgnoredPackages ()); err != nil {
220
215
if fatal {
221
216
return err
@@ -283,20 +278,32 @@ func (cmd *ensureCommand) runDefault(ctx *dep.Ctx, args []string, p *dep.Project
283
278
return err
284
279
}
285
280
286
- lock := p .Lock
281
+ lock := p .ChangedLock
287
282
if lock != nil {
288
- lsat := verify .LockSatisfiesInputs (p .Lock , p .Lock . SolveMeta . InputImports , p . Manifest , params .RootPackageTree )
283
+ lsat := verify .LockSatisfiesInputs (p .Lock , p .Manifest , params .RootPackageTree )
289
284
if ! lsat .Passed () {
290
- // TODO(sdboyer) print out what bits are unsatisfied here
285
+ if ctx .Verbose {
286
+ ctx .Out .Println ("Gopkg.lock is out of sync with Gopkg.toml and project code:" )
287
+ for _ , missing := range lsat .MissingImports () {
288
+ ctx .Out .Printf ("\t %s is missing from input-imports\n " , missing )
289
+ }
290
+ for _ , excess := range lsat .ExcessImports () {
291
+ ctx .Out .Printf ("\t %s is in input-imports, but isn't imported\n " , excess )
292
+ }
293
+ for pr , unmatched := range lsat .UnmatchedOverrides () {
294
+ ctx .Out .Printf ("\t %s is at %s, which is not allowed by override %s\n " , pr , unmatched .V , unmatched .C )
295
+ }
296
+ for pr , unmatched := range lsat .UnmatchedConstraints () {
297
+ ctx .Out .Printf ("\t %s is at %s, which is not allowed by constraint %s\n " , pr , unmatched .V , unmatched .C )
298
+ }
299
+ ctx .Out .Println ()
300
+ }
301
+
291
302
solver , err := gps .Prepare (params , sm )
292
303
if err != nil {
293
304
return errors .Wrap (err , "prepare solver" )
294
305
}
295
306
296
- if cmd .noVendor && cmd .dryRun {
297
- return errors .New ("Gopkg.lock was not up to date" )
298
- }
299
-
300
307
solution , err := solver .Solve (context .TODO ())
301
308
if err != nil {
302
309
return handleAllTheFailuresOfTheWorld (err )
@@ -306,23 +313,22 @@ func (cmd *ensureCommand) runDefault(ctx *dep.Ctx, args []string, p *dep.Project
306
313
// The user said not to touch vendor/, so definitely nothing to do.
307
314
return nil
308
315
}
309
-
310
316
}
311
317
312
- sw , err := dep .NewDeltaWriter (p .Lock , lock , <- statchan , p .Manifest .PruneOptions , filepath .Join (p .AbsRoot , "vendor" ))
318
+ dw , err := dep .NewDeltaWriter (p .Lock , lock , <- statchan , p .Manifest .PruneOptions , filepath .Join (p .AbsRoot , "vendor" ))
313
319
if err != nil {
314
320
return err
315
321
}
316
322
317
323
if cmd .dryRun {
318
- return sw .PrintPreparedActions (ctx .Out , ctx .Verbose )
324
+ return dw .PrintPreparedActions (ctx .Out , ctx .Verbose )
319
325
}
320
326
321
327
var logger * log.Logger
322
328
if ctx .Verbose {
323
329
logger = ctx .Err
324
330
}
325
- return errors .WithMessage (sw .Write (p .AbsRoot , sm , true , logger ), "grouped write of manifest, lock and vendor" )
331
+ return errors .WithMessage (dw .Write (p .AbsRoot , sm , true , logger ), "grouped write of manifest, lock and vendor" )
326
332
}
327
333
328
334
func (cmd * ensureCommand ) runVendorOnly (ctx * dep.Ctx , args []string , p * dep.Project , sm gps.SourceManager , params gps.SolveParameters ) error {
@@ -333,9 +339,10 @@ func (cmd *ensureCommand) runVendorOnly(ctx *dep.Ctx, args []string, p *dep.Proj
333
339
if p .Lock == nil {
334
340
return errors .Errorf ("no %s exists from which to populate vendor/" , dep .LockName )
335
341
}
342
+
336
343
// Pass the same lock as old and new so that the writer will observe no
337
344
// difference and choose not to write it out.
338
- sw , err := dep .NewSafeWriter (nil , p .Lock , p .Lock , dep .VendorAlways , p .Manifest .PruneOptions )
345
+ sw , err := dep .NewSafeWriter (nil , p .Lock , p .ChangedLock , dep .VendorAlways , p .Manifest .PruneOptions )
339
346
if err != nil {
340
347
return err
341
348
}
@@ -383,19 +390,19 @@ func (cmd *ensureCommand) runUpdate(ctx *dep.Ctx, args []string, p *dep.Project,
383
390
return handleAllTheFailuresOfTheWorld (err )
384
391
}
385
392
386
- sw , err := dep .NewSafeWriter ( nil , p .Lock , dep .LockFromSolution (solution , p .Manifest .PruneOptions ), cmd . vendorBehavior () , p .Manifest .PruneOptions )
393
+ dw , err := dep .NewDeltaWriter ( p .Lock , dep .LockFromSolution (solution , p .Manifest .PruneOptions ), <- statchan , p .Manifest .PruneOptions , filepath . Join ( p . AbsRoot , "vendor" ) )
387
394
if err != nil {
388
395
return err
389
396
}
390
397
if cmd .dryRun {
391
- return sw .PrintPreparedActions (ctx .Out , ctx .Verbose )
398
+ return dw .PrintPreparedActions (ctx .Out , ctx .Verbose )
392
399
}
393
400
394
401
var logger * log.Logger
395
402
if ctx .Verbose {
396
403
logger = ctx .Err
397
404
}
398
- return errors .Wrap (sw .Write (p .AbsRoot , sm , false , logger ), "grouped write of manifest, lock and vendor" )
405
+ return errors .Wrap (dw .Write (p .AbsRoot , sm , false , logger ), "grouped write of manifest, lock and vendor" )
399
406
}
400
407
401
408
func (cmd * ensureCommand ) runAdd (ctx * dep.Ctx , args []string , p * dep.Project , sm gps.SourceManager , params gps.SolveParameters , statchan chan map [string ]verify.VendorStatus ) error {
@@ -417,16 +424,6 @@ func (cmd *ensureCommand) runAdd(ctx *dep.Ctx, args []string, p *dep.Project, sm
417
424
418
425
rm , _ := params .RootPackageTree .ToReachMap (true , true , false , p .Manifest .IgnoredPackages ())
419
426
420
- // TODO(sdboyer) re-enable this once we ToReachMap() intelligently filters out normally-excluded (_*, .*), dirs from errmap
421
- //rm, errmap := params.RootPackageTree.ToReachMap(true, true, false, p.Manifest.IgnoredPackages())
422
- // Having some problematic internal packages isn't cause for termination,
423
- // but the user needs to be warned.
424
- //for fail, err := range errmap {
425
- //if _, is := err.Err.(*build.NoGoError); !is {
426
- //ctx.Err.Printf("Warning: %s, %s", fail, err)
427
- //}
428
- //}
429
-
430
427
// Compile unique sets of 1) all external packages imported or required, and
431
428
// 2) the project roots under which they fall.
432
429
exmap := make (map [string ]bool )
@@ -673,20 +670,20 @@ func (cmd *ensureCommand) runAdd(ctx *dep.Ctx, args []string, p *dep.Project, sm
673
670
}
674
671
sort .Strings (reqlist )
675
672
676
- sw , err := dep .NewSafeWriter ( nil , p .Lock , dep .LockFromSolution (solution , p .Manifest .PruneOptions ), dep . VendorOnChanged , p .Manifest .PruneOptions )
673
+ dw , err := dep .NewDeltaWriter ( p .Lock , dep .LockFromSolution (solution , p .Manifest .PruneOptions ), <- statchan , p .Manifest .PruneOptions , filepath . Join ( p . AbsRoot , "vendor" ) )
677
674
if err != nil {
678
675
return err
679
676
}
680
677
681
678
if cmd .dryRun {
682
- return sw .PrintPreparedActions (ctx .Out , ctx .Verbose )
679
+ return dw .PrintPreparedActions (ctx .Out , ctx .Verbose )
683
680
}
684
681
685
682
var logger * log.Logger
686
683
if ctx .Verbose {
687
684
logger = ctx .Err
688
685
}
689
- if err := errors .Wrap (sw .Write (p .AbsRoot , sm , true , logger ), "grouped write of manifest, lock and vendor" ); err != nil {
686
+ if err := errors .Wrap (dw .Write (p .AbsRoot , sm , true , logger ), "grouped write of manifest, lock and vendor" ); err != nil {
690
687
return err
691
688
}
692
689
0 commit comments