| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:async'; | 5 import 'dart:async'; |
| 6 | 6 |
| 7 import 'package:pub_semver/pub_semver.dart'; | 7 import 'package:pub_semver/pub_semver.dart'; |
| 8 | 8 |
| 9 import '../entrypoint.dart'; | 9 import '../entrypoint.dart'; |
| 10 import '../log.dart' as log; | 10 import '../log.dart' as log; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 class DependencyValidator extends Validator { | 29 class DependencyValidator extends Validator { |
| 30 /// Whether the SDK constraint guarantees that `^` version constraints are | 30 /// Whether the SDK constraint guarantees that `^` version constraints are |
| 31 /// safe. | 31 /// safe. |
| 32 bool get _caretAllowed => entrypoint.root.pubspec.dartSdkConstraint | 32 bool get _caretAllowed => entrypoint.root.pubspec.dartSdkConstraint |
| 33 .intersect(_preCaretPubVersions).isEmpty; | 33 .intersect(_preCaretPubVersions).isEmpty; |
| 34 | 34 |
| 35 DependencyValidator(Entrypoint entrypoint) | 35 DependencyValidator(Entrypoint entrypoint) |
| 36 : super(entrypoint); | 36 : super(entrypoint); |
| 37 | 37 |
| 38 Future validate() async { | 38 Future validate() async { |
| 39 var caretDeps = []; | 39 var caretDeps = <PackageDep>[]; |
| 40 | 40 |
| 41 for (var dependency in entrypoint.root.pubspec.dependencies) { | 41 for (var dependency in entrypoint.root.pubspec.dependencies) { |
| 42 var constraint = dependency.constraint; |
| 42 if (dependency.source is! HostedSource) { | 43 if (dependency.source is! HostedSource) { |
| 43 await _warnAboutSource(dependency); | 44 await _warnAboutSource(dependency); |
| 44 } else if (dependency.constraint.isAny) { | 45 } else if (constraint.isAny) { |
| 45 _warnAboutNoConstraint(dependency); | 46 _warnAboutNoConstraint(dependency); |
| 46 } else if (dependency.constraint is Version) { | 47 } else if (constraint is Version) { |
| 47 _warnAboutSingleVersionConstraint(dependency); | 48 _warnAboutSingleVersionConstraint(dependency); |
| 48 } else if (dependency.constraint is VersionRange) { | 49 } else if (constraint is VersionRange) { |
| 49 if (dependency.constraint.min == null) { | 50 if (constraint.min == null) { |
| 50 _warnAboutNoConstraintLowerBound(dependency); | 51 _warnAboutNoConstraintLowerBound(dependency); |
| 51 } else if (dependency.constraint.max == null) { | 52 } else if (constraint.max == null) { |
| 52 _warnAboutNoConstraintUpperBound(dependency); | 53 _warnAboutNoConstraintUpperBound(dependency); |
| 53 } | 54 } |
| 54 | 55 |
| 55 if (dependency.constraint.toString().startsWith("^")) { | 56 if (constraint.toString().startsWith("^")) { |
| 56 caretDeps.add(dependency); | 57 caretDeps.add(dependency); |
| 57 } | 58 } |
| 58 } | 59 } |
| 59 } | 60 } |
| 60 | 61 |
| 61 if (caretDeps.isNotEmpty && !_caretAllowed) { | 62 if (caretDeps.isNotEmpty && !_caretAllowed) { |
| 62 _errorAboutCaretConstraints(caretDeps); | 63 _errorAboutCaretConstraints(caretDeps); |
| 63 } | 64 } |
| 64 } | 65 } |
| 65 | 66 |
| 66 /// Warn that dependencies should use the hosted source. | 67 /// Warn that dependencies should use the hosted source. |
| 67 Future _warnAboutSource(PackageDep dep) async { | 68 Future _warnAboutSource(PackageDep dep) async { |
| 68 var versions; | 69 List<Version> versions; |
| 69 try { | 70 try { |
| 70 var ids = await entrypoint.cache.hosted | 71 var ids = await entrypoint.cache.hosted |
| 71 .getVersions(entrypoint.cache.sources.hosted.refFor(dep.name)); | 72 .getVersions(entrypoint.cache.sources.hosted.refFor(dep.name)); |
| 72 versions = ids.map((id) => id.version).toList(); | 73 versions = ids.map((id) => id.version).toList(); |
| 73 } catch (error) { | 74 } catch (error) { |
| 74 versions = []; | 75 versions = []; |
| 75 } | 76 } |
| 76 | 77 |
| 77 var constraint; | 78 var constraint; |
| 78 var primary = Version.primary(versions); | 79 var primary = Version.primary(versions); |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 errors.add(buffer.toString().trim()); | 206 errors.add(buffer.toString().trim()); |
| 206 } | 207 } |
| 207 | 208 |
| 208 /// Returns the suggested version constraint for a dependency that was tested | 209 /// Returns the suggested version constraint for a dependency that was tested |
| 209 /// against [version]. | 210 /// against [version]. |
| 210 String _constraintForVersion(Version version) { | 211 String _constraintForVersion(Version version) { |
| 211 if (_caretAllowed) return "^$version"; | 212 if (_caretAllowed) return "^$version"; |
| 212 return '">=$version <${version.nextBreaking}"'; | 213 return '">=$version <${version.nextBreaking}"'; |
| 213 } | 214 } |
| 214 } | 215 } |
| OLD | NEW |