Skip to content
This repository was archived by the owner on Sep 9, 2020. It is now read-only.

Commit 92740cb

Browse files
committed
Partially implements new init algorithm
- Adds running gps solver with project versions found on disk. - Picks constraints from the solver's solution and adds them to manifest projects with missing constraints. - Runs solver again to obtain final lock with appropriate project constraints.
1 parent 704bcdd commit 92740cb

File tree

1 file changed

+57
-26
lines changed

1 file changed

+57
-26
lines changed

cmd/dep/init.go

Lines changed: 57 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -135,25 +135,28 @@ func (cmd *initCommand) Run(ctx *dep.Ctx, args []string) error {
135135
)
136136
}
137137

138+
// Run solver with project versions found on disk
138139
internal.Vlogf("Solving...")
139-
params := gps.SolveParameters{
140-
RootDir: root,
141-
RootPackageTree: pkgT,
142-
Manifest: m,
143-
Lock: l,
144-
ProjectAnalyzer: dep.Analyzer{},
140+
soln, err := getSolverSolution(root, pkgT, m, l, sm)
141+
if err != nil {
142+
handleAllTheFailuresOfTheWorld(err)
143+
return err
145144
}
145+
l = dep.LockFromInterface(soln)
146146

147-
if *verbose {
148-
params.Trace = true
149-
params.TraceLogger = log.New(os.Stderr, "", 0)
150-
}
151-
s, err := gps.Prepare(params, sm)
152-
if err != nil {
153-
return errors.Wrap(err, "prepare solver")
147+
// Pick notondisk project constraints from solution and add to manifest
148+
for k, _ := range pd.notondisk {
149+
for _, x := range l.Projects() {
150+
if k == x.Ident().ProjectRoot {
151+
m.Dependencies[k] = getProjectPropertiesFromVersion(x.Version())
152+
break
153+
}
154+
}
154155
}
155156

156-
soln, err := s.Solve()
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)
157160
if err != nil {
158161
handleAllTheFailuresOfTheWorld(err)
159162
return err
@@ -208,6 +211,43 @@ func hasImportPathPrefix(s, prefix string) bool {
208211
return strings.HasPrefix(s, prefix+"/")
209212
}
210213

214+
// getProjectPropertiesFromVersion takes a gps.Version and returns a proper
215+
// gps.ProjectProperties with Constraint value based on the version type.
216+
func getProjectPropertiesFromVersion(v gps.Version) gps.ProjectProperties {
217+
pp := gps.ProjectProperties{}
218+
switch v.Type() {
219+
case gps.IsBranch, gps.IsVersion, gps.IsRevision:
220+
pp.Constraint = v
221+
case gps.IsSemver:
222+
c, _ := gps.NewSemverConstraint("^" + v.String())
223+
pp.Constraint = c
224+
}
225+
226+
return pp
227+
}
228+
229+
// getSolverSolution runs gps solver and returns a solution.
230+
func getSolverSolution(root string, pkgT pkgtree.PackageTree, m *dep.Manifest, l *dep.Lock, sm *gps.SourceMgr) (gps.Solution, error) {
231+
params := gps.SolveParameters{
232+
RootDir: root,
233+
RootPackageTree: pkgT,
234+
Manifest: m,
235+
Lock: l,
236+
ProjectAnalyzer: dep.Analyzer{},
237+
}
238+
239+
if *verbose {
240+
params.Trace = true
241+
params.TraceLogger = log.New(os.Stderr, "", 0)
242+
}
243+
s, err := gps.Prepare(params, sm)
244+
if err != nil {
245+
return nil, errors.Wrap(err, "prepare solver")
246+
}
247+
248+
return s.Solve()
249+
}
250+
211251
type projectData struct {
212252
constraints gps.ProjectConstraints // constraints that could be found
213253
dependencies map[gps.ProjectRoot][]string // all dependencies (imports) found by project root
@@ -257,21 +297,12 @@ func getProjectData(ctx *dep.Ctx, pkgT pkgtree.PackageTree, cpr string, sm *gps.
257297
v, err := ctx.VersionInWorkspace(pr)
258298
if err != nil {
259299
notondisk[pr] = true
260-
internal.Vlogf("Could not determine version for %q, assuming version to be master", pr)
261-
v = gps.Revision("master")
300+
internal.Vlogf("Could not determine version for %q, omitting from generated manifest", pr)
301+
continue
262302
}
263303

264304
ondisk[pr] = v
265-
pp := gps.ProjectProperties{}
266-
switch v.Type() {
267-
case gps.IsBranch, gps.IsVersion, gps.IsRevision:
268-
pp.Constraint = v
269-
case gps.IsSemver:
270-
c, _ := gps.NewSemverConstraint("^" + v.String())
271-
pp.Constraint = c
272-
}
273-
274-
constraints[pr] = pp
305+
constraints[pr] = getProjectPropertiesFromVersion(v)
275306
}
276307

277308
internal.Vlogf("Analyzing transitive imports...")

0 commit comments

Comments
 (0)