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

Unified Diff: sdk/lib/_internal/pub/lib/src/entrypoint.dart

Issue 427853002: Add a hidden --no-package-symlinks flag. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 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
Index: sdk/lib/_internal/pub/lib/src/entrypoint.dart
diff --git a/sdk/lib/_internal/pub/lib/src/entrypoint.dart b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
index 6a9f6076bdb37ed5f7c1348b9fde2b850715ea08..6ce137d954bd6d38636fca3e9fc6ee178e174c8e 100644
--- a/sdk/lib/_internal/pub/lib/src/entrypoint.dart
+++ b/sdk/lib/_internal/pub/lib/src/entrypoint.dart
@@ -43,18 +43,28 @@ class Entrypoint {
/// the network.
final SystemCache cache;
+ /// Whether to create and symlink a "packages" directory containing links to
+ /// the installed packages.
+ final bool _packageSymlinks;
+
/// The lockfile for the entrypoint.
///
/// If not provided to the entrypoint, it will be laoded lazily from disc.
LockFile _lockFile;
/// Loads the entrypoint from a package at [rootDir].
- Entrypoint(String rootDir, SystemCache cache)
+ ///
+ /// If [packageSymlinks] is `true`, this will create a "packages" directory
+ /// with symlinks to the installed packages. This directory will be symlinked
+ /// into any directory that might contain an entrypoint.
+ Entrypoint(String rootDir, SystemCache cache, {bool packageSymlinks: true})
: root = new Package.load(null, rootDir, cache.sources),
- cache = cache;
+ cache = cache,
+ _packageSymlinks = packageSymlinks;
/// Creates an entrypoint given package and lockfile objects.
- Entrypoint.inMemory(this.root, this._lockFile, this.cache);
+ Entrypoint.inMemory(this.root, this._lockFile, this.cache)
+ : _packageSymlinks = false;
/// The path to the entrypoint's "packages" directory.
String get packagesDir => path.join(root.dir, 'packages');
@@ -109,12 +119,19 @@ class Entrypoint {
return null;
}
- // Install the packages.
- cleanDir(packagesDir);
+ // Install the packages and maybe link them into the entrypoint.
+ if (_packageSymlinks) {
+ cleanDir(packagesDir);
+ } else {
+ deleteEntry(packagesDir);
+ }
+
return Future.wait(result.packages.map(_get)).then((ids) {
_saveLockFile(ids);
- _linkSelf();
- _linkSecondaryPackageDirs();
+
+ if (_packageSymlinks) _linkSelf();
+ _linkOrDeleteSecondaryPackageDirs();
+
result.summarizeChanges(type, dryRun: dryRun);
});
});
@@ -128,11 +145,17 @@ class Entrypoint {
Future<PackageId> _get(PackageId id) {
if (id.isRoot) return new Future.value(id);
- var packageDir = path.join(packagesDir, id.name);
- if (entryExists(packageDir)) deleteEntry(packageDir);
-
var source = cache.sources[id.source];
- return source.get(id, packageDir).then((_) => source.resolveId(id));
+ return syncFuture(() {
+ if (!_packageSymlinks) {
+ if (source is! CachedSource) return null;
+ return source.downloadToSystemCache(id);
+ }
+
+ var packageDir = path.join(packagesDir, id.name);
+ if (entryExists(packageDir)) deleteEntry(packageDir);
+ return source.get(id, packageDir);
+ }).then((_) => source.resolveId(id));
}
/// Determines whether or not the lockfile is out of date with respect to the
@@ -257,28 +280,34 @@ class Entrypoint {
isSelfLink: true, relative: true);
}
- /// Add "packages" directories to the whitelist of directories that may
- /// contain Dart entrypoints.
- void _linkSecondaryPackageDirs() {
+ /// If [packageSymlinks] is true, add "packages" directories to the whitelist
+ /// of directories that may contain Dart entrypoints.
+ ///
+ /// Otherwise, delete any "packages" directories in the whitelist of
+ /// directories that may contain Dart entrypoints.
+ void _linkOrDeleteSecondaryPackageDirs() {
// Only the main "bin" directory gets a "packages" directory, not its
// subdirectories.
var binDir = path.join(root.dir, 'bin');
- if (dirExists(binDir)) _linkSecondaryPackageDir(binDir);
+ if (dirExists(binDir)) _linkOrDeleteSecondaryPackageDir(binDir);
// The others get "packages" directories in subdirectories too.
for (var dir in ['benchmark', 'example', 'test', 'tool', 'web']) {
- _linkSecondaryPackageDirsRecursively(path.join(root.dir, dir));
+ _linkOrDeleteSecondaryPackageDirsRecursively(path.join(root.dir, dir));
}
}
- /// Creates a symlink to the `packages` directory in [dir] and all its
+ /// If [packageSymlinks] is true, creates a symlink to the "packages"
+ /// directory in [dir] and all its subdirectories.
+ ///
+ /// Otherwise, deletes any "packages" directories in [dir] and all its
/// subdirectories.
- void _linkSecondaryPackageDirsRecursively(String dir) {
+ void _linkOrDeleteSecondaryPackageDirsRecursively(String dir) {
if (!dirExists(dir)) return;
- _linkSecondaryPackageDir(dir);
+ _linkOrDeleteSecondaryPackageDir(dir);
_listDirWithoutPackages(dir)
.where(dirExists)
- .forEach(_linkSecondaryPackageDir);
+ .forEach(_linkOrDeleteSecondaryPackageDir);
}
// TODO(nweiz): roll this into [listDir] in io.dart once issue 4775 is fixed.
@@ -294,11 +323,13 @@ class Entrypoint {
}));
}
- /// Creates a symlink to the `packages` directory in [dir]. Will replace one
- /// if already there.
- void _linkSecondaryPackageDir(String dir) {
+ /// If [packageSymlinks] is true, creates a symlink to the "packages"
+ /// directory in [dir].
+ ///
+ /// Otherwise, deletes a "packages" directories in [dir] if one exists.
+ void _linkOrDeleteSecondaryPackageDir(String dir) {
var symlink = path.join(dir, 'packages');
if (entryExists(symlink)) deleteEntry(symlink);
- createSymlink(packagesDir, symlink, relative: true);
+ if (_packageSymlinks) createSymlink(packagesDir, symlink, relative: true);
}
}
« no previous file with comments | « sdk/lib/_internal/pub/lib/src/command.dart ('k') | sdk/lib/_internal/pub/test/no_package_symlinks_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698