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 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import '../../pkg/path/lib/path.dart' as path; | 9 import '../../pkg/path/lib/path.dart' as path; |
10 | 10 |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 }).then(_installDependencies); | 127 }).then(_installDependencies); |
128 } | 128 } |
129 | 129 |
130 /// Removes the old packages directory, installs all dependencies listed in | 130 /// Removes the old packages directory, installs all dependencies listed in |
131 /// [packageVersions], and writes a [LockFile]. | 131 /// [packageVersions], and writes a [LockFile]. |
132 Future _installDependencies(List<PackageId> packageVersions) { | 132 Future _installDependencies(List<PackageId> packageVersions) { |
133 return cleanDir(packagesDir).then((_) { | 133 return cleanDir(packagesDir).then((_) { |
134 return Future.wait(packageVersions.map((id) { | 134 return Future.wait(packageVersions.map((id) { |
135 if (id.isRoot) return new Future.immediate(id); | 135 if (id.isRoot) return new Future.immediate(id); |
136 return install(id); | 136 return install(id); |
137 })); | 137 }).toList()); |
138 }).then(_saveLockFile) | 138 }).then(_saveLockFile) |
139 .then(_installSelfReference) | 139 .then(_installSelfReference) |
140 .then(_linkSecondaryPackageDirs); | 140 .then(_linkSecondaryPackageDirs); |
141 } | 141 } |
142 | 142 |
143 /// Traverses the root's package dependency graph and loads each of the | 143 /// Traverses the root's package dependency graph and loads each of the |
144 /// reached packages. This should only be called after the lockfile has been | 144 /// reached packages. This should only be called after the lockfile has been |
145 /// successfully generated. | 145 /// successfully generated. |
146 Future<List<Pubspec>> walkDependencies() { | 146 Future<List<Pubspec>> walkDependencies() { |
147 return defer(() { | 147 return defer(() { |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 return defer(() { | 260 return defer(() { |
261 if (!dirExists(dir)) return; | 261 if (!dirExists(dir)) return; |
262 return _linkSecondaryPackageDir(dir) | 262 return _linkSecondaryPackageDir(dir) |
263 .then((_) => _listDirWithoutPackages(dir)) | 263 .then((_) => _listDirWithoutPackages(dir)) |
264 .then((files) { | 264 .then((files) { |
265 return Future.wait(files.map((file) { | 265 return Future.wait(files.map((file) { |
266 return defer(() { | 266 return defer(() { |
267 if (!dirExists(file)) return; | 267 if (!dirExists(file)) return; |
268 return _linkSecondaryPackageDir(file); | 268 return _linkSecondaryPackageDir(file); |
269 }); | 269 }); |
270 })); | 270 }).toList()); |
271 }); | 271 }); |
272 }); | 272 }); |
273 } | 273 } |
274 | 274 |
275 // TODO(nweiz): roll this into [listDir] in io.dart once issue 4775 is fixed. | 275 // TODO(nweiz): roll this into [listDir] in io.dart once issue 4775 is fixed. |
276 /// Recursively lists the contents of [dir], excluding hidden `.DS_Store` | 276 /// Recursively lists the contents of [dir], excluding hidden `.DS_Store` |
277 /// files and `package` files. | 277 /// files and `package` files. |
278 Future<List<String>> _listDirWithoutPackages(dir) { | 278 Future<List<String>> _listDirWithoutPackages(dir) { |
279 return listDir(dir).then((files) { | 279 return listDir(dir).then((files) { |
280 return Future.wait(files.map((file) { | 280 return Future.wait(files.map((file) { |
281 if (path.basename(file) == 'packages') return new Future.immediate([]); | 281 if (path.basename(file) == 'packages') return new Future.immediate([]); |
282 return defer(() { | 282 return defer(() { |
283 if (!dirExists(file)) return []; | 283 if (!dirExists(file)) return []; |
284 return _listDirWithoutPackages(file); | 284 return _listDirWithoutPackages(file); |
285 }).then((subfiles) { | 285 }).then((subfiles) { |
286 var fileAndSubfiles = [file]; | 286 var fileAndSubfiles = [file]; |
287 fileAndSubfiles.addAll(subfiles); | 287 fileAndSubfiles.addAll(subfiles); |
288 return fileAndSubfiles; | 288 return fileAndSubfiles; |
289 }); | 289 }); |
290 })); | 290 }).toList()); |
291 }).then(flatten); | 291 }).then(flatten); |
292 } | 292 } |
293 | 293 |
294 /// Creates a symlink to the `packages` directory in [dir] if none exists. | 294 /// Creates a symlink to the `packages` directory in [dir] if none exists. |
295 Future _linkSecondaryPackageDir(String dir) { | 295 Future _linkSecondaryPackageDir(String dir) { |
296 return defer(() { | 296 return defer(() { |
297 var to = path.join(dir, 'packages'); | 297 var to = path.join(dir, 'packages'); |
298 if (entryExists(to)) return; | 298 if (entryExists(to)) return; |
299 return createSymlink(packagesDir, to); | 299 return createSymlink(packagesDir, to); |
300 }); | 300 }); |
301 } | 301 } |
302 } | 302 } |
OLD | NEW |