From 002138bee66faba74b2a98dcd1d1c5117b7774ee Mon Sep 17 00:00:00 2001 From: Slava Kim Date: Thu, 8 May 2014 15:02:31 -0700 Subject: [PATCH] basic error reporting works --- packages/constraint-solver/constraint-solver-tests.js | 1 + packages/constraint-solver/resolver.js | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/constraint-solver/constraint-solver-tests.js b/packages/constraint-solver/constraint-solver-tests.js index a1d5c46926..55879dee2b 100644 --- a/packages/constraint-solver/constraint-solver-tests.js +++ b/packages/constraint-solver/constraint-solver-tests.js @@ -165,6 +165,7 @@ Tinytest.add("constraint solver - no constraint dependency - anything", function test.isTrue(_.isString(versions.sparkle)); }); + Tinytest.add("constraint solver - no constraint dependency - transitive dep still picked right", function (test) { currentTest = test; var versions = resolver.resolve({ "sparkle": "none", "sparky-forms": "1.1.2" }, { mode: "CONSERVATIVE" }); diff --git a/packages/constraint-solver/resolver.js b/packages/constraint-solver/resolver.js index f4f322df38..c44b006715 100644 --- a/packages/constraint-solver/resolver.js +++ b/packages/constraint-solver/resolver.js @@ -287,13 +287,15 @@ ConstraintSolver.Resolver.prototype._propagateExactTransDeps = transitiveConstraints = transitiveConstraints.union(uv.constraints); }); + var newChoices = exactTransitiveDepsVersions; + dependencies = dependencies.union(inexactTransitiveDeps); constraints = constraints.union(transitiveConstraints); - choices = _.union(choices, exactTransitiveDepsVersions); + choices = _.union(choices, newChoices); // Since exact transitive deps are put into choices, there is no need to // keep them in dependencies. - _.each(choices, function (uv) { + _.each(newChoices, function (uv) { dependencies = dependencies.remove(uv.name); }); @@ -322,6 +324,10 @@ ConstraintSolver.Resolver.prototype._propagateExactTransDeps = queue.push(dep); isEnqueued[dep.name] = true; }); + + // for error reporting + uv.constraints.each(function (c) { + constraintAncestor[c.toString()] = uv.name; }); } // Update the constraintAncestor table