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

Unified Diff: sdk/lib/_internal/pub/test/test_pub.dart

Issue 16351003: Move pub over to using the pub.dartlang.org API v2. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 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
Index: sdk/lib/_internal/pub/test/test_pub.dart
diff --git a/sdk/lib/_internal/pub/test/test_pub.dart b/sdk/lib/_internal/pub/test/test_pub.dart
index 1a784e73c3145e403f02a65d5d041bda847c10f6..cda86d9ae3c9b87d62607994d4e32a6e7dcd05bc 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -147,16 +147,27 @@ Future _closeServer() {
return sleep(10);
}
-/// The [d.DirectoryDescriptor] describing the server layout of packages that
-/// are being served via [servePackages]. This is `null` if [servePackages] has
-/// not yet been called for this test.
+/// The [d.DirectoryDescriptor] describing the server layout of `/api/packages`
+/// on the test server.
+///
+/// This contains metadata for packages that are being served via
+/// [servePackages]. It's `null` if [servePackages] has not yet been called for
+/// this test.
+d.DirectoryDescriptor _servedApiPackageDir;
+
+/// The [d.DirectoryDescriptor] describing the server layout of `/packages` on
+/// the test server.
+///
+/// This contains the tarballs for packages that are being served via
+/// [servePackages]. It's `null` if [servePackages] has not yet been called for
+/// this test.
d.DirectoryDescriptor _servedPackageDir;
-/// A map from package names to version numbers to YAML-serialized pubspecs for
-/// those packages. This represents the packages currently being served by
+/// A map from package names to version numbers to parsed pubspec maps for those
Bob Nystrom 2013/06/04 20:21:41 Remove "to version numbers".
nweiz 2013/06/04 21:04:17 Done.
+/// packages. This represents the packages currently being served by
/// [servePackages], and is `null` if [servePackages] has not yet been called
/// for this test.
-Map<String, Map<String, String>> _servedPackages;
+Map<String, List<Map>> _servedPackages;
/// Creates an HTTP server that replicates the structure of pub.dartlang.org.
/// [pubspecs] is a list of unserialized pubspecs representing the packages to
@@ -166,12 +177,17 @@ Map<String, Map<String, String>> _servedPackages;
/// are being served. Previous packages will continue to be served.
void servePackages(List<Map> pubspecs) {
if (_servedPackages == null || _servedPackageDir == null) {
- _servedPackages = <String, Map<String, String>>{};
+ _servedPackages = <String, List<Map>>{};
+ _servedApiPackageDir = d.dir('packages', []);
_servedPackageDir = d.dir('packages', []);
- serve([_servedPackageDir]);
+ serve([
+ d.dir('api', [_servedApiPackageDir]),
+ _servedPackageDir
+ ]);
currentSchedule.onComplete.schedule(() {
_servedPackages = null;
+ _servedApiPackageDir = null;
_servedPackageDir = null;
}, 'cleaning up served packages');
}
@@ -181,28 +197,36 @@ void servePackages(List<Map> pubspecs) {
for (var spec in resolvedPubspecs) {
var name = spec['name'];
var version = spec['version'];
- var versions = _servedPackages.putIfAbsent(
- name, () => <String, String>{});
- versions[version] = yaml(spec);
+ var versions = _servedPackages.putIfAbsent(name, () => []);
+ versions.add(spec);
}
+ _servedApiPackageDir.contents.clear();
_servedPackageDir.contents.clear();
for (var name in _servedPackages.keys) {
- var versions = _servedPackages[name].keys.toList();
- _servedPackageDir.contents.addAll([
- d.file('$name.json', json.stringify({'versions': versions})),
+ _servedApiPackageDir.contents.addAll([
+ d.file('$name', json.stringify({
+ 'name': name,
+ 'uploaders': ['nweiz@google.com'],
+ 'versions': _servedPackages[name].map(packageVersionApiMap).toList()
+ })),
d.dir(name, [
- d.dir('versions', flatten(versions.map((version) {
- return [
- d.file('$version.yaml', _servedPackages[name][version]),
- d.tar('$version.tar.gz', [
- d.file('pubspec.yaml', _servedPackages[name][version]),
- d.libDir(name, '$name $version')
- ])
- ];
- })))
+ d.dir('versions', _servedPackages[name].map((pubspec) {
+ return d.file(pubspec['version'], json.stringify(
+ packageVersionApiMap(pubspec, full: true)));
+ }))
])
]);
+
+ _servedPackageDir.contents.add(d.dir(name, [
+ d.dir('versions', _servedPackages[name].map((pubspec) {
+ var version = pubspec['version'];
+ return d.tar('$version.tar.gz', [
+ d.file('pubspec.yaml', json.stringify(pubspec)),
+ d.libDir(name, '$name $version')
+ ]);
+ }))
+ ]));
}
});
}, 'initializing the package server');
@@ -632,6 +656,37 @@ String _packageName(String sourceName, description) {
}
}
+/// Returns a Map in the format used by the pub.dartlang.org API to represent a
+/// package version.
+///
+/// [pubspec] is the parsed pubspec of the package version. If [full] is true,
+/// this returns the complete map, including metadata that's only included when
+/// requesting the package version directly.
+Map packageVersionApiMap(Map pubspec, {bool full: false}) {
+ var name = pubspec['name'];
+ var version = pubspec['version'];
+ var map = {
+ 'pubspec': pubspec,
+ 'version': version,
+ 'url': '/api/packages/$name/versions/$version',
+ 'archive_url': '/packages/$name/versions/$version.tar.gz',
+ 'new_dartdoc_url': '/api/packages/$name/versions/$version'
+ '/new_dartdoc',
+ 'package_url': '/api/packages/$name'
+ };
+
+ if (full) {
+ mapAddAll(map, {
+ 'downloads': 0,
+ 'created': '2012-09-25T18:38:28.685260',
+ 'libraries': ['$name.dart'],
+ 'uploader': ['nweiz@google.com']
+ });
+ }
+
+ return map;
+}
+
/// Compares the [actual] output from running pub with [expected]. For [String]
/// patterns, ignores leading and trailing whitespace differences and tries to
/// report the offending difference in a nice way. For other [Pattern]s, just

Powered by Google App Engine
This is Rietveld 408576698