| 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 library version_solver; | 5 library version_solver; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:json' as json; | 8 import 'dart:json' as json; |
| 9 | 9 |
| 10 import '../lock_file.dart'; | 10 import '../lock_file.dart'; |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 155 /// Base class for all failures that can occur while trying to resolve versions. | 155 /// Base class for all failures that can occur while trying to resolve versions. |
| 156 class SolveFailure implements Exception { | 156 class SolveFailure implements Exception { |
| 157 /// The name of the package whose version could not be solved. Will be `null` | 157 /// The name of the package whose version could not be solved. Will be `null` |
| 158 /// if the failure is not specific to one package. | 158 /// if the failure is not specific to one package. |
| 159 final String package; | 159 final String package; |
| 160 | 160 |
| 161 /// The known dependencies on [package] at the time of the failure. Will be | 161 /// The known dependencies on [package] at the time of the failure. Will be |
| 162 /// an empty collection if the failure is not specific to one package. | 162 /// an empty collection if the failure is not specific to one package. |
| 163 final Iterable<Dependency> dependencies; | 163 final Iterable<Dependency> dependencies; |
| 164 | 164 |
| 165 /// If this is `true`, then it may be possible to avoid this failure by |
| 166 /// adjusting one of the transitive dependencies of a package in |
| 167 /// [dependencies]. Otherwise, [dependencies] themselves are in conflict and |
| 168 /// only changing one of those may resolve the failure. |
| 169 bool get mayHaveTransitiveCause => true; |
| 170 |
| 165 SolveFailure(this.package, Iterable<Dependency> dependencies) | 171 SolveFailure(this.package, Iterable<Dependency> dependencies) |
| 166 : dependencies = dependencies != null ? dependencies : <Dependency>[]; | 172 : dependencies = dependencies != null ? dependencies : <Dependency>[]; |
| 167 | 173 |
| 168 /// Writes [dependencies] to [buffer] as a bullet list. If [describe] is | 174 /// Writes [dependencies] to [buffer] as a bullet list. If [describe] is |
| 169 /// passed, it will be called for each dependency and the result will be | 175 /// passed, it will be called for each dependency and the result will be |
| 170 /// written next to the dependency. | 176 /// written next to the dependency. |
| 171 void writeDependencies(StringBuffer buffer, | 177 void writeDependencies(StringBuffer buffer, |
| 172 [String describe(PackageDep dep)]) { | 178 [String describe(PackageDep dep)]) { |
| 173 var map = {}; | 179 var map = {}; |
| 174 for (var dep in dependencies) { | 180 for (var dep in dependencies) { |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 268 String get _message => "Incompatible version constraints on '$package'"; | 274 String get _message => "Incompatible version constraints on '$package'"; |
| 269 } | 275 } |
| 270 | 276 |
| 271 /// Exception thrown when two packages with the same name but different sources | 277 /// Exception thrown when two packages with the same name but different sources |
| 272 /// are depended upon. | 278 /// are depended upon. |
| 273 class SourceMismatchException extends SolveFailure { | 279 class SourceMismatchException extends SolveFailure { |
| 274 | 280 |
| 275 SourceMismatchException(String package, Iterable<Dependency> dependencies) | 281 SourceMismatchException(String package, Iterable<Dependency> dependencies) |
| 276 : super(package, dependencies); | 282 : super(package, dependencies); |
| 277 | 283 |
| 284 bool get mayHaveTransitiveCause => false; |
| 285 |
| 278 String get _message => "Incompatible dependencies on '$package'"; | 286 String get _message => "Incompatible dependencies on '$package'"; |
| 279 | 287 |
| 280 String _describeDependency(PackageDep dep) => | 288 String _describeDependency(PackageDep dep) => |
| 281 "depends on it from source ${dep.source}"; | 289 "depends on it from source ${dep.source}"; |
| 282 } | 290 } |
| 283 | 291 |
| 284 /// Exception thrown when two packages with the same name and source but | 292 /// Exception thrown when two packages with the same name and source but |
| 285 /// different descriptions are depended upon. | 293 /// different descriptions are depended upon. |
| 286 class DescriptionMismatchException extends SolveFailure { | 294 class DescriptionMismatchException extends SolveFailure { |
| 287 DescriptionMismatchException(String package, | 295 DescriptionMismatchException(String package, |
| 288 Iterable<Dependency> dependencies) | 296 Iterable<Dependency> dependencies) |
| 289 : super(package, dependencies); | 297 : super(package, dependencies); |
| 290 | 298 |
| 299 bool get mayHaveTransitiveCause => false; |
| 300 |
| 291 String get _message => "Incompatible dependencies on '$package'"; | 301 String get _message => "Incompatible dependencies on '$package'"; |
| 292 | 302 |
| 293 String _describeDependency(PackageDep dep) { | 303 String _describeDependency(PackageDep dep) { |
| 294 // TODO(nweiz): Dump descriptions to YAML when that's supported. | 304 // TODO(nweiz): Dump descriptions to YAML when that's supported. |
| 295 return "depends on it with description ${json.stringify(dep.description)}"; | 305 return "depends on it with description ${json.stringify(dep.description)}"; |
| 296 } | 306 } |
| 297 } | 307 } |
| OLD | NEW |