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

Side by Side Diff: sdk/lib/_internal/pub_generated/lib/src/source_registry.dart

Issue 937243002: Revert "Revert "Use native async/await support in pub."" (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4
5 library pub.source_registry;
6
7 import 'dart:collection';
8
9 import 'package.dart';
10 import 'source.dart';
11 import 'source/unknown.dart';
12
13 /// A class that keeps track of [Source]s used for getting packages.
14 class SourceRegistry extends IterableBase<Source> {
15 final _sources = new Map<String, Source>();
16 Source _default;
17
18 /// Returns the default source, which is used when no source is specified.
19 Source get defaultSource => _default;
20
21 /// Iterates over the registered sources in name order.
22 Iterator<Source> get iterator {
23 var sources = _sources.values.toList();
24 sources.sort((a, b) => a.name.compareTo(b.name));
25 return sources.iterator;
26 }
27
28 /// Returns whether [id1] and [id2] refer to the same package, including
29 /// validating that their descriptions are equivalent.
30 bool idsEqual(PackageId id1, PackageId id2) {
31 if (id1 != id2) return false;
32 if (id1 == null && id2 == null) return true;
33 return idDescriptionsEqual(id1, id2);
34 }
35
36 /// Returns whether [id1] and [id2] have the same source and description.
37 ///
38 /// This doesn't check whether the name or versions are equal.
39 bool idDescriptionsEqual(PackageId id1, PackageId id2) {
40 if (id1.source != id2.source) return false;
41 return this[id1.source].descriptionsEqual(id1.description, id2.description);
42 }
43
44 /// Sets the default source.
45 ///
46 /// This takes a string, which must be the name of a registered source.
47 void setDefault(String name) {
48 if (!_sources.containsKey(name)) {
49 throw new StateError('Default source $name is not in the registry');
50 }
51
52 _default = _sources[name];
53 }
54
55 /// Registers a new source.
56 ///
57 /// This source may not have the same name as a source that's already been
58 /// registered.
59 void register(Source source) {
60 if (_sources.containsKey(source.name)) {
61 throw new StateError(
62 'Source registry already has a source named ' '${source.name}');
63 }
64
65 _sources[source.name] = source;
66 }
67
68 /// Returns the source named [name].
69 ///
70 /// Returns an [UnknownSource] if no source with that name has been
71 /// registered. If [name] is null, returns the default source.
72 Source operator [](String name) {
73 if (name == null) {
74 if (defaultSource != null) return defaultSource;
75 throw new StateError('No default source has been registered');
76 }
77
78 if (_sources.containsKey(name)) return _sources[name];
79 return new UnknownSource(name);
80 }
81 }
OLDNEW
« no previous file with comments | « sdk/lib/_internal/pub_generated/lib/src/source/unknown.dart ('k') | sdk/lib/_internal/pub_generated/lib/src/system_cache.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698