| Index: lib/src/source_registry.dart
|
| diff --git a/lib/src/source_registry.dart b/lib/src/source_registry.dart
|
| index c8d408ccebdbfff1464267b8e1b66dc82c1aa3bb..7c2513289fa33a92c51b93c2e2d0e9f990abcded 100644
|
| --- a/lib/src/source_registry.dart
|
| +++ b/lib/src/source_registry.dart
|
| @@ -2,25 +2,48 @@
|
| // for details. All rights reserved. Use of this source code is governed by a
|
| // BSD-style license that can be found in the LICENSE file.
|
|
|
| -import 'dart:collection';
|
| -
|
| import 'package.dart';
|
| import 'source.dart';
|
| +import 'source/git.dart';
|
| +import 'source/hosted.dart';
|
| +import 'source/path.dart';
|
| import 'source/unknown.dart';
|
|
|
| /// A class that keeps track of [Source]s used for getting packages.
|
| -class SourceRegistry extends IterableBase<Source> {
|
| - final _sources = new Map<String, Source>();
|
| - Source _default;
|
| +class SourceRegistry {
|
| + /// The registered sources.
|
| + ///
|
| + /// This is initialized with the three built-in sources.
|
| + final _sources = {
|
| + "git": new GitSource(),
|
| + "hosted": new HostedSource(),
|
| + "path": new PathSource()
|
| + };
|
|
|
| - /// Returns the default source, which is used when no source is specified.
|
| + /// The default source, which is used when no source is specified.
|
| + ///
|
| + /// This defaults to [hosted].
|
| Source get defaultSource => _default;
|
| + Source _default;
|
|
|
| - /// Iterates over the registered sources in name order.
|
| - Iterator<Source> get iterator {
|
| + /// The registered sources, in name order.
|
| + List<Source> get all {
|
| var sources = _sources.values.toList();
|
| sources.sort((a, b) => a.name.compareTo(b.name));
|
| - return sources.iterator;
|
| + return sources;
|
| + }
|
| +
|
| + /// The built-in [GitSource].
|
| + GitSource get git => _sources["git"] as GitSource;
|
| +
|
| + /// The built-in [HostedSource].
|
| + HostedSource get hosted => _sources["hosted"] as HostedSource;
|
| +
|
| + /// The built-in [PathSource].
|
| + PathSource get path => _sources["path"] as PathSource;
|
| +
|
| + SourceRegistry() {
|
| + _default = hosted;
|
| }
|
|
|
| /// Returns whether [id1] and [id2] refer to the same package, including
|
| @@ -63,27 +86,12 @@ class SourceRegistry extends IterableBase<Source> {
|
| _sources[source.name] = source;
|
| }
|
|
|
| - /// Loads the package identified by [id].
|
| - ///
|
| - /// Throws an [ArgumentError] if [id] has an invalid source.
|
| - Package load(PackageId id) {
|
| - var source = this[id.source];
|
| - if (source == null) throw new ArgumentError("Unknown source ${id.source}.");
|
| -
|
| - var dir = source.getDirectory(id);
|
| - return new Package.load(id.name, dir, this);
|
| - }
|
| -
|
| /// Returns the source named [name].
|
| ///
|
| /// Returns an [UnknownSource] if no source with that name has been
|
| /// registered. If [name] is null, returns the default source.
|
| Source operator[](String name) {
|
| - if (name == null) {
|
| - if (defaultSource != null) return defaultSource;
|
| - throw new StateError('No default source has been registered');
|
| - }
|
| -
|
| + if (name == null) return _default;
|
| if (_sources.containsKey(name)) return _sources[name];
|
| return new UnknownSource(name);
|
| }
|
|
|