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

Unified Diff: utils/pub/entrypoint.dart

Issue 13332009: Make listDir and createSymlink synchronous in pub. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 7 years, 9 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
« no previous file with comments | « utils/pub/command_lish.dart ('k') | utils/pub/hosted_source.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
}
« no previous file with comments | « utils/pub/command_lish.dart ('k') | utils/pub/hosted_source.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698