@@ -6,11 +6,10 @@ package main
6
6
7
7
import (
8
8
"flag"
9
- "fmt"
10
- "log"
11
9
"os"
12
10
"path/filepath"
13
11
"strings"
12
+ "sync"
14
13
15
14
"github.com/golang/dep"
16
15
"github.com/golang/dep/gps"
@@ -59,18 +58,14 @@ func trimPathPrefix(p1, p2 string) string {
59
58
return p1
60
59
}
61
60
62
- func (cmd * initCommand ) Run (ctx * dep.Ctx , args []string ) error {
61
+ func (cmd * initCommand ) Run (ctx * dep.Ctx , loggers * Loggers , args []string ) error {
63
62
if len (args ) > 1 {
64
63
return errors .Errorf ("too many args (%d)" , len (args ))
65
64
}
66
65
67
66
var root string
68
67
if len (args ) <= 0 {
69
- wd , err := os .Getwd ()
70
- if err != nil {
71
- return err
72
- }
73
- root = wd
68
+ root = ctx .WorkingDir
74
69
} else {
75
70
root = args [0 ]
76
71
}
@@ -99,20 +94,24 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
99
94
if err != nil {
100
95
return errors .Wrap (err , "determineProjectRoot" )
101
96
}
102
- internal .Vlogf ("Finding dependencies for %q..." , cpr )
97
+ if loggers .Verbose {
98
+ loggers .Err .Printf ("dep: Finding dependencies for %q...\n " , cpr )
99
+ }
103
100
pkgT , err := pkgtree .ListPackages (root , cpr )
104
101
if err != nil {
105
102
return errors .Wrap (err , "gps.ListPackages" )
106
103
}
107
- internal .Vlogf ("Found %d dependencies." , len (pkgT .Packages ))
104
+ if loggers .Verbose {
105
+ loggers .Err .Printf ("dep: Found %d dependencies.\n " , len (pkgT .Packages ))
106
+ }
108
107
sm , err := ctx .SourceManager ()
109
108
if err != nil {
110
109
return errors .Wrap (err , "getSourceManager" )
111
110
}
112
111
sm .UseDefaultSignalHandling ()
113
112
defer sm .Release ()
114
113
115
- pd , err := getProjectData (ctx , pkgT , cpr , sm )
114
+ pd , err := getProjectData (ctx , loggers , pkgT , cpr , sm )
116
115
if err != nil {
117
116
return err
118
117
}
@@ -145,7 +144,9 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
145
144
}
146
145
147
146
// Run solver with project versions found on disk
148
- internal .Vlogf ("Solving..." )
147
+ if loggers .Verbose {
148
+ loggers .Err .Println ("dep: Solving..." )
149
+ }
149
150
params := gps.SolveParameters {
150
151
RootDir : root ,
151
152
RootPackageTree : pkgT ,
@@ -154,9 +155,10 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
154
155
ProjectAnalyzer : dep.Analyzer {},
155
156
}
156
157
157
- if * verbose {
158
- params .TraceLogger = log . New ( os . Stderr , "" , 0 )
158
+ if loggers . Verbose {
159
+ params .TraceLogger = loggers . Err
159
160
}
161
+
160
162
s , err := gps .Prepare (params , sm )
161
163
if err != nil {
162
164
return errors .Wrap (err , "prepare solver" )
@@ -188,7 +190,9 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
188
190
189
191
l .Memo = s .HashInputs ()
190
192
191
- internal .Vlogf ("Writing manifest and lock files." )
193
+ if loggers .Verbose {
194
+ loggers .Err .Println ("dep: Writing manifest and lock files." )
195
+ }
192
196
193
197
sw , err := dep .NewSafeWriter (m , nil , l , dep .VendorAlways )
194
198
if err != nil {
@@ -273,27 +277,31 @@ type projectData struct {
273
277
ondisk map [gps.ProjectRoot ]gps.Version // projects that were found on disk
274
278
}
275
279
276
- func getProjectData (ctx * dep.Ctx , pkgT pkgtree.PackageTree , cpr string , sm gps.SourceManager ) (projectData , error ) {
280
+ func getProjectData (ctx * dep.Ctx , loggers * Loggers , pkgT pkgtree.PackageTree , cpr string , sm gps.SourceManager ) (projectData , error ) {
277
281
constraints := make (gps.ProjectConstraints )
278
282
dependencies := make (map [gps.ProjectRoot ][]string )
279
283
packages := make (map [string ]bool )
280
284
notondisk := make (map [gps.ProjectRoot ]bool )
281
285
ondisk := make (map [gps.ProjectRoot ]gps.Version )
282
286
287
+ var syncDepGroup sync.WaitGroup
283
288
syncDep := func (pr gps.ProjectRoot , sm gps.SourceManager ) {
284
289
message := "Cached"
285
290
if err := sm .SyncSourceFor (gps.ProjectIdentifier {ProjectRoot : pr }); err != nil {
286
291
message = "Unable to cache"
287
292
}
288
- fmt .Fprintf (os .Stderr , "%s %s\n " , message , pr )
293
+ loggers .Err .Printf ("%s %s\n " , message , pr )
294
+ syncDepGroup .Done ()
289
295
}
290
296
291
297
rm , _ := pkgT .ToReachMap (true , true , false , nil )
292
298
if len (rm ) == 0 {
293
299
return projectData {}, nil
294
300
}
295
301
296
- internal .Vlogf ("Building dependency graph..." )
302
+ if loggers .Verbose {
303
+ loggers .Err .Println ("dep: Building dependency graph..." )
304
+ }
297
305
// Exclude stdlib imports from the list returned from Flatten().
298
306
const omitStdlib = false
299
307
for _ , ip := range rm .Flatten (omitStdlib ) {
@@ -307,23 +315,30 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm gps.S
307
315
dependencies [pr ] = append (dependencies [pr ], ip )
308
316
continue
309
317
}
318
+ syncDepGroup .Add (1 )
310
319
go syncDep (pr , sm )
311
320
312
- internal .Vlogf ("Found import of %q, analyzing..." , ip )
321
+ if loggers .Verbose {
322
+ loggers .Err .Printf ("dep: Found import of %q, analyzing...\n " , ip )
323
+ }
313
324
314
325
dependencies [pr ] = []string {ip }
315
326
v , err := ctx .VersionInWorkspace (pr )
316
327
if err != nil {
317
328
notondisk [pr ] = true
318
- internal .Vlogf ("Could not determine version for %q, omitting from generated manifest" , pr )
329
+ if loggers .Verbose {
330
+ loggers .Err .Printf ("dep: Could not determine version for %q, omitting from generated manifest\n " , pr )
331
+ }
319
332
continue
320
333
}
321
334
322
335
ondisk [pr ] = v
323
336
constraints [pr ] = getProjectPropertiesFromVersion (v )
324
337
}
325
338
326
- internal .Vlogf ("Analyzing transitive imports..." )
339
+ if loggers .Verbose {
340
+ loggers .Err .Printf ("dep: Analyzing transitive imports...\n " )
341
+ }
327
342
// Explore the packages we've found for transitive deps, either
328
343
// completing the lock or identifying (more) missing projects that we'll
329
344
// need to ask gps to solve for us.
@@ -342,7 +357,9 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm gps.S
342
357
dft = func (pkg string ) error {
343
358
switch colors [pkg ] {
344
359
case white :
345
- internal .Vlogf ("Analyzing %q..." , pkg )
360
+ if loggers .Verbose {
361
+ loggers .Err .Printf ("dep: Analyzing %q...\n " , pkg )
362
+ }
346
363
colors [pkg ] = grey
347
364
348
365
pr , err := sm .DeduceProjectRoot (pkg )
@@ -424,6 +441,7 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm gps.S
424
441
}
425
442
} else {
426
443
dependencies [pr ] = []string {pkg }
444
+ syncDepGroup .Add (1 )
427
445
go syncDep (pr , sm )
428
446
}
429
447
@@ -456,6 +474,8 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm gps.S
456
474
}
457
475
}
458
476
477
+ syncDepGroup .Wait ()
478
+
459
479
pd := projectData {
460
480
constraints : constraints ,
461
481
dependencies : dependencies ,
0 commit comments