OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 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 | 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. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library source; | 5 library source; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:pathos/path.dart' as path; | 9 import 'package:pathos/path.dart' as path; |
10 | 10 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
61 /// Get the list of all versions that exist for the package described by | 61 /// Get the list of all versions that exist for the package described by |
62 /// [description]. [name] is the expected name of the package. | 62 /// [description]. [name] is the expected name of the package. |
63 /// | 63 /// |
64 /// Note that this does *not* require the packages to be installed, which is | 64 /// Note that this does *not* require the packages to be installed, which is |
65 /// the point. This is used during version resolution to determine which | 65 /// the point. This is used during version resolution to determine which |
66 /// package versions are available to be installed (or already installed). | 66 /// package versions are available to be installed (or already installed). |
67 /// | 67 /// |
68 /// By default, this assumes that each description has a single version and | 68 /// By default, this assumes that each description has a single version and |
69 /// uses [describe] to get that version. | 69 /// uses [describe] to get that version. |
70 Future<List<Version>> getVersions(String name, description) { | 70 Future<List<Version>> getVersions(String name, description) { |
71 return describe(new PackageId(name, this, Version.none, description)) | 71 var id = new PackageId(name, this.name, Version.none, description); |
72 .then((pubspec) => [pubspec.version]); | 72 return describeUncached(id).then((pubspec) => [pubspec.version]); |
73 } | 73 } |
74 | 74 |
75 /// Loads the (possibly remote) pubspec for the package version identified by | 75 /// Loads the (possibly remote) pubspec for the package version identified by |
76 /// [id]. This may be called for packages that have not yet been installed | 76 /// [id]. This may be called for packages that have not yet been installed |
77 /// during the version resolution process. | 77 /// during the version resolution process. |
78 /// | 78 /// |
79 /// If the package has been installed to the system cache, the cached pubspec | |
80 /// will be used. Otherwise, it delegates to host-specific lookup behavior. | |
81 /// | |
79 /// For cached sources, by default this uses [installToSystemCache] to get the | 82 /// For cached sources, by default this uses [installToSystemCache] to get the |
80 /// pubspec. There is no default implementation for non-cached sources; they | 83 /// pubspec. There is no default implementation for non-cached sources; they |
81 /// must implement it manually. | 84 /// must implement it manually. |
82 Future<Pubspec> describe(PackageId id) { | 85 Future<Pubspec> describe(PackageId id) { |
nweiz
2013/05/17 23:55:55
I don't understand why the describe/describeUncach
Bob Nystrom
2013/05/20 20:06:00
This moves the cache checking into Source from Sys
nweiz
2013/05/20 23:54:05
It would be nice if this sort of change were separ
| |
86 if (id.isRoot) throw new ArgumentError("Cannot describe the root package."); | |
87 if (id.source != name) throw new ArgumentError( | |
nweiz
2013/05/17 23:55:55
Use {} if the value is smaller than a single line.
Bob Nystrom
2013/05/20 20:06:00
Done.
| |
88 "Package $id does not use this source."); | |
nweiz
2013/05/17 23:55:55
Include the name of this source.
Bob Nystrom
2013/05/20 20:06:00
Done.
| |
89 | |
90 // Try to get it from the system cache first. | |
91 if (shouldCache) { | |
92 return systemCacheDirectory(id).then((packageDir) { | |
93 if (!fileExists(path.join(packageDir, "pubspec.yaml"))) { | |
94 return describeUncached(id); | |
95 } | |
96 | |
97 return new Pubspec.load(id.name, packageDir, _systemCache.sources); | |
98 }); | |
99 } | |
100 | |
101 // Not cached, so get it from the source. | |
102 return describeUncached(id); | |
103 } | |
104 | |
105 /// Loads the pubspec for the package version identified by [id] which is not | |
106 /// already in the system cache. For cached sources, by default this uses | |
nweiz
2013/05/17 23:55:55
I learned recently that docstrings are supposed to
Bob Nystrom
2013/05/20 20:06:00
Done.
| |
107 /// [installToSystemCache] to get the pubspec. There is no default | |
108 /// implementation for non-cached sources; they must implement it manually. | |
nweiz
2013/05/17 23:55:55
Mention that this is intended to be a protected me
Bob Nystrom
2013/05/20 20:06:00
Done.
| |
109 Future<Pubspec> describeUncached(PackageId id) { | |
83 if (!shouldCache) { | 110 if (!shouldCache) { |
84 throw new UnimplementedError("Source $name must implement describe(id)."); | 111 throw new UnimplementedError( |
112 "Source $name must implement describeUncached(id)."); | |
85 } | 113 } |
86 return installToSystemCache(id).then((package) => package.pubspec); | 114 return installToSystemCache(id).then((package) => package.pubspec); |
87 } | 115 } |
88 | 116 |
89 /// Installs the package identified by [id] to [path]. Returns a [Future] that | 117 /// Installs the package identified by [id] to [path]. Returns a [Future] that |
90 /// completes when the installation was finished. The [Future] should resolve | 118 /// completes when the installation was finished. The [Future] should resolve |
91 /// to true if the package was found in the source and false if it wasn't. For | 119 /// to true if the package was found in the source and false if it wasn't. For |
92 /// all other error conditions, it should complete with an exception. | 120 /// all other error conditions, it should complete with an exception. |
93 /// | 121 /// |
94 /// [path] is guaranteed not to exist, and its parent directory is guaranteed | 122 /// [path] is guaranteed not to exist, and its parent directory is guaranteed |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
213 /// Returns the [Package]s that have been installed in the system cache. | 241 /// Returns the [Package]s that have been installed in the system cache. |
214 List<Package> getCachedPackages() { | 242 List<Package> getCachedPackages() { |
215 if (shouldCache) { | 243 if (shouldCache) { |
216 throw new UnimplementedError("Source $name must implement this."); | 244 throw new UnimplementedError("Source $name must implement this."); |
217 } | 245 } |
218 } | 246 } |
219 | 247 |
220 /// Returns the source's name. | 248 /// Returns the source's name. |
221 String toString() => name; | 249 String toString() => name; |
222 } | 250 } |
OLD | NEW |