| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /// A back-tracking depth-first solver. | 5 /// A back-tracking depth-first solver. |
| 6 /// | 6 /// |
| 7 /// Attempts to find the best solution for a root package's transitive | 7 /// Attempts to find the best solution for a root package's transitive |
| 8 /// dependency graph, where a "solution" is a set of concrete package versions. | 8 /// dependency graph, where a "solution" is a set of concrete package versions. |
| 9 /// A valid solution will select concrete versions for every package reached | 9 /// A valid solution will select concrete versions for every package reached |
| 10 /// from the root package's dependency graph, and each of those packages will | 10 /// from the root package's dependency graph, and each of those packages will |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 132 _forceLatest.add(package); | 132 _forceLatest.add(package); |
| 133 } | 133 } |
| 134 | 134 |
| 135 for (var override in root.dependencyOverrides) { | 135 for (var override in root.dependencyOverrides) { |
| 136 _overrides[override.name] = override; | 136 _overrides[override.name] = override; |
| 137 } | 137 } |
| 138 } | 138 } |
| 139 | 139 |
| 140 /// Creates [_implicitPubspec]. | 140 /// Creates [_implicitPubspec]. |
| 141 static Pubspec _makeImplicitPubspec(SystemCache systemCache) { | 141 static Pubspec _makeImplicitPubspec(SystemCache systemCache) { |
| 142 var dependencies = []; | 142 var dependencies = <PackageDep>[]; |
| 143 barback.pubConstraints.forEach((name, constraint) { | 143 barback.pubConstraints.forEach((name, constraint) { |
| 144 dependencies.add( | 144 dependencies.add( |
| 145 systemCache.sources.hosted.refFor(name) | 145 systemCache.sources.hosted.refFor(name) |
| 146 .withConstraint(constraint)); | 146 .withConstraint(constraint)); |
| 147 }); | 147 }); |
| 148 | 148 |
| 149 return new Pubspec("pub itself", dependencies: dependencies); | 149 return new Pubspec("pub itself", dependencies: dependencies); |
| 150 } | 150 } |
| 151 | 151 |
| 152 /// Run the solver. | 152 /// Run the solver. |
| (...skipping 14 matching lines...) Expand all Loading... |
| 167 | 167 |
| 168 // Pre-cache the root package's known pubspec. | 168 // Pre-cache the root package's known pubspec. |
| 169 var rootID = new PackageId.root(root); | 169 var rootID = new PackageId.root(root); |
| 170 await _selection.select(rootID); | 170 await _selection.select(rootID); |
| 171 | 171 |
| 172 _validateSdkConstraint(root.pubspec); | 172 _validateSdkConstraint(root.pubspec); |
| 173 | 173 |
| 174 logSolve(); | 174 logSolve(); |
| 175 var packages = await _solve(); | 175 var packages = await _solve(); |
| 176 | 176 |
| 177 var pubspecs = {}; | 177 var pubspecs = <String, Pubspec>{}; |
| 178 for (var id in packages) { | 178 for (var id in packages) { |
| 179 pubspecs[id.name] = await _getPubspec(id); | 179 pubspecs[id.name] = await _getPubspec(id); |
| 180 } | 180 } |
| 181 | 181 |
| 182 return new SolveResult.success(systemCache.sources, root, lockFile, | 182 return new SolveResult.success(systemCache.sources, root, lockFile, |
| 183 packages, overrides, pubspecs, _getAvailableVersions(packages), | 183 packages, overrides, pubspecs, _getAvailableVersions(packages), |
| 184 _attemptedSolutions); | 184 _attemptedSolutions); |
| 185 } on SolveFailure catch (error) { | 185 } on SolveFailure catch (error) { |
| 186 // Wrap a failure in a result so we can attach some other data. | 186 // Wrap a failure in a result so we can attach some other data. |
| 187 return new SolveResult.failure(systemCache.sources, root, lockFile, | 187 return new SolveResult.failure(systemCache.sources, root, lockFile, |
| 188 overrides, error, _attemptedSolutions); | 188 overrides, error, _attemptedSolutions); |
| 189 } finally { | 189 } finally { |
| 190 // Gather some solving metrics. | 190 // Gather some solving metrics. |
| 191 var buffer = new StringBuffer(); | 191 var buffer = new StringBuffer(); |
| 192 buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.'); | 192 buffer.writeln('${runtimeType} took ${stopwatch.elapsed} seconds.'); |
| 193 buffer.writeln('- Tried $_attemptedSolutions solutions'); | 193 buffer.writeln('- Tried $_attemptedSolutions solutions'); |
| 194 buffer.writeln(cache.describeResults()); | 194 buffer.writeln(cache.describeResults()); |
| 195 log.solver(buffer); | 195 log.solver(buffer); |
| 196 } | 196 } |
| 197 } | 197 } |
| 198 | 198 |
| 199 /// Generates a map containing all of the known available versions for each | 199 /// Generates a map containing all of the known available versions for each |
| 200 /// package in [packages]. | 200 /// package in [packages]. |
| 201 /// | 201 /// |
| 202 /// The version list may not always be complete. If the package is the root | 202 /// The version list may not always be complete. If the package is the root |
| 203 /// root package, or if it's a package that we didn't unlock while solving | 203 /// root package, or if it's a package that we didn't unlock while solving |
| 204 /// because we weren't trying to upgrade it, we will just know the current | 204 /// because we weren't trying to upgrade it, we will just know the current |
| 205 /// version. | 205 /// version. |
| 206 Map<String, List<Version>> _getAvailableVersions(List<PackageId> packages) { | 206 Map<String, List<Version>> _getAvailableVersions(List<PackageId> packages) { |
| 207 var availableVersions = new Map<String, List<Version>>(); | 207 var availableVersions = <String, List<Version>>{}; |
| 208 for (var package in packages) { | 208 for (var package in packages) { |
| 209 var cached = cache.getCachedVersions(package.toRef()); | 209 var cached = cache.getCachedVersions(package.toRef()); |
| 210 var versions; | 210 // If the version list was never requested, just use the one known |
| 211 if (cached != null) { | 211 // version. |
| 212 versions = cached.map((id) => id.version).toList(); | 212 var versions = cached == null |
| 213 } else { | 213 ? [package.version] |
| 214 // If the version list was never requested, just use the one known | 214 : cached.map((id) => id.version).toList(); |
| 215 // version. | |
| 216 versions = [package.version]; | |
| 217 } | |
| 218 | 215 |
| 219 availableVersions[package.name] = versions; | 216 availableVersions[package.name] = versions; |
| 220 } | 217 } |
| 221 | 218 |
| 222 return availableVersions; | 219 return availableVersions; |
| 223 } | 220 } |
| 224 | 221 |
| 225 /// Gets the version of [package] currently locked in the lock file. | 222 /// Gets the version of [package] currently locked in the lock file. |
| 226 /// | 223 /// |
| 227 /// Returns `null` if it isn't in the lockfile (or has been unlocked). | 224 /// Returns `null` if it isn't in the lockfile (or has been unlocked). |
| (...skipping 437 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 | 662 |
| 666 if (!pubspec.flutterSdkConstraint.allows(flutter.version)) { | 663 if (!pubspec.flutterSdkConstraint.allows(flutter.version)) { |
| 667 throw new BadSdkVersionException(pubspec.name, | 664 throw new BadSdkVersionException(pubspec.name, |
| 668 'Package ${pubspec.name} requires Flutter SDK version ' | 665 'Package ${pubspec.name} requires Flutter SDK version ' |
| 669 '${pubspec.flutterSdkConstraint} but the current SDK is ' | 666 '${pubspec.flutterSdkConstraint} but the current SDK is ' |
| 670 '${flutter.version}.'); | 667 '${flutter.version}.'); |
| 671 } | 668 } |
| 672 } | 669 } |
| 673 } | 670 } |
| 674 } | 671 } |
| OLD | NEW |