Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(238)

Unified Diff: sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart

Issue 365993007: Support "pub downgrade". (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: code review Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 4c6033369bacd5a8e80cb974ac49e79548dede22..d8b57614b5ca2325509445d049feb558c2e2295b 100644
--- a/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
+++ b/sdk/lib/_internal/pub/lib/src/solver/backtracking_solver.dart
@@ -59,6 +59,7 @@ import 'version_solver.dart';
/// versions for speculative package selections. Backtracks and advances to the
/// next potential solution in the case of a failure.
class BacktrackingSolver {
+ final SolveType type;
final SourceRegistry sources;
final Package root;
@@ -73,9 +74,6 @@ class BacktrackingSolver {
/// packages.
final _forceLatest = new Set<String>();
- /// If this is set, the contents of [lockFile] are ignored while solving.
- final bool _upgradeAll;
-
/// The set of packages whose dependecy is being overridden by the root
/// package, keyed by the name of the package.
///
@@ -109,11 +107,11 @@ class BacktrackingSolver {
int get attemptedSolutions => _attemptedSolutions;
var _attemptedSolutions = 1;
- BacktrackingSolver(SourceRegistry sources, this.root, this.lockFile,
- List<String> useLatest, {bool upgradeAll: false})
- : sources = sources,
- cache = new PubspecCache(sources),
- _upgradeAll = upgradeAll {
+ BacktrackingSolver(SolveType type, SourceRegistry sources, this.root,
+ this.lockFile, List<String> useLatest)
+ : type = type,
+ sources = sources,
+ cache = new PubspecCache(type, sources) {
for (var package in useLatest) {
_forceLatest.add(package);
}
@@ -218,9 +216,19 @@ class BacktrackingSolver {
///
/// Returns `null` if it isn't in the lockfile (or has been unlocked).
PackageId getLocked(String package) {
- if (_upgradeAll) return null;
- if (_forceLatest.contains(package)) return null;
+ if (type == SolveType.GET) return lockFile.packages[package];
+
+ // When downgrading, we don't want to force the latest versions of
+ // non-hosted packages, since they don't support multiple versions and thus
+ // can't be downgraded.
+ if (type == SolveType.DOWNGRADE) {
+ var locked = lockFile.packages[package];
+ if (locked != null && !sources[locked.source].hasMultipleVersions) {
+ return locked;
+ }
+ }
+ if (_forceLatest.isEmpty || _forceLatest.contains(package)) return null;
return lockFile.packages[package];
}
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/global_packages.dart ('k') | sdk/lib/_internal/pub/lib/src/solver/solve_report.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698