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

Commit a1f4e09

Browse files
committed
Select locked version compatible with the constraint
When selecting a preferred version for a lock (before solve) if the constraint is a semver range, ensure the version selected is compatible.
1 parent 8f78820 commit a1f4e09

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

cmd/dep/root_analyzer.go

+9
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,15 @@ func lookupVersionForLockedProject(pi gps.ProjectIdentifier, c gps.Constraint, r
164164
gps.SortPairedForUpgrade(versions) // Sort versions in asc order
165165
for _, v := range versions {
166166
if v.Revision() == rev {
167+
// If the constraint is semver, make sure the version is acceptable.
168+
// This prevents us from suggesting an incompatible version, which
169+
// helps narrow the field when there are multiple matching versions.
170+
if c != nil {
171+
_, err := gps.NewSemverConstraint(c.String())
172+
if err == nil && !c.Matches(v) {
173+
continue
174+
}
175+
}
167176
return v, nil
168177
}
169178
}

cmd/dep/root_analyzer_test.go

+24-2
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,8 @@ func TestLookupVersionForLockedProject_MatchRevisionToTag(t *testing.T) {
3535
defer sm.Release()
3636

3737
pi := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/sdboyer/deptest")}
38-
c, _ := gps.NewSemverConstraint("^0.8.1")
3938
rev := gps.Revision("ff2948a2ac8f538c4ecd55962e919d1e13e74baf")
40-
v, err := lookupVersionForLockedProject(pi, c, rev, sm)
39+
v, err := lookupVersionForLockedProject(pi, nil, rev, sm)
4140
h.Must(err)
4241

4342
wantV := "v1.0.0"
@@ -47,6 +46,29 @@ func TestLookupVersionForLockedProject_MatchRevisionToTag(t *testing.T) {
4746
}
4847
}
4948

49+
func TestLookupVersionForLockedProject_MatchRevisionToMultipleTags(t *testing.T) {
50+
h := test.NewHelper(t)
51+
defer h.Cleanup()
52+
53+
ctx := newTestContext(h)
54+
sm, err := ctx.SourceManager()
55+
h.Must(err)
56+
defer sm.Release()
57+
58+
pi := gps.ProjectIdentifier{ProjectRoot: gps.ProjectRoot("github.com/sdboyer/deptest")}
59+
// Both 0.8.0 and 1.0.0 use the same rev, force dep to pick the lower version
60+
c, _ := gps.NewSemverConstraint("<1.0.0")
61+
rev := gps.Revision("ff2948a2ac8f538c4ecd55962e919d1e13e74baf")
62+
v, err := lookupVersionForLockedProject(pi, c, rev, sm)
63+
h.Must(err)
64+
65+
wantV := "v0.8.0"
66+
gotV := v.String()
67+
if gotV != wantV {
68+
t.Fatalf("Expected '%s', got '%s'", wantV, gotV)
69+
}
70+
}
71+
5072
func TestLookupVersionForLockedProject_FallbackToConstraint(t *testing.T) {
5173
h := test.NewHelper(t)
5274
defer h.Cleanup()

0 commit comments

Comments
 (0)