| Index: lib/src/source/hosted.dart
|
| diff --git a/lib/src/source/hosted.dart b/lib/src/source/hosted.dart
|
| index 0179c151cdd33270a246a038bb1ab1d88076f01b..8c93bfc5b46a4639e9f90b234770bebc70258dfc 100644
|
| --- a/lib/src/source/hosted.dart
|
| +++ b/lib/src/source/hosted.dart
|
| @@ -24,6 +24,32 @@ import 'cached.dart';
|
| /// A package source that gets packages from a package hosting site that uses
|
| /// the same API as pub.dartlang.org.
|
| class HostedSource extends CachedSource {
|
| + /// Returns a reference to a hosted package named [name].
|
| + ///
|
| + /// If [url] is passed, it's the URL of the pub server from which the package
|
| + /// should be downloaded. It can be a [Uri] or a [String].
|
| + static PackageRef refFor(String name, {url}) =>
|
| + new PackageRef(name, 'hosted', _descriptionFor(name, url));
|
| +
|
| + /// Returns an ID for a hosted package named [name] at [version].
|
| + ///
|
| + /// If [url] is passed, it's the URL of the pub server from which the package
|
| + /// should be downloaded. It can be a [Uri] or a [String].
|
| + static PackageId idFor(String name, Version version, {url}) =>
|
| + new PackageId(name, 'hosted', version, _descriptionFor(name, url));
|
| +
|
| + /// Returns the description for a hosted package named [name] with the
|
| + /// given package server [url].
|
| + static _descriptionFor(String name, [url]) {
|
| + if (url == null) return name;
|
| +
|
| + if (url is! String && url is! Uri) {
|
| + throw new ArgumentError.value(url, 'url', 'must be a Uri or a String.');
|
| + }
|
| +
|
| + return {'name': name, 'url': url.toString()};
|
| + }
|
| +
|
| final name = "hosted";
|
| final hasMultipleVersions = true;
|
|
|
| @@ -56,7 +82,7 @@ class HostedSource extends CachedSource {
|
| var pubspec = new Pubspec.fromMap(
|
| map['pubspec'], systemCache.sources,
|
| expectedName: ref.name, location: url);
|
| - var id = ref.atVersion(pubspec.version);
|
| + var id = idFor(ref.name, pubspec.version);
|
| memoizePubspec(id, pubspec);
|
|
|
| return id;
|
| @@ -118,10 +144,14 @@ class HostedSource extends CachedSource {
|
| /// There are two valid formats. A plain string refers to a package with the
|
| /// given name from the default host, while a map with keys "name" and "url"
|
| /// refers to a package with the given name from the host at the given URL.
|
| - dynamic parseDescription(String containingPath, description,
|
| - {bool fromLockFile: false}) {
|
| + PackageRef parseRef(String name, description, {String containingPath}) {
|
| + _parseDescription(description);
|
| + return new PackageRef(name, this.name, description);
|
| + }
|
| +
|
| + PackageId parseId(String name, Version version, description) {
|
| _parseDescription(description);
|
| - return description;
|
| + return new PackageId(name, this.name, version, description);
|
| }
|
|
|
| /// Re-downloads all packages that have been previously downloaded into the
|
| @@ -138,7 +168,7 @@ class HostedSource extends CachedSource {
|
| packages.sort(Package.orderByNameAndVersion);
|
|
|
| for (var package in packages) {
|
| - var id = new PackageId(package.name, this.name, package.version, null);
|
| + var id = idFor(package.name, package.version);
|
|
|
| try {
|
| await _download(url, package.name, package.version, package.dir);
|
| @@ -241,7 +271,7 @@ class OfflineHostedSource extends HostedSource {
|
| versions = await listDir(dir).map((entry) {
|
| var components = path.basename(entry).split("-");
|
| if (components.first != ref.name) return null;
|
| - return ref.atVersion(new Version.parse(components.last));
|
| + return HostedSource.idFor(ref.name, new Version.parse(components.last));
|
| }).where((id) => id != null).toList();
|
| } else {
|
| versions = [];
|
|
|