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

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

Issue 488323002: Make servePackages's contents argument saner. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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 ff5d9f9db1aebe6e56d5e2059722ce075e36ac57..73200c7f71f10ffdd666efad4e467ca9afa2b862 100644
--- a/sdk/lib/_internal/pub/test/test_pub.dart
+++ b/sdk/lib/_internal/pub/test/test_pub.dart
@@ -238,11 +238,12 @@ d.DirectoryDescriptor _servedApiPackageDir;
/// this test.
d.DirectoryDescriptor _servedPackageDir;
-/// A map from package names to parsed pubspec maps for those packages.
+/// A map from package names to parsed pubspec maps and contents for those
+/// 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, List<Map>> _servedPackages;
+Map<String, List<Pair<Map, Iterable<d.Descriptor>>>> _servedPackages;
/// Creates an HTTP server that replicates the structure of pub.dartlang.org.
///
@@ -253,15 +254,17 @@ Map<String, List<Map>> _servedPackages;
/// set of packages that are being served. Previous packages will continue to be
/// served. Otherwise, the previous packages will no longer be served.
///
-/// If [contents] is given, its contents are added to every served
-/// package.
+/// If [contents] is given, it should be a map from package names and versions
+/// (e.g. "foo-1.2.3") to their contents.
Bob Nystrom 2014/08/20 23:50:23 Having the mention the package names and versions
nweiz 2014/08/21 01:21:23 Done.
///
/// If [serveBarback] is true, the repo versions of barback and its dependencies
/// will be served as well.
void servePackages(List<Map> pubspecs, {bool replace: false,
- Iterable<d.Descriptor> contents, bool serveBarback: false}) {
+ Map<String, Iterable<d.Descriptor>> contents, bool serveBarback: false}) {
+ if (contents == null) contents = {};
+
if (_servedPackages == null || _servedPackageDir == null) {
- _servedPackages = <String, List<Map>>{};
+ _servedPackages = <String, List<Pair<Map, Iterable<d.Descriptor>>>>{};
_servedApiPackageDir = d.dir('packages', []);
_servedPackageDir = d.dir('packages', []);
serve([
@@ -284,7 +287,11 @@ void servePackages(List<Map> pubspecs, {bool replace: false,
var name = pubspec['name'];
var version = pubspec['version'];
var versions = _servedPackages.putIfAbsent(name, () => []);
- versions.add(pubspec);
+ var packageContents = contents['$name-$version'];
+ if (packageContents == null) {
+ packageContents = [d.libDir(name, '$name $version')];
+ }
+ versions.add(new Pair(pubspec, packageContents));
}
var repoPackages = new Set();
@@ -300,7 +307,12 @@ void servePackages(List<Map> pubspecs, {bool replace: false,
// while testing.
pubspec.remove('environment');
- _servedPackages[name] = [pubspec];
+ _servedPackages[name] = [
+ new Pair(pubspec, [
+ new d.DirectoryDescriptor.fromFilesystem('lib',
+ path.join(repoRoot, 'pkg', name, 'lib'))
+ ])
+ ];
if (pubspec.containsKey('dependencies')) {
pubspec['dependencies'].keys.forEach(_addPackage);
}
@@ -316,10 +328,12 @@ void servePackages(List<Map> pubspecs, {bool replace: false,
d.file('$name', JSON.encode({
'name': name,
'uploaders': ['nweiz@google.com'],
- 'versions': _servedPackages[name].map(packageVersionApiMap).toList()
+ 'versions': _servedPackages[name]
+ .map((pair) => packageVersionApiMap(pair.first)).toList()
})),
d.dir(name, [
- d.dir('versions', _servedPackages[name].map((pubspec) {
+ d.dir('versions', _servedPackages[name].map((pair) {
+ var pubspec = pair.first;
return d.file(pubspec['version'], JSON.encode(
packageVersionApiMap(pubspec, full: true)));
}))
@@ -327,7 +341,9 @@ void servePackages(List<Map> pubspecs, {bool replace: false,
]);
_servedPackageDir.contents.add(d.dir(name, [
- d.dir('versions', _servedPackages[name].map((pubspec) {
+ d.dir('versions', _servedPackages[name].map((pair) {
+ var pubspec = pair.first;
+ var packageContents = pair.last;
var version = pubspec['version'];
if (repoPackages.contains(name)) {
@@ -338,16 +354,9 @@ void servePackages(List<Map> pubspecs, {bool replace: false,
]);
}
- var archiveContents = [
- d.file('pubspec.yaml', JSON.encode(pubspec)),
- d.libDir(name, '$name $version')
- ];
-
- if (contents != null) {
- archiveContents.addAll(contents);
- }
-
- return d.tar('$version.tar.gz', archiveContents);
+ return d.tar('$version.tar.gz', [
+ d.file('pubspec.yaml', JSON.encode(pubspec))
+ ]..addAll(packageContents));
}))
]));
}

Powered by Google App Engine
This is Rietveld 408576698