From d1cefb2c9bbc29e61797e9027229dc5cf559953c Mon Sep 17 00:00:00 2001 From: David Greenspan Date: Wed, 28 Jan 2015 14:18:21 -0800 Subject: [PATCH] Improve cost function It's still not really correct to do it this way, but it passes the existing tests now. In particular, we now prioritize making top-level dependencies newer over making indirect dependencies older. However, this approach is flawed because we only visit the packages in the original solution, before optimization. We should assign a cost to every package version that might be chosen, and let the solver shift things around arbitrarily. --- packages/constraint-solver/constraint-solver.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/constraint-solver/constraint-solver.js b/packages/constraint-solver/constraint-solver.js index 32d2b65961..58dc4e5cb0 100644 --- a/packages/constraint-solver/constraint-solver.js +++ b/packages/constraint-solver/constraint-solver.js @@ -167,7 +167,17 @@ var newResolveWithInput = function (input, _nudge) { } return false; }); - } else { + } + } + }); + _.each(solution.getTrueVars(), function (x) { + if (x.indexOf(' ') >= 0) { + var pv = CS.PackageAndVersion.fromString(x); + var package = pv.package; + var version = pv.version; + var otherVersions = cache.getPackageVersions(package); // sorted + + if (! _.has(rootDeps, package)) { // try to make older otherVersions = _.clone(otherVersions); otherVersions.reverse();