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

Unified Diff: lib/src/validator/sdk_constraint.dart

Issue 2172883002: Add validation for Flutter constraints. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Created 4 years, 5 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
« no previous file with comments | « no previous file | test/validator/sdk_constraint_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/validator/sdk_constraint.dart
diff --git a/lib/src/validator/sdk_constraint.dart b/lib/src/validator/sdk_constraint.dart
index bdf7e7be8bf98309738a9e77e1561546cde6c208..aa57baaa31f89e54aaf2751a61523e4e9485bd10 100644
--- a/lib/src/validator/sdk_constraint.dart
+++ b/lib/src/validator/sdk_constraint.dart
@@ -4,9 +4,15 @@
import 'dart:async';
+import 'package:pub_semver/pub_semver.dart';
+
import '../entrypoint.dart';
import '../validator.dart';
+/// The range of all Dart SDK versions that don't support Flutter SDK
+/// constraints.
+final _preFlutterSupport = new VersionConstraint.parse("<1.19.0");
+
/// A validator that validates that a package's SDK constraint doesn't use the
/// "^" syntax.
class SdkConstraintValidator extends Validator {
@@ -14,15 +20,33 @@ class SdkConstraintValidator extends Validator {
: super(entrypoint);
Future validate() async {
- var constraint = entrypoint.root.pubspec.dartSdkConstraint;
- if (!constraint.toString().startsWith("^")) return;
-
- errors.add(
- "^ version constraints aren't allowed for SDK constraints since "
- "older versions of pub don't support them.\n"
- "Expand it manually instead:\n"
- "\n"
- "environment:\n"
- " sdk: \">=${constraint.min} <${constraint.max}\"");
+ var dartConstraint = entrypoint.root.pubspec.dartSdkConstraint;
+ if (dartConstraint.toString().startsWith("^")) {
+ errors.add(
+ "^ version constraints aren't allowed for SDK constraints since "
+ "older versions of pub don't support them.\n"
+ "Expand it manually instead:\n"
+ "\n"
+ "environment:\n"
+ " sdk: \">=${dartConstraint.min} <${dartConstraint.max}\"");
+ }
+
+ if (entrypoint.root.pubspec.flutterSdkConstraint != null &&
+ dartConstraint.allowsAny(_preFlutterSupport)) {
+ var newDartConstraint = dartConstraint.difference(_preFlutterSupport);
+ if (newDartConstraint.isEmpty ||
+ newDartConstraint ==
+ VersionConstraint.any.difference(_preFlutterSupport)) {
+ newDartConstraint = new VersionConstraint.parse("<2.0.0")
+ .difference(_preFlutterSupport);
+ }
+
+ errors.add(
+ "Older versions of pub don't support Flutter SDK constraints.\n"
+ "Make sure your SDK constraint excludes those old versions:\n"
+ "\n"
+ "environment:\n"
+ " sdk: \"$newDartConstraint\"");
+ }
}
}
« no previous file with comments | « no previous file | test/validator/sdk_constraint_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698