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: lib/src/source_registry.dart

Issue 2044253003: Refactor Source and SourceRegistry. (Closed) Base URL: git@github.com:dart-lang/pub.git@master
Patch Set: Rename LiveSource to BoundSource. Created 4 years, 6 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 | « lib/src/source/unknown.dart ('k') | lib/src/system_cache.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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);
}
« no previous file with comments | « lib/src/source/unknown.dart ('k') | lib/src/system_cache.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698