Index: utils/pub/version_solver.dart |
diff --git a/utils/pub/version_solver.dart b/utils/pub/version_solver.dart |
index 5680b0ccc64899d5c561d62a8f5b19f7adb3e0d6..62dac2789722aeb87f9e2767e55d1f1bca68d83f 100644 |
--- a/utils/pub/version_solver.dart |
+++ b/utils/pub/version_solver.dart |
@@ -93,7 +93,8 @@ class VersionSolver { |
Future<List<PackageId>> solve() { |
// Kick off the work by adding the root package at its concrete version to |
// the dependency graph. |
- var ref = new PackageRef(new RootSource(_root), _root.version, _root.name); |
+ var ref = new PackageRef( |
+ _root.name, new RootSource(_root), _root.version, _root.name); |
enqueue(new AddConstraint('(entrypoint)', ref)); |
_pubspecs.cache(ref.atVersion(_root.version), _root.pubspec); |
@@ -150,8 +151,7 @@ class VersionSolver { |
* version constraints. |
*/ |
Future<Version> getBestVersion(Dependency dependency) { |
- return dependency.source.getVersions(dependency.description) |
- .transform((versions) { |
+ return dependency.getVersions().transform((versions) { |
var best = null; |
for (var version in versions) { |
if (dependency.useLatestVersion || |
@@ -209,7 +209,7 @@ class VersionSolver { |
description = lockedPackage.description; |
} |
- return new PackageId(dep.source, dep.version, description); |
+ return new PackageId(dep.name, dep.source, dep.version, description); |
}); |
} |
} |
@@ -235,6 +235,9 @@ abstract class WorkItem { |
* added to the graph. If [version] is `null`, it is being removed. |
*/ |
class ChangeVersion implements WorkItem { |
+ /// The name of the package whose version is being changed. |
+ final String package; |
+ |
/** |
* The source of the package whose version is changing. |
*/ |
@@ -250,12 +253,7 @@ class ChangeVersion implements WorkItem { |
*/ |
final Version version; |
- /** |
- * The name of the package whose version is changing. |
- */ |
- String get package => source.packageName(description); |
- |
- ChangeVersion(this.source, this.description, this.version) { |
+ ChangeVersion(this.package, this.source, this.description, this.version) { |
if (source == null) throw "null source"; |
} |
@@ -304,7 +302,7 @@ class ChangeVersion implements WorkItem { |
new Future<Map<String, PackageRef>>.immediate(<String, PackageRef>{}); |
} |
- var id = new PackageId(source, version, description); |
+ var id = new PackageId(package, source, version, description); |
return solver._pubspecs.load(id).transform((pubspec) { |
var dependencies = <String, PackageRef>{}; |
for (var dependency in pubspec.dependencies) { |
@@ -356,7 +354,7 @@ class ChangeConstraint implements WorkItem { |
// If the dependency has been cut free from the graph, just remove it. |
if (!newDependency.isDependedOn) { |
- solver.enqueue(new ChangeVersion(source, description, null)); |
+ solver.enqueue(new ChangeVersion(name, source, description, null)); |
return null; |
} |
@@ -364,7 +362,7 @@ class ChangeConstraint implements WorkItem { |
// anything since it's already at the best version. |
if (name == solver._root.name) { |
solver.enqueue(new ChangeVersion( |
- source, description, solver._root.version)); |
+ name, source, description, solver._root.version)); |
return null; |
} |
@@ -374,7 +372,8 @@ class ChangeConstraint implements WorkItem { |
if (lockedPackage != null) { |
var lockedVersion = lockedPackage.version; |
if (newConstraint.allows(lockedVersion)) { |
- solver.enqueue(new ChangeVersion(source, description, lockedVersion)); |
+ solver.enqueue( |
+ new ChangeVersion(name, source, description, lockedVersion)); |
return null; |
} |
} |
@@ -385,7 +384,7 @@ class ChangeConstraint implements WorkItem { |
if (best == null) { |
undo(solver); |
} else if (newDependency.version != best) { |
- solver.enqueue(new ChangeVersion(source, description, best)); |
+ solver.enqueue(new ChangeVersion(name, source, description, best)); |
} |
}); |
} |
@@ -464,7 +463,7 @@ class UnlockPackage implements WorkItem { |
return solver.getBestVersion(package).transform((best) { |
if (best == null) return null; |
solver.enqueue(new ChangeVersion( |
- package.source, package.description, best)); |
+ package.name, package.source, package.description, best)); |
}); |
} |
} |
@@ -582,6 +581,9 @@ class Dependency { |
/** Creates a copy of this dependency. */ |
Dependency clone() => new Dependency._clone(this); |
+ /// Return a list of available versions for this dependency. |
+ Future<List<Version>> getVersions() => source.getVersions(name, description); |
+ |
/** |
* Places [ref] as a constraint from [package] onto this. |
*/ |