SemanticSelector

sbt.librarymanagement.SemanticSelector
See theSemanticSelector companion object
final class SemanticSelector extends Serializable

Semantic version selector API to check if the VersionNumber satisfies conditions described by semantic version selector.

A comparator generally consist of an operator and version specifier. The set of operators is

  • <: Less than
  • <=: Less than or equal to
  • >: Greater than
  • >=: Greater than or equal to
  • =: Equal If no operator is specified, = is assumed.

If minor or patch versions are not specified, some numbers are assumed.

  • <=1.0 is equivalent to <1.1.0.
  • <1.0 is equivalent to <1.0.0.
  • >=1.0 is equivalent to >=1.0.0.
  • >1.0 is equivalent to >=1.1.0.
  • =1.0 is equivalent to >=1.0 <=1.0 (so >=1.0.0 <1.1.0).

Comparators can be combined by spaces to form the intersection set of the comparators. For example, >1.2.3 <4.5.6 matches versions that are greater than 1.2.3 AND less than 4.5.6.

The (intersection) set of comparators can combined by || (spaces are required) to form the union set of the intersection sets. So the semantic selector is in disjunctive normal form.

Wildcard (x, X, *) can be used to match any number of minor or patch version. Actually, 1.0.x is equivalent to =1.0 (that is equivalent to >=1.0.0 <1.1.0)

The hyphen range like 1.2.3 - 4.5.6 matches inclusive set of versions. So 1.2.3 - 4.5.6 is equivalent to >=1.2.3 <=4.5.6. Both sides of comparators around - are required and they can not have any operators. For example, >=1.2.3 - 4.5.6 is invalid.

The order of versions basically follows the rule specified in https://semver.org/#spec-item-11

When major, minor, and patch are equal, a pre-release version has lower precedence than a normal version. Example: 1.0.0-alpha < 1.0.0. Precedence for two pre-release versions with the same major, minor, and patch version Must be determined by comparing each dot separated identifier from left to right until a difference is found as follows: identifiers consisting of only digits are compared numerically and identifiers with letters or hyphens are compared lexically in ASCII sort order. Numeric identifiers always have lower precedence than non-numeric identifiers. A larger set of pre-release fields has a higher precedence than a smaller set, if all of the preceding identifiers are equal. Example: 1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0.

The differences from the original specification are following

  • SemanticVersionSelector separetes the pre-release fields by hyphen instead of dot
  • hyphen cannot be used in pre-release identifiers because it is used as separator for pre-release fields

Therefore, in order to match pre-release versions like 1.0.0-beta we need to explicitly specify the pre-release identifiers like >=1.0.0-alpha.

Attributes

Companion:
object
Graph
Supertypes
trait Serializable
class Object
trait Matchable
class Any

Members list

Concise view

Value members

Concrete methods

override def equals(o: Any): Boolean

Compares the receiver object (this) with the argument object (that) for equivalence.

Compares the receiver object (this) with the argument object (that) for equivalence.

Any implementation of this method should be an equivalence relation:

  • It is reflexive: for any instance x of type Any, x.equals(x) should return true.
  • It is symmetric: for any instances x and y of type Any, x.equals(y) should return true if and only if y.equals(x) returns true.
  • It is transitive: for any instances x, y, and z of type Any if x.equals(y) returns true and y.equals(z) returns true, then x.equals(z) should return true.

If you override this method, you should verify that your implementation remains an equivalence relation. Additionally, when overriding this method it is usually necessary to override hashCode to ensure that objects which are "equal" (o1.equals(o2) returns true) hash to the same scala.Int. (o1.hashCode.equals(o2.hashCode)).

Attributes

that

the object to compare against this object for equality.

Returns:

true if the receiver object is equivalent to the argument; false otherwise.

Definition Classes
Any
override def hashCode: Int

Calculate a hash code value for the object.

Calculate a hash code value for the object.

The default hashing algorithm is platform dependent.

Note that it is allowed for two objects to have identical hash codes (o1.hashCode.equals(o2.hashCode)) yet not be equal (o1.equals(o2) returns false). A degenerate implementation could always return 0. However, it is required that if two objects are equal (o1.equals(o2) returns true) that they have identical hash codes (o1.hashCode.equals(o2.hashCode)). Therefore, when overriding this method, be sure to verify that the behavior is consistent with the equals method.

Attributes

Returns:

the hash code value for this object.

Definition Classes
Any
def matches(versionNumber: VersionNumber): Boolean
override def toString: String

Returns a string representation of the object.

Returns a string representation of the object.

The default representation is platform dependent.

Attributes

Returns:

a string representation of the object.

Definition Classes
Any

Concrete fields