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

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

Issue 12995013: Ignore lockfile entries where the source is wrong. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 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
« no previous file with comments | « no previous file | utils/tests/pub/install/switch_source_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 /// 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 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 /// first, followed by transitive dependers. 176 /// first, followed by transitive dependers.
177 bool tryUnlockDepender(Dependency dependency, [Set<String> seen]) { 177 bool tryUnlockDepender(Dependency dependency, [Set<String> seen]) {
178 if (seen == null) seen = new Set(); 178 if (seen == null) seen = new Set();
179 // Avoid an infinite loop if there are circular dependencies. 179 // Avoid an infinite loop if there are circular dependencies.
180 if (seen.contains(dependency.name)) return false; 180 if (seen.contains(dependency.name)) return false;
181 seen.add(dependency.name); 181 seen.add(dependency.name);
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 lockedPackage.source.name == dep.source.name) {
187 enqueue(new UnlockPackage(depender)); 188 enqueue(new UnlockPackage(depender));
188 return true; 189 return true;
189 } 190 }
190 } 191 }
191 192
192 return dependency.dependers.map(getDependency).any((subdependency) => 193 return dependency.dependers.map(getDependency).any((subdependency) =>
193 tryUnlockDepender(subdependency, seen)); 194 tryUnlockDepender(subdependency, seen));
194 } 195 }
195 196
196 List<PackageId> buildResults() { 197 List<PackageId> buildResults() {
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 // anything since it's already at the best version. 354 // anything since it's already at the best version.
354 if (name == solver._root.name) { 355 if (name == solver._root.name) {
355 solver.enqueue(new ChangeVersion( 356 solver.enqueue(new ChangeVersion(
356 name, source, description, solver._root.version)); 357 name, source, description, solver._root.version));
357 return null; 358 return null;
358 } 359 }
359 360
360 // If the dependency is on a package in the lockfile, use the lockfile's 361 // If the dependency is on a package in the lockfile, use the lockfile's
361 // version for that package if it's valid given the other constraints. 362 // version for that package if it's valid given the other constraints.
362 var lockedPackage = solver.lockFile.packages[name]; 363 var lockedPackage = solver.lockFile.packages[name];
363 if (lockedPackage != null) { 364 if (lockedPackage != null && newDependency.source == lockedPackage.source) {
364 var lockedVersion = lockedPackage.version; 365 var lockedVersion = lockedPackage.version;
365 if (newConstraint.allows(lockedVersion)) { 366 if (newConstraint.allows(lockedVersion)) {
366 solver.enqueue( 367 solver.enqueue(
367 new ChangeVersion(name, source, description, lockedVersion)); 368 new ChangeVersion(name, source, description, lockedVersion));
368 return null; 369 return null;
369 } 370 }
370 } 371 }
371 372
372 // The constraint has changed, so see what the best version of the package 373 // The constraint has changed, so see what the best version of the package
373 // that meets the new constraint is. 374 // that meets the new constraint is.
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 706
706 String toString() { 707 String toString() {
707 // TODO(nweiz): Dump descriptions to YAML when that's supported. 708 // TODO(nweiz): Dump descriptions to YAML when that's supported.
708 return "Incompatible dependencies on '$package':\n" 709 return "Incompatible dependencies on '$package':\n"
709 "- '$depender1' depends on it with description " 710 "- '$depender1' depends on it with description "
710 "${json.stringify(description1)}\n" 711 "${json.stringify(description1)}\n"
711 "- '$depender2' depends on it with description " 712 "- '$depender2' depends on it with description "
712 "${json.stringify(description2)}"; 713 "${json.stringify(description2)}";
713 } 714 }
714 } 715 }
OLDNEW
« no previous file with comments | « no previous file | utils/tests/pub/install/switch_source_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698