diff --git a/v4/range.go b/v4/range.go index cee7b4b..c8604b4 100644 --- a/v4/range.go +++ b/v4/range.go @@ -327,7 +327,7 @@ func expandWildcardVersion(parts [][]string) ([][]string, error) { for _, p := range parts { var newParts []string for _, ap := range p { - if strings.Contains(ap, "x") { + if containsWildcard(ap) { opStr, vStr, err := splitComparatorVersion(ap) if err != nil { return nil, err @@ -381,6 +381,12 @@ func expandWildcardVersion(parts [][]string) ([][]string, error) { return expandedParts, nil } +// containsWildcard returns true iff there's a wildcard in any of the major, minor or patch components +func containsWildcard(v string) bool { + withoutPrereleaseBuildMeta := strings.Split(strings.Split(v, "+")[0], "-")[0] + return strings.Contains(withoutPrereleaseBuildMeta, "x") +} + func parseComparator(s string) comparator { switch s { case "==": diff --git a/v4/range_test.go b/v4/range_test.go index 6d20759..a789553 100644 --- a/v4/range_test.go +++ b/v4/range_test.go @@ -202,6 +202,7 @@ func TestGetWildcardType(t *testing.T) { {"x", majorWildcard}, {"1.x", minorWildcard}, {"1.2.x", patchWildcard}, + {"1.2.3-experimental", noneWildcard}, {"fo.o.b.ar", noneWildcard}, } @@ -387,6 +388,16 @@ func TestParseRange(t *testing.T) { {"1.2.3", true}, {"1.2.4", false}, }}, + {"1.2.3-experimental.2", []tv{ + {"1.2.3-experimental.1", false}, + {"1.2.3-experimental.2", true}, + {"1.2.3-experimental.3", false}, + }}, + {"1.2.3+experimental.2", []tv{ + {"1.2.3+experimental.1", false}, + {"1.2.3+experimental.2", true}, + {"1.2.3+experimental.3", false}, + }}, {"=1.2.3", []tv{ {"1.2.2", false}, {"1.2.3", true},