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

Side by Side Diff: utils/pub/version_solver.dart

Issue 10701146: Make VersionSolver actually return PackageIds. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Style change Created 8 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 /** 5 /**
6 * Attempts to resolve a set of version constraints for a package dependency 6 * Attempts to resolve a set of version constraints for a package dependency
7 * graph and select an appropriate set of best specific versions for all 7 * graph and select an appropriate set of best specific versions for all
8 * dependent packages. It works iteratively and tries to reach a stable 8 * dependent packages. It works iteratively and tries to reach a stable
9 * solution where the constraints of all dependencies are met. If it fails to 9 * solution where the constraints of all dependencies are met. If it fails to
10 * reach a solution after a certain number of iterations, it assumes the 10 * reach a solution after a certain number of iterations, it assumes the
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
47 #import('version.dart'); 47 #import('version.dart');
48 48
49 /** 49 /**
50 * Attempts to select the best concrete versions for all of the transitive 50 * Attempts to select the best concrete versions for all of the transitive
51 * dependencies of [root] taking into account all of the [VersionConstraint]s 51 * dependencies of [root] taking into account all of the [VersionConstraint]s
52 * that those dependencies place on each other. If successful, completes to a 52 * that those dependencies place on each other. If successful, completes to a
53 * [Map] that maps package names to the selected version for that package. If 53 * [Map] that maps package names to the selected version for that package. If
54 * it fails, the future will complete with a [NoVersionException], 54 * it fails, the future will complete with a [NoVersionException],
55 * [DisjointConstraintException], or [CouldNotSolveException]. 55 * [DisjointConstraintException], or [CouldNotSolveException].
56 */ 56 */
57 Future<Map<String, Version>> resolveVersions( 57 Future<List<PackageId>> resolveVersions(SourceRegistry sources, Package root) {
58 SourceRegistry sources, Package root) {
59 return new VersionSolver(sources, root).solve(); 58 return new VersionSolver(sources, root).solve();
60 } 59 }
61 60
62 class VersionSolver { 61 class VersionSolver {
63 final SourceRegistry _sources; 62 final SourceRegistry _sources;
64 final Package _root; 63 final Package _root;
65 final PubspecCache _pubspecs; 64 final PubspecCache _pubspecs;
66 final Map<String, Dependency> _packages; 65 final Map<String, Dependency> _packages;
67 final Queue<WorkItem> _work; 66 final Queue<WorkItem> _work;
68 int _numIterations = 0; 67 int _numIterations = 0;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
122 return _packages[package]; 121 return _packages[package];
123 } 122 }
124 123
125 /** 124 /**
126 * Sets the best selected version of [package] to [version]. 125 * Sets the best selected version of [package] to [version].
127 */ 126 */
128 void setVersion(String package, Version version) { 127 void setVersion(String package, Version version) {
129 _packages[package].version = version; 128 _packages[package].version = version;
130 } 129 }
131 130
132 Map<String, Version> buildResults() { 131 List<PackageId> buildResults() {
133 var results = <Version>{}; 132 return _packages.getValues()
134 _packages.forEach((name, dependency) { 133 .filter((dep) => dep.isDependedOn)
135 if (dependency.isDependedOn) { 134 .map((dep) => new PackageId(dep.source, dep.version, dep.description));
136 results[name] = dependency.version;
137 }
138 });
139
140 return results;
141 } 135 }
142 } 136 }
143 137
144 /** 138 /**
145 * The constraint solver works by iteratively processing a queue of work items. 139 * The constraint solver works by iteratively processing a queue of work items.
146 * Each item is a single atomic change to the dependency graph. Handling them 140 * Each item is a single atomic change to the dependency graph. Handling them
147 * in a queue lets us handle asynchrony (resolving versions requires information 141 * in a queue lets us handle asynchrony (resolving versions requires information
148 * from servers) as well as avoid deeply nested recursion. 142 * from servers) as well as avoid deeply nested recursion.
149 */ 143 */
150 interface WorkItem { 144 interface WorkItem {
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 final description1; 546 final description1;
553 final description2; 547 final description2;
554 548
555 DescriptionMismatchException(this.package, this.description1, 549 DescriptionMismatchException(this.package, this.description1,
556 this.description2); 550 this.description2);
557 551
558 // TODO(nweiz): Dump to YAML when that's supported 552 // TODO(nweiz): Dump to YAML when that's supported
559 String toString() => "Package '$package' has conflicting descriptions " 553 String toString() => "Package '$package' has conflicting descriptions "
560 "'${JSON.stringify(description1)}' and '${JSON.stringify(description2)}'"; 554 "'${JSON.stringify(description1)}' and '${JSON.stringify(description2)}'";
561 } 555 }
OLDNEW
« no previous file with comments | « no previous file | utils/tests/pub/version_solver_test.dart » ('j') | utils/tests/pub/version_solver_test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698