| 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 /// Attempts to resolve a set of version constraints for a package dependency | 5 /// Attempts to resolve a set of version constraints for a package dependency |
| 6 /// graph and select an appropriate set of best specific versions for all | 6 /// graph and select an appropriate set of best specific versions for all |
| 7 /// dependent packages. It works iteratively and tries to reach a stable | 7 /// dependent packages. It works iteratively and tries to reach a stable |
| 8 /// solution where the constraints of all dependencies are met. If it fails to | 8 /// solution where the constraints of all dependencies are met. If it fails to |
| 9 /// reach a solution after a certain number of iterations, it assumes the | 9 /// reach a solution after a certain number of iterations, it assumes the |
| 10 /// dependency graph is unstable and reports and error. | 10 /// dependency graph is unstable and reports and error. |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 | 182 |
| 183 for (var dependerName in dependency.dependers) { | 183 for (var dependerName in dependency.dependers) { |
| 184 var depender = getDependency(dependerName); | 184 var depender = getDependency(dependerName); |
| 185 var locked = lockFile.packages[dependerName]; | 185 var locked = lockFile.packages[dependerName]; |
| 186 if (locked != null && depender.version == locked.version) { | 186 if (locked != null && depender.version == locked.version) { |
| 187 enqueue(new UnlockPackage(depender)); | 187 enqueue(new UnlockPackage(depender)); |
| 188 return true; | 188 return true; |
| 189 } | 189 } |
| 190 } | 190 } |
| 191 | 191 |
| 192 return dependency.dependers.mappedBy(getDependency).any((subdependency) => | 192 return dependency.dependers.map(getDependency).any((subdependency) => |
| 193 tryUnlockDepender(subdependency, seen)); | 193 tryUnlockDepender(subdependency, seen)); |
| 194 } | 194 } |
| 195 | 195 |
| 196 List<PackageId> buildResults() { | 196 List<PackageId> buildResults() { |
| 197 return _packages.values.where((dep) => dep.isDependedOn).mappedBy((dep) { | 197 return _packages.values.where((dep) => dep.isDependedOn).map((dep) { |
| 198 var description = dep.description; | 198 var description = dep.description; |
| 199 | 199 |
| 200 // If the lockfile contains a fully-resolved description for the package, | 200 // If the lockfile contains a fully-resolved description for the package, |
| 201 // use that. This allows e.g. Git to ensure that the same commit is used. | 201 // use that. This allows e.g. Git to ensure that the same commit is used. |
| 202 var lockedPackage = lockFile.packages[dep.name]; | 202 var lockedPackage = lockFile.packages[dep.name]; |
| 203 if (lockedPackage != null && lockedPackage.version == dep.version && | 203 if (lockedPackage != null && lockedPackage.version == dep.version && |
| 204 lockedPackage.source.name == dep.source.name && | 204 lockedPackage.source.name == dep.source.name && |
| 205 dep.source.descriptionsEqual( | 205 dep.source.descriptionsEqual( |
| 206 description, lockedPackage.description)) { | 206 description, lockedPackage.description)) { |
| 207 description = lockedPackage.description; | 207 description = lockedPackage.description; |
| (...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 | 500 |
| 501 /// The names of all the packages that depend on this dependency. | 501 /// The names of all the packages that depend on this dependency. |
| 502 Iterable<String> get dependers => _refs.keys; | 502 Iterable<String> get dependers => _refs.keys; |
| 503 | 503 |
| 504 /// Gets the overall constraint that all packages are placing on this one. | 504 /// Gets the overall constraint that all packages are placing on this one. |
| 505 /// If no packages have a constraint on this one (which can happen when this | 505 /// If no packages have a constraint on this one (which can happen when this |
| 506 /// package is in the process of being added to the graph), returns `null`. | 506 /// package is in the process of being added to the graph), returns `null`. |
| 507 VersionConstraint get constraint { | 507 VersionConstraint get constraint { |
| 508 if (_refs.isEmpty) return null; | 508 if (_refs.isEmpty) return null; |
| 509 return new VersionConstraint.intersection( | 509 return new VersionConstraint.intersection( |
| 510 _refs.values.mappedBy((ref) => ref.constraint)); | 510 _refs.values.map((ref) => ref.constraint)); |
| 511 } | 511 } |
| 512 | 512 |
| 513 /// The source of this dependency's package. | 513 /// The source of this dependency's package. |
| 514 Source get source { | 514 Source get source { |
| 515 var canonical = _canonicalRef(); | 515 var canonical = _canonicalRef(); |
| 516 if (canonical == null) return null; | 516 if (canonical == null) return null; |
| 517 return canonical.source; | 517 return canonical.source; |
| 518 } | 518 } |
| 519 | 519 |
| 520 /// The description of this dependency's package. | 520 /// The description of this dependency's package. |
| (...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 697 | 697 |
| 698 String toString() { | 698 String toString() { |
| 699 // TODO(nweiz): Dump descriptions to YAML when that's supported. | 699 // TODO(nweiz): Dump descriptions to YAML when that's supported. |
| 700 return "Incompatible dependencies on '$package':\n" | 700 return "Incompatible dependencies on '$package':\n" |
| 701 "- '$depender1' depends on it with description " | 701 "- '$depender1' depends on it with description " |
| 702 "${json.stringify(description1)}\n" | 702 "${json.stringify(description1)}\n" |
| 703 "- '$depender2' depends on it with description " | 703 "- '$depender2' depends on it with description " |
| 704 "${json.stringify(description2)}"; | 704 "${json.stringify(description2)}"; |
| 705 } | 705 } |
| 706 } | 706 } |
| OLD | NEW |