From 0760ffbc369c5dbaa1424546d6d71cc270c3c66e Mon Sep 17 00:00:00 2001 From: Slava Kim Date: Fri, 16 May 2014 11:39:00 -0700 Subject: [PATCH] Put additional 'no-upgrade' constraints only on root deps. And depending on the `breaking` option, set different type of constraints. --- 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 8549b5eea3..43d7992e3c 100644 --- a/packages/constraint-solver/constraint-solver.js +++ b/packages/constraint-solver/constraint-solver.js @@ -127,8 +127,18 @@ ConstraintSolver.PackagesResolver.prototype.resolve = var dc = self._splitDepsToConstraints(dependencies, constraints); + // Never allow to downgrade a version of a direct dependency in regards to the + // previous solution. + // Depending on whether the option `breaking` is set or not, allow only + // compatible upgrades or any upgrades. _.each(options.previousSolution, function (uv) { - dc.constraints.push(new ConstraintSolver.Constraint(uv.name, ">=" + uv.version)); + // if not a root dependency, there is no 'no-upgrade' constraint + if (! _.contains(dependencies, uv.name)) + return; + + var constrType = options.breaking ? ">=" : ""; + dc.constraints.push( + new ConstraintSolver.Constraint(uv.name, constrType + uv.version)); }); options.rootDependencies = dc.dependencies;