@@ -141,7 +141,24 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
141
141
142
142
// Run solver with project versions found on disk
143
143
internal .Vlogf ("Solving..." )
144
- soln , err := getSolverSolution (root , pkgT , m , l , sm )
144
+ params := gps.SolveParameters {
145
+ RootDir : root ,
146
+ RootPackageTree : pkgT ,
147
+ Manifest : m ,
148
+ Lock : l ,
149
+ ProjectAnalyzer : dep.Analyzer {},
150
+ }
151
+
152
+ if * verbose {
153
+ params .Trace = true
154
+ params .TraceLogger = log .New (os .Stderr , "" , 0 )
155
+ }
156
+ s , err := gps .Prepare (params , sm )
157
+ if err != nil {
158
+ return errors .Wrap (err , "prepare solver" )
159
+ }
160
+
161
+ soln , err := s .Solve ()
145
162
if err != nil {
146
163
handleAllTheFailuresOfTheWorld (err )
147
164
return err
@@ -158,14 +175,14 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
158
175
}
159
176
}
160
177
161
- // Run solver again with appropriate constraint solutions from previous run
162
- // to generate the final lock.
163
- soln , err = getSolverSolution ( root , pkgT , m , l , sm )
178
+ // Run gps.Prepare with appropriate constraint solutions from solve run
179
+ // to generate the final lock memo .
180
+ s , err = gps . Prepare ( params , sm )
164
181
if err != nil {
165
- handleAllTheFailuresOfTheWorld (err )
166
- return err
182
+ return errors .Wrap (err , "prepare solver" )
167
183
}
168
- l = dep .LockFromInterface (soln )
184
+
185
+ l .Memo = s .HashInputs ()
169
186
170
187
internal .Vlogf ("Writing manifest and lock files." )
171
188
@@ -214,43 +231,45 @@ func hasImportPathPrefix(s, prefix string) bool {
214
231
return strings .HasPrefix (s , prefix + "/" )
215
232
}
216
233
234
+ // getVersionConstituents extracts version constituents
235
+ func getVersionConstituents (v gps.Version ) (version , revision string ) {
236
+ switch tv := v .(type ) {
237
+ case gps.UnpairedVersion :
238
+ version = tv .String ()
239
+ case gps.Revision :
240
+ revision = tv .String ()
241
+ case gps.PairedVersion :
242
+ version = tv .Unpair ().String ()
243
+ revision = tv .Underlying ().String ()
244
+ }
245
+
246
+ return version , revision
247
+ }
248
+
217
249
// getProjectPropertiesFromVersion takes a gps.Version and returns a proper
218
- // gps.ProjectProperties with Constraint value based on the version type .
250
+ // gps.ProjectProperties with Constraint value based on the provided version .
219
251
func getProjectPropertiesFromVersion (v gps.Version ) gps.ProjectProperties {
220
252
pp := gps.ProjectProperties {}
253
+
254
+ // constituent version and revision. Ignoring revison for manifest.
255
+ cv , _ := getVersionConstituents (v )
256
+
221
257
switch v .Type () {
222
- case gps .IsBranch , gps .IsVersion , gps .IsRevision :
223
- pp .Constraint = v
258
+ case gps .IsBranch :
259
+ pp .Constraint = gps .NewBranch (cv )
260
+ case gps .IsVersion :
261
+ pp .Constraint = gps .NewVersion (cv )
224
262
case gps .IsSemver :
225
- c , _ := gps .NewSemverConstraint ("^" + v .String ())
263
+ // TODO: remove "^" when https://github.com/golang/dep/issues/225 is ready.
264
+ c , _ := gps .NewSemverConstraint ("^" + cv )
226
265
pp .Constraint = c
266
+ case gps .IsRevision :
267
+ pp .Constraint = nil
227
268
}
228
269
229
270
return pp
230
271
}
231
272
232
- // getSolverSolution runs gps solver and returns a solution.
233
- func getSolverSolution (root string , pkgT pkgtree.PackageTree , m * dep.Manifest , l * dep.Lock , sm * gps.SourceMgr ) (gps.Solution , error ) {
234
- params := gps.SolveParameters {
235
- RootDir : root ,
236
- RootPackageTree : pkgT ,
237
- Manifest : m ,
238
- Lock : l ,
239
- ProjectAnalyzer : dep.Analyzer {},
240
- }
241
-
242
- if * verbose {
243
- params .Trace = true
244
- params .TraceLogger = log .New (os .Stderr , "" , 0 )
245
- }
246
- s , err := gps .Prepare (params , sm )
247
- if err != nil {
248
- return nil , errors .Wrap (err , "prepare solver" )
249
- }
250
-
251
- return s .Solve ()
252
- }
253
-
254
273
type projectData struct {
255
274
constraints gps.ProjectConstraints // constraints that could be found
256
275
dependencies map [gps.ProjectRoot ][]string // all dependencies (imports) found by project root
0 commit comments