Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3866)

Unified Diff: lib/src/version.dart

Issue 1127783002: Add more set-like version constraint operations. (Closed) Base URL: git@github.com:dart-lang/pub_semver@master
Patch Set: Code review changes Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/src/version.dart
diff --git a/lib/src/version.dart b/lib/src/version.dart
index 2bf535fcc94f2687c5809e9b1d721f5cfea58b68..51972f7ddf4673ac71246b15aaa2df5dc330d6d7 100644
--- a/lib/src/version.dart
+++ b/lib/src/version.dart
@@ -4,7 +4,7 @@
library pub_semver.src.version;
-import 'dart:math';
+import 'dart:math' as math;
import 'package:collection/equality.dart';
@@ -16,7 +16,7 @@ import 'version_range.dart';
final _equality = const IterableEquality();
/// A parsed semantic version number.
-class Version implements Comparable<Version>, VersionConstraint {
+class Version implements Comparable<Version>, VersionConstraint, VersionRange {
/// No released version: i.e. "0.0.0".
static Version get none => new Version(0, 0, 0);
@@ -85,6 +85,11 @@ class Version implements Comparable<Version>, VersionConstraint {
/// of the parsed version.
final String _text;
+ Version get min => this;
+ Version get max => this;
+ bool get includeMin => true;
+ bool get includeMax => true;
+
Version._(this.major, this.minor, this.patch, String preRelease, String build,
this._text)
: preRelease = preRelease == null ? [] : _splitParts(preRelease),
@@ -237,19 +242,31 @@ class Version implements Comparable<Version>, VersionConstraint {
/// Tests if [other] matches this version exactly.
bool allows(Version other) => this == other;
- VersionConstraint intersect(VersionConstraint other) {
- if (other.isEmpty) return other;
+ bool allowsAll(VersionConstraint other) => other.isEmpty || other == this;
+
+ bool allowsAny(VersionConstraint other) => other.allows(this);
+
+ VersionConstraint intersect(VersionConstraint other) =>
+ other.allows(this) ? this : VersionConstraint.empty;
- // Intersect a version and a range.
- if (other is VersionRange) return other.intersect(this);
+ VersionConstraint union(VersionConstraint other) {
+ if (other.allows(this)) return other;
- // Intersecting two versions only works if they are the same.
- if (other is Version) {
- return this == other ? this : VersionConstraint.empty;
+ if (other is VersionRange) {
+ if (other.min == this) {
+ return new VersionRange(
+ min: other.min, max: other.max,
+ includeMin: true, includeMax: other.includeMax);
+ }
+
+ if (other.max == this) {
+ return new VersionRange(
+ min: other.min, max: other.max,
+ includeMin: other.includeMin, includeMax: true);
+ }
}
- throw new ArgumentError(
- 'Unknown VersionConstraint type $other.');
+ return new VersionConstraint.unionOf([this, other]);
}
int compareTo(Version other) {
@@ -277,7 +294,7 @@ class Version implements Comparable<Version>, VersionConstraint {
/// This is used for the pre-release and build version parts. This follows
/// Rule 12 of the Semantic Versioning spec (v2.0.0-rc.1).
int _compareLists(List a, List b) {
- for (var i = 0; i < max(a.length, b.length); i++) {
+ for (var i = 0; i < math.max(a.length, b.length); i++) {
var aPart = (i < a.length) ? a[i] : null;
var bPart = (i < b.length) ? b[i] : null;
« no previous file with comments | « lib/src/utils.dart ('k') | lib/src/version_constraint.dart » ('j') | lib/src/version_range.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698