@@ -112,6 +112,7 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
112
112
sm .UseDefaultSignalHandling ()
113
113
defer sm .Release ()
114
114
115
+ internal .Logf ("Searching GOPATH for projects..." )
115
116
pd , err := getProjectData (ctx , pkgT , cpr , sm )
116
117
if err != nil {
117
118
return err
@@ -144,6 +145,10 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
144
145
)
145
146
}
146
147
148
+ internal .Logf ("Using network for remaining projects..." )
149
+ // Copy lock before solving. Use this to separate new lock projects from soln
150
+ copyLock := * l
151
+
147
152
// Run solver with project versions found on disk
148
153
internal .Vlogf ("Solving..." )
149
154
params := gps.SolveParameters {
@@ -170,12 +175,26 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
170
175
}
171
176
l = dep .LockFromInterface (soln )
172
177
173
- // Pick notondisk project constraints from solution and add to manifest
174
- for k , _ := range pd .notondisk {
175
- for _ , x := range l .Projects () {
176
- if k == x .Ident ().ProjectRoot {
177
- m .Dependencies [k ] = getProjectPropertiesFromVersion (x .Version ())
178
- break
178
+ // Iterate through the new projects in solved lock and add them to manifest
179
+ // if direct deps and log feedback for all the new projects.
180
+ for _ , x := range l .Projects () {
181
+ pr := x .Ident ().ProjectRoot
182
+ newProject := true
183
+ // Check if it's a new project, not in the old lock
184
+ for _ , y := range copyLock .Projects () {
185
+ if pr == y .Ident ().ProjectRoot {
186
+ newProject = false
187
+ }
188
+ }
189
+ if newProject {
190
+ // Check if it's in notondisk project map. These are direct deps, should
191
+ // be added to manifest.
192
+ if _ , ok := pd .notondisk [pr ]; ok {
193
+ m .Dependencies [pr ] = getProjectPropertiesFromVersion (x .Version ())
194
+ feedback (x .Version (), pr , internal .DepTypeDirect )
195
+ } else {
196
+ // Log feedback of transitive project
197
+ feedback (x .Version (), pr , internal .DepTypeTransitive )
179
198
}
180
199
}
181
200
}
@@ -189,9 +208,6 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
189
208
190
209
l .Memo = s .HashInputs ()
191
210
192
- // Log itemized feedback about the resolved dependencies
193
- itemizedFeedback (m , l , pkgT )
194
-
195
211
internal .Vlogf ("Writing manifest and lock files." )
196
212
197
213
sw , err := dep .NewSafeWriter (m , nil , l , dep .VendorAlways )
@@ -242,73 +258,48 @@ func hasImportPathPrefix(s, prefix string) bool {
242
258
return strings .HasPrefix (s , prefix + "/" )
243
259
}
244
260
245
- // itemizedFeedback itemizes resolved dependencies and logs the solution as
246
- // feedback.
247
- func itemizedFeedback (m * dep.Manifest , l * dep.Lock , pkgT pkgtree.PackageTree ) {
248
- // Algo:
249
- // 1. collect direct external deps from PackageTree
250
- // 2. loop through lock projects
251
- // 2.a. check if the projects exists in direct deps list
252
- // 2.b. if it's a direct dep:
253
- // 2.b.i. if it has a version attached, constraints dep
254
- // 2.b.ii. if it has revision only, hint dep
255
- // 2.c. else it's a transitive dep, goes into lock
256
- // 2.d. log feedback
257
-
258
- // Extract direct external deps
259
- rm , errmap := pkgT .ToReachMap (true , true , false , nil )
260
- for fail := range errmap {
261
- internal .Logf ("Warning: %s" , fail )
262
- }
263
-
264
- directDeps := rm .Flatten (false )
265
-
266
- for _ , lock := range l .Projects () {
267
- // Get locked revision, version and branch
268
- r , v , b := gps .VersionComponentStrings (lock .Version ())
269
-
270
- // Check if it's a valid SHA1 digest and trim to 7 characters.
271
- if len (r ) == 40 {
272
- if _ , err := hex .DecodeString (r ); err == nil {
273
- // Valid SHA1 digest
274
- r = r [0 :7 ]
275
- }
276
- }
261
+ // feedback logs project constraint as feedback to the user.
262
+ func feedback (v gps.Version , pr gps.ProjectRoot , depType string ) {
263
+ rev , version , branch := gps .VersionComponentStrings (v )
277
264
278
- // Get LockedVersion
279
- var ver string
280
- if v != "" {
281
- ver = v
282
- } else if b != "" {
283
- ver = b
265
+ // Check if it's a valid SHA1 digest and trim to 7 characters.
266
+ if len (rev ) == 40 {
267
+ if _ , err := hex .DecodeString (rev ); err == nil {
268
+ // Valid SHA1 digest
269
+ rev = rev [0 :7 ]
284
270
}
271
+ }
285
272
286
- cf := & internal.ConstraintFeedback {
287
- LockedVersion : ver ,
288
- Revision : r ,
289
- ProjectPath : string (lock .Ident ().ProjectRoot ),
290
- }
273
+ // Get LockedVersion
274
+ var ver string
275
+ if version != "" {
276
+ ver = version
277
+ } else if branch != "" {
278
+ ver = branch
279
+ }
291
280
292
- // Get manifest version if available
293
- if pp , ok := m .Dependencies [lock .Ident ().ProjectRoot ]; ok && pp .Constraint != nil {
294
- cf .Version = pp .Constraint .String ()
295
- }
281
+ cf := & internal.ConstraintFeedback {
282
+ LockedVersion : ver ,
283
+ Revision : rev ,
284
+ ProjectPath : string (pr ),
285
+ DependencyType : depType ,
286
+ }
296
287
297
- if contains (directDeps , cf .ProjectPath ) {
298
- // Direct dependency
299
- cf .DependencyType = internal .DepTypeDirect
300
- if cf .LockedVersion != "" {
301
- cf .ConstraintType = internal .ConsTypeConstraint
302
- } else {
303
- cf .ConstraintType = internal .ConsTypeHint
304
- }
288
+ // Get non-revision constraint if available
289
+ if c := getProjectPropertiesFromVersion (v ).Constraint ; c != nil {
290
+ cf .Version = c .String ()
291
+ }
292
+
293
+ // Attach ConstraintType for direct dep based on locked version
294
+ if cf .DependencyType == internal .DepTypeDirect {
295
+ if cf .LockedVersion != "" {
296
+ cf .ConstraintType = internal .ConsTypeConstraint
305
297
} else {
306
- // Transitive dependency
307
- cf .DependencyType = internal .DepTypeTransitive
298
+ cf .ConstraintType = internal .ConsTypeHint
308
299
}
309
-
310
- cf .LogFeedback ()
311
300
}
301
+
302
+ cf .LogFeedback ()
312
303
}
313
304
314
305
// getProjectPropertiesFromVersion takes a gps.Version and returns a proper
@@ -392,6 +383,8 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm *gps.
392
383
393
384
ondisk [pr ] = v
394
385
constraints [pr ] = getProjectPropertiesFromVersion (v )
386
+
387
+ feedback (v , pr , internal .DepTypeDirect )
395
388
}
396
389
397
390
internal .Vlogf ("Analyzing transitive imports..." )
@@ -458,6 +451,7 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm *gps.
458
451
return nil
459
452
}
460
453
ondisk [pr ] = v
454
+ feedback (v , pr , internal .DepTypeTransitive )
461
455
}
462
456
463
457
ptree , err = pkgtree .ListPackages (r , string (pr ))
0 commit comments