Index: utils/pub/source.dart |
diff --git a/utils/pub/source.dart b/utils/pub/source.dart |
index 1fcf9c87a5c140505559f4d50f83fa744a18fdc5..637cdd6950d26ae49f1015a583c2aba1484300a0 100644 |
--- a/utils/pub/source.dart |
+++ b/utils/pub/source.dart |
@@ -10,120 +10,98 @@ import 'pubspec.dart'; |
import 'system_cache.dart'; |
import 'version.dart'; |
-/** |
- * A source from which to install packages. |
- * |
- * Each source has many packages that it looks up using [PackageId]s. The source |
- * is responsible for installing these packages to the package cache. |
- */ |
+/// A source from which to install packages. |
+/// |
+/// Each source has many packages that it looks up using [PackageId]s. The |
+/// source is responsible for installing these packages to the package cache. |
abstract class Source { |
- /** |
- * The name of the source. Should be lower-case, suitable for use in a |
- * filename, and unique accross all sources. |
- */ |
+ /// The name of the source. Should be lower-case, suitable for use in a |
+ /// filename, and unique accross all sources. |
String get name; |
/// Whether or not this source is the default source. |
bool get isDefault => systemCache.sources.defaultSource == this; |
- /** |
- * Whether this source's packages should be cached in Pub's global cache |
- * directory. |
- * |
- * A source should be cached if it requires network access to retrieve |
- * packages. It doesn't need to be cached if all packages are available |
- * locally. |
- */ |
+ /// Whether this source's packages should be cached in Pub's global cache |
+ /// directory. |
+ /// |
+ /// A source should be cached if it requires network access to retrieve |
+ /// packages. It doesn't need to be cached if all packages are available |
+ /// locally. |
bool get shouldCache; |
- /** |
- * The system cache with which this source is registered. |
- */ |
+ /// The system cache with which this source is registered. |
SystemCache get systemCache { |
assert(_systemCache != null); |
return _systemCache; |
} |
- /** |
- * The system cache variable. Set by [_bind]. |
- */ |
+ /// The system cache variable. Set by [_bind]. |
SystemCache _systemCache; |
- /** |
- * The root directory of this source's cache within the system cache. |
- * |
- * This shouldn't be overridden by subclasses. |
- */ |
+ /// The root directory of this source's cache within the system cache. |
+ /// |
+ /// This shouldn't be overridden by subclasses. |
String get systemCacheRoot => join(systemCache.rootDir, name); |
- /** |
- * Records the system cache to which this source belongs. |
- * |
- * This should only be called once for each source, by [SystemCache.register]. |
- * It should not be overridden by base classes. |
- */ |
+ /// Records the system cache to which this source belongs. |
+ /// |
+ /// This should only be called once for each source, by |
+ /// [SystemCache.register]. It should not be overridden by base classes. |
void bind(SystemCache systemCache) { |
assert(_systemCache == null); |
this._systemCache = systemCache; |
} |
- /** |
- * Get the list of all versions that exist for the package described by |
- * [description]. [name] is the expected name of the package. |
- * |
- * Note that this does *not* require the packages to be installed, which is |
- * the point. This is used during version resolution to determine which |
- * package versions are available to be installed (or already installed). |
- * |
- * By default, this assumes that each description has a single version and |
- * uses [describe] to get that version. |
- */ |
+ /// Get the list of all versions that exist for the package described by |
+ /// [description]. [name] is the expected name of the package. |
+ /// |
+ /// Note that this does *not* require the packages to be installed, which is |
+ /// the point. This is used during version resolution to determine which |
+ /// package versions are available to be installed (or already installed). |
+ /// |
+ /// By default, this assumes that each description has a single version and |
+ /// uses [describe] to get that version. |
Future<List<Version>> getVersions(String name, description) { |
return describe(new PackageId(name, this, Version.none, description)) |
.transform((pubspec) => [pubspec.version]); |
} |
- /** |
- * Loads the (possibly remote) pubspec for the package version identified by |
- * [id]. This may be called for packages that have not yet been installed |
- * during the version resolution process. |
- * |
- * For cached sources, by default this uses [installToSystemCache] to get the |
- * pubspec. There is no default implementation for non-cached sources; they |
- * must implement it manually. |
- */ |
+ /// Loads the (possibly remote) pubspec for the package version identified by |
+ /// [id]. This may be called for packages that have not yet been installed |
+ /// during the version resolution process. |
+ /// |
+ /// For cached sources, by default this uses [installToSystemCache] to get the |
+ /// pubspec. There is no default implementation for non-cached sources; they |
+ /// must implement it manually. |
Future<Pubspec> describe(PackageId id) { |
if (!shouldCache) throw "Source $name must implement describe(id)."; |
return installToSystemCache(id).transform((package) => package.pubspec); |
} |
- /** |
- * Installs the package identified by [id] to [path]. Returns a [Future] that |
- * completes when the installation was finished. The [Future] should resolve |
- * to true if the package was found in the source and false if it wasn't. For |
- * all other error conditions, it should complete with an exception. |
- * |
- * [path] is guaranteed not to exist, and its parent directory is guaranteed |
- * to exist. |
- * |
- * Note that [path] may be deleted. If re-installing a package that has |
- * already been installed would be costly or impossible, |
- * [installToSystemCache] should be implemented instead of [install]. |
- * |
- * This doesn't need to be implemented if [installToSystemCache] is |
- * implemented. |
- */ |
+ /// Installs the package identified by [id] to [path]. Returns a [Future] that |
+ /// completes when the installation was finished. The [Future] should resolve |
+ /// to true if the package was found in the source and false if it wasn't. For |
+ /// all other error conditions, it should complete with an exception. |
+ /// |
+ /// [path] is guaranteed not to exist, and its parent directory is guaranteed |
+ /// to exist. |
+ /// |
+ /// Note that [path] may be deleted. If re-installing a package that has |
+ /// already been installed would be costly or impossible, |
+ /// [installToSystemCache] should be implemented instead of [install]. |
+ /// |
+ /// This doesn't need to be implemented if [installToSystemCache] is |
+ /// implemented. |
Future<bool> install(PackageId id, String path) { |
throw "Either install or installToSystemCache must be implemented for " |
"source $name."; |
} |
- /** |
- * Installs the package identified by [id] to the system cache. This is only |
- * called for sources with [shouldCache] set to true. |
- * |
- * By default, this uses [systemCacheDirectory] and [install]. |
- */ |
+ /// Installs the package identified by [id] to the system cache. This is only |
+ /// called for sources with [shouldCache] set to true. |
+ /// |
+ /// By default, this uses [systemCacheDirectory] and [install]. |
Future<Package> installToSystemCache(PackageId id) { |
var path = systemCacheDirectory(id); |
return exists(path).chain((exists) { |
@@ -135,63 +113,55 @@ abstract class Source { |
}); |
} |
- /** |
- * Returns the directory in the system cache that the package identified by |
- * [id] should be installed to. This should return a path to a subdirectory of |
- * [systemCacheRoot]. |
- * |
- * This doesn't need to be implemented if [shouldCache] is false, or if |
- * [installToSystemCache] is implemented. |
- */ |
+ /// Returns the directory in the system cache that the package identified by |
+ /// [id] should be installed to. This should return a path to a subdirectory |
+ /// of [systemCacheRoot]. |
+ /// |
+ /// This doesn't need to be implemented if [shouldCache] is false, or if |
+ /// [installToSystemCache] is implemented. |
String systemCacheDirectory(PackageId id) { |
throw 'Source.systemCacheDirectory must be implemented if shouldCache is ' |
'true and installToSystemCache is not implemented.'; |
} |
- /** |
- * When a [Pubspec] or [LockFile] is parsed, it reads in the description for |
- * each dependency. It is up to the dependency's [Source] to determine how |
- * that should be interpreted. This will be called during parsing to validate |
- * that the given [description] is well-formed according to this source. It |
- * should return if the description is valid, or throw a [FormatException] if |
- * not. |
- * |
- * [fromLockFile] is true when the description comes from a [LockFile], to |
- * allow the source to use lockfile-specific descriptions via [resolveId]. |
- */ |
+ /// When a [Pubspec] or [LockFile] is parsed, it reads in the description for |
+ /// each dependency. It is up to the dependency's [Source] to determine how |
+ /// that should be interpreted. This will be called during parsing to validate |
+ /// that the given [description] is well-formed according to this source. It |
+ /// should return if the description is valid, or throw a [FormatException] if |
+ /// not. |
+ /// |
+ /// [fromLockFile] is true when the description comes from a [LockFile], to |
+ /// allow the source to use lockfile-specific descriptions via [resolveId]. |
void validateDescription(description, {bool fromLockFile: false}) {} |
- /** |
- * Returns whether or not [description1] describes the same package as |
- * [description2] for this source. This method should be light-weight. It |
- * doesn't need to validate that either package exists. |
- * |
- * By default, just uses regular equality. |
- */ |
+ /// Returns whether or not [description1] describes the same package as |
+ /// [description2] for this source. This method should be light-weight. It |
+ /// doesn't need to validate that either package exists. |
+ /// |
+ /// By default, just uses regular equality. |
bool descriptionsEqual(description1, description2) => |
description1 == description2; |
- /** |
- * For some sources, [PackageId]s can point to different chunks of code at |
- * different times. This takes such an [id] and returns a future that |
- * completes to a [PackageId] that will uniquely specify a single chunk of |
- * code forever. |
- * |
- * For example, [GitSource] might take an [id] with description |
- * `http://github.com/dart-lang/some-lib.git` and return an id with a |
- * description that includes the current commit of the Git repository. |
- * |
- * This will be called after the package identified by [id] is installed, so |
- * the source can use the installed package to determine information about the |
- * resolved id. |
- * |
- * The returned [PackageId] may have a description field that's invalid |
- * according to [validateDescription], although it must still be serializable |
- * to JSON and YAML. It must also be equal to [id] according to |
- * [descriptionsEqual]. |
- * |
- * By default, this just returns [id]. |
- */ |
+ /// For some sources, [PackageId]s can point to different chunks of code at |
+ /// different times. This takes such an [id] and returns a future that |
+ /// completes to a [PackageId] that will uniquely specify a single chunk of |
+ /// code forever. |
+ /// |
+ /// For example, [GitSource] might take an [id] with description |
+ /// `http://github.com/dart-lang/some-lib.git` and return an id with a |
+ /// description that includes the current commit of the Git repository. |
+ /// |
+ /// This will be called after the package identified by [id] is installed, so |
+ /// the source can use the installed package to determine information about |
+ /// the resolved id. |
+ /// |
+ /// The returned [PackageId] may have a description field that's invalid |
+ /// according to [validateDescription], although it must still be serializable |
+ /// to JSON and YAML. It must also be equal to [id] according to |
+ /// [descriptionsEqual]. |
+ /// |
+ /// By default, this just returns [id]. |
Future<PackageId> resolveId(PackageId id) => new Future.immediate(id); |
/// Returns the source's name. |