Chromium Code Reviews| 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 #library('entrypoint'); | 5 #library('entrypoint'); |
| 6 | 6 |
| 7 #import('io.dart'); | 7 #import('io.dart'); |
| 8 #import('lock_file.dart'); | 8 #import('lock_file.dart'); |
| 9 #import('package.dart'); | 9 #import('package.dart'); |
| 10 #import('root_source.dart'); | 10 #import('root_source.dart'); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 136 } | 136 } |
| 137 return versionSolver.solve(); | 137 return versionSolver.solve(); |
| 138 }).chain(_installDependencies); | 138 }).chain(_installDependencies); |
| 139 } | 139 } |
| 140 | 140 |
| 141 /** | 141 /** |
| 142 * Installs all dependencies listed in [packageVersions] and writes a | 142 * Installs all dependencies listed in [packageVersions] and writes a |
| 143 * [LockFile]. | 143 * [LockFile]. |
| 144 */ | 144 */ |
| 145 Future _installDependencies(List<PackageId> packageVersions) { | 145 Future _installDependencies(List<PackageId> packageVersions) { |
| 146 return Futures.wait(packageVersions.map((id) { | 146 return _removeUnusedDependencies(packageVersions).chain((_) { |
| 147 if (id.source is RootSource) return new Future.immediate(id); | 147 return Futures.wait(packageVersions.map((id) { |
| 148 return install(id); | 148 if (id.source is RootSource) return new Future.immediate(id); |
| 149 })).chain(_saveLockFile).chain(_installSelfReference); | 149 return install(id); |
| 150 })); | |
| 151 }).chain(_saveLockFile).chain(_installSelfReference); | |
| 150 } | 152 } |
| 151 | 153 |
| 152 /** | 154 /** |
| 153 * Loads the list of concrete package versions from the `pubspec.lock`, if it | 155 * Loads the list of concrete package versions from the `pubspec.lock`, if it |
| 154 * exists. If it doesn't, this completes to an empty [LockFile]. | 156 * exists. If it doesn't, this completes to an empty [LockFile]. |
| 155 * | 157 * |
| 156 * If there's an error reading the `pubspec.lock` file, this will print a | 158 * If there's an error reading the `pubspec.lock` file, this will print a |
| 157 * warning message and act as though the file doesn't exist. | 159 * warning message and act as though the file doesn't exist. |
| 158 */ | 160 */ |
| 159 Future<LockFile> _loadLockFile() { | 161 Future<LockFile> _loadLockFile() { |
| (...skipping 13 matching lines...) Expand all Loading... | |
| 173 | 175 |
| 174 return true; | 176 return true; |
| 175 }); | 177 }); |
| 176 | 178 |
| 177 future.then((text) => | 179 future.then((text) => |
| 178 completer.complete(new LockFile.parse(text, cache.sources))); | 180 completer.complete(new LockFile.parse(text, cache.sources))); |
| 179 return completer.future; | 181 return completer.future; |
| 180 } | 182 } |
| 181 | 183 |
| 182 /** | 184 /** |
| 185 * Removes all dependencies that are no longer depended on from the `packages` | |
| 186 * directory. [packageIds] is a list of all packages that are still depended | |
| 187 * on. | |
| 188 */ | |
| 189 Future _removeUnusedDependencies(List<PackageId> packageIds) { | |
| 190 var dependenciesToKeep = packageIds.map((id) => id.name); | |
| 191 | |
| 192 return dirExists(path).chain((exists) { | |
| 193 if (exists) return listDir(path); | |
| 194 return new Future.immediate([]); | |
| 195 }).chain((existingDependencies) { | |
| 196 existingDependencies = existingDependencies.map(basename); | |
| 197 var dependenciesToRemove = | |
| 198 new List.from(setMinus(existingDependencies, dependenciesToKeep)); | |
|
Bob Nystrom
2012/08/25 00:13:30
Indent +2.
nweiz
2012/08/25 00:17:49
Done.
| |
| 199 return Futures.wait(dependenciesToRemove.map((dependency) { | |
| 200 return deleteDir(join(path, dependency)); | |
| 201 })); | |
| 202 }); | |
| 203 } | |
| 204 | |
| 205 /** | |
| 183 * Saves a list of concrete package versions to the `pubspec.lock` file. | 206 * Saves a list of concrete package versions to the `pubspec.lock` file. |
| 184 */ | 207 */ |
| 185 Future _saveLockFile(List<PackageId> packageIds) { | 208 Future _saveLockFile(List<PackageId> packageIds) { |
| 186 var lockFile = new LockFile.empty(); | 209 var lockFile = new LockFile.empty(); |
| 187 for (var id in packageIds) { | 210 for (var id in packageIds) { |
| 188 if (id.source is! RootSource) lockFile.packages[id.name] = id; | 211 if (id.source is! RootSource) lockFile.packages[id.name] = id; |
| 189 } | 212 } |
| 190 | 213 |
| 191 return writeTextFile(join(root.dir, 'pubspec.lock'), lockFile.serialize()); | 214 return writeTextFile(join(root.dir, 'pubspec.lock'), lockFile.serialize()); |
| 192 } | 215 } |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 216 '$path.'; | 239 '$path.'; |
| 217 }); | 240 }); |
| 218 } | 241 } |
| 219 | 242 |
| 220 return future.transform((_) { | 243 return future.transform((_) { |
| 221 if (root.pubspec.name != null) return; | 244 if (root.pubspec.name != null) return; |
| 222 throw '"pubspec.yaml" must contain a "name" key.'; | 245 throw '"pubspec.yaml" must contain a "name" key.'; |
| 223 }); | 246 }); |
| 224 } | 247 } |
| 225 } | 248 } |
| OLD | NEW |