| Index: sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
|
| diff --git a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
|
| index e80db88465f295c627f17a4a2941514ea3dc6426..c04a81822cd432d501ea807d92d67cf8df114158 100644
|
| --- a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
|
| +++ b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
|
| @@ -286,6 +286,15 @@ class BacktrackingSolver {
|
| // when that happens.
|
| var selected = _selected[i].current;
|
|
|
| + // If the failure is a disjoint version range, then no possible versions
|
| + // for that package can match and there's no reason to try them. Instead,
|
| + // just backjump past it.
|
| + if (failure is DisjointConstraintException &&
|
| + selected.name == failure.package) {
|
| + logSolve("skipping past disjoint selected ${selected.name}");
|
| + continue;
|
| + }
|
| +
|
| // If we get to the package that failed, backtrack to here.
|
| if (selected.name == failure.package) {
|
| logSolve('backjump to failed package ${selected.name}');
|
| @@ -509,11 +518,14 @@ class Traverser {
|
| var dependencies = _getDependencies(dep.name);
|
| dependencies.add(new Dependency(depender, dep));
|
|
|
| - // If the package is barback, pub has an implicit version constraint on it
|
| - // since pub itself uses barback too. Note that we don't check for the
|
| - // hosted source here because we still want to do this even when people on
|
| - // the Dart team are on the bleeding edge and have a path dependency on the
|
| - // tip version of barback in the Dart repo.
|
| + // If the package is barback, pub has an implicit version constraint on
|
| + // it since pub itself uses barback too. Note that we don't check for
|
| + // the hosted source here because we still want to do this even when
|
| + // people on the Dart team are on the bleeding edge and have a path
|
| + // dependency on the tip version of barback in the Dart repo.
|
| + //
|
| + // The length check here is to ensure we only add the barback
|
| + // dependency once.
|
| if (dep.name == "barback" && dependencies.length == 1) {
|
| var range = new VersionRange(
|
| min: barback.supportedVersion, includeMin: true,
|
| @@ -526,7 +538,7 @@ class Traverser {
|
| // find barback.
|
| var barbackDep = new PackageDep(dep.name, dep.source, range,
|
| dep.description);
|
| - dependencies.add(new Dependency("pub", barbackDep));
|
| + dependencies.add(new Dependency("pub itself", barbackDep));
|
| }
|
|
|
| var constraint = _getConstraint(dep.name);
|
| @@ -534,7 +546,7 @@ class Traverser {
|
| // See if it's possible for a package to match that constraint.
|
| if (constraint.isEmpty) {
|
| _solver.logSolve('disjoint constraints on ${dep.name}');
|
| - throw new DisjointConstraintException(depender, dependencies);
|
| + throw new DisjointConstraintException(dep.name, dependencies);
|
| }
|
|
|
| var selected = _validateSelected(dep, constraint);
|
|
|