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