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)); |
})) |
])); |
} |