| Index: utils/pub/entrypoint.dart
|
| diff --git a/utils/pub/entrypoint.dart b/utils/pub/entrypoint.dart
|
| index 95790d3bd419ddf1a38e49f8b8bb2a4982e76559..c17d310faccc1eb1ddb0c2e5b175fac417420c4a 100644
|
| --- a/utils/pub/entrypoint.dart
|
| +++ b/utils/pub/entrypoint.dart
|
| @@ -137,9 +137,11 @@ class Entrypoint {
|
| if (id.isRoot) return new Future.immediate(id);
|
| return install(id);
|
| }).toList());
|
| - }).then(_saveLockFile)
|
| - .then(_installSelfReference)
|
| - .then(_linkSecondaryPackageDirs);
|
| + }).then((ids) {
|
| + _saveLockFile(ids);
|
| + _installSelfReference();
|
| + _linkSecondaryPackageDirs();
|
| + });
|
| }
|
|
|
| /// Traverses the root's package dependency graph and loads each of the
|
| @@ -227,79 +229,59 @@ class Entrypoint {
|
|
|
| /// Installs a self-referential symlink in the `packages` directory that will
|
| /// allow a package to import its own files using `package:`.
|
| - Future _installSelfReference(_) {
|
| - return defer(() {
|
| - var linkPath = path.join(packagesDir, root.name);
|
| - // Create the symlink if it doesn't exist.
|
| - if (entryExists(linkPath)) return;
|
| - ensureDir(packagesDir);
|
| - return createPackageSymlink(root.name, root.dir, linkPath,
|
| - isSelfLink: true, relative: true);
|
| - });
|
| + void _installSelfReference() {
|
| + var linkPath = path.join(packagesDir, root.name);
|
| + // Create the symlink if it doesn't exist.
|
| + if (entryExists(linkPath)) return;
|
| + ensureDir(packagesDir);
|
| + createPackageSymlink(root.name, root.dir, linkPath,
|
| + isSelfLink: true, relative: true);
|
| }
|
|
|
| /// If `bin/`, `test/`, or `example/` directories exist, symlink `packages/`
|
| /// into them so that their entrypoints can be run. Do the same for any
|
| /// subdirectories of `test/` and `example/`.
|
| - Future _linkSecondaryPackageDirs(_) {
|
| + void _linkSecondaryPackageDirs() {
|
| var binDir = path.join(root.dir, 'bin');
|
| var exampleDir = path.join(root.dir, 'example');
|
| var testDir = path.join(root.dir, 'test');
|
| var toolDir = path.join(root.dir, 'tool');
|
| var webDir = path.join(root.dir, 'web');
|
| - return defer(() {
|
| - if (!dirExists(binDir)) return;
|
| - return _linkSecondaryPackageDir(binDir);
|
| - }).then((_) => _linkSecondaryPackageDirsRecursively(exampleDir))
|
| - .then((_) => _linkSecondaryPackageDirsRecursively(testDir))
|
| - .then((_) => _linkSecondaryPackageDirsRecursively(toolDir))
|
| - .then((_) => _linkSecondaryPackageDirsRecursively(webDir));
|
| - }
|
| +
|
| + if (dirExists(binDir)) _linkSecondaryPackageDir(binDir);
|
| + for (var dir in ['example', 'test', 'tool', 'web']) {
|
| + _linkSecondaryPackageDirsRecursively(path.join(root.dir, dir));
|
| + }
|
| + }
|
|
|
| /// Creates a symlink to the `packages` directory in [dir] and all its
|
| /// subdirectories.
|
| - Future _linkSecondaryPackageDirsRecursively(String dir) {
|
| - return defer(() {
|
| - if (!dirExists(dir)) return;
|
| - return _linkSecondaryPackageDir(dir)
|
| - .then((_) => _listDirWithoutPackages(dir))
|
| - .then((files) {
|
| - return Future.wait(files.map((file) {
|
| - return defer(() {
|
| - if (!dirExists(file)) return;
|
| - return _linkSecondaryPackageDir(file);
|
| - });
|
| - }).toList());
|
| - });
|
| - });
|
| + void _linkSecondaryPackageDirsRecursively(String dir) {
|
| + if (!dirExists(dir)) return;
|
| + _linkSecondaryPackageDir(dir);
|
| + _listDirWithoutPackages(dir)
|
| + .where(dirExists)
|
| + .forEach(_linkSecondaryPackageDir);
|
| }
|
|
|
| // TODO(nweiz): roll this into [listDir] in io.dart once issue 4775 is fixed.
|
| /// Recursively lists the contents of [dir], excluding hidden `.DS_Store`
|
| /// files and `package` files.
|
| - Future<List<String>> _listDirWithoutPackages(dir) {
|
| - return listDir(dir).then((files) {
|
| - return Future.wait(files.map((file) {
|
| - if (path.basename(file) == 'packages') return new Future.immediate([]);
|
| - return defer(() {
|
| - if (!dirExists(file)) return [];
|
| - return _listDirWithoutPackages(file);
|
| - }).then((subfiles) {
|
| - var fileAndSubfiles = [file];
|
| - fileAndSubfiles.addAll(subfiles);
|
| - return fileAndSubfiles;
|
| - });
|
| - }).toList());
|
| - }).then(flatten);
|
| + List<String> _listDirWithoutPackages(dir) {
|
| + return flatten(listDir(dir).map((file) {
|
| + if (path.basename(file) == 'packages') return [];
|
| + if (!dirExists(file)) return [];
|
| + var fileAndSubfiles = [file];
|
| + fileAndSubfiles.addAll(_listDirWithoutPackages(file));
|
| + return fileAndSubfiles;
|
| + }));
|
| }
|
|
|
| /// Creates a symlink to the `packages` directory in [dir]. Will replace one
|
| /// if already there.
|
| - Future _linkSecondaryPackageDir(String dir) {
|
| - return defer(() {
|
| - var symlink = path.join(dir, 'packages');
|
| - if (entryExists(symlink)) deleteEntry(symlink);
|
| - return createSymlink(packagesDir, symlink, relative: true);
|
| - });
|
| + void _linkSecondaryPackageDir(String dir) {
|
| + var symlink = path.join(dir, 'packages');
|
| + if (entryExists(symlink)) deleteEntry(symlink);
|
| + createSymlink(packagesDir, symlink, relative: true);
|
| }
|
| }
|
|
|