| 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..0c3121f4fffbc6689522df12525882ad45e62696 100644
|
| --- a/sdk/lib/_internal/pub/test/test_pub.dart
|
| +++ b/sdk/lib/_internal/pub/test/test_pub.dart
|
| @@ -45,6 +45,9 @@ import '../lib/src/utils.dart';
|
| import '../lib/src/validator.dart';
|
| import '../lib/src/version.dart';
|
| import 'descriptor.dart' as d;
|
| +import 'serve_packages.dart';
|
| +
|
| +export 'serve_packages.dart';
|
|
|
| /// This should be called at the top of a test file to set up an appropriate
|
| /// test configuration for the machine running the tests.
|
| @@ -222,139 +225,6 @@ Future _closeServer() {
|
| /// `true` if the current test spins up an HTTP server.
|
| bool _hasServer = false;
|
|
|
| -/// 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 parsed pubspec maps 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;
|
| -
|
| -/// Creates an HTTP server that replicates the structure of pub.dartlang.org.
|
| -///
|
| -/// [pubspecs] is a list of unserialized pubspecs representing the packages to
|
| -/// serve.
|
| -///
|
| -/// If [replace] is false, subsequent calls to [servePackages] will add to the
|
| -/// 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 [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}) {
|
| - if (_servedPackages == null || _servedPackageDir == null) {
|
| - _servedPackages = <String, List<Map>>{};
|
| - _servedApiPackageDir = d.dir('packages', []);
|
| - _servedPackageDir = d.dir('packages', []);
|
| - serve([
|
| - d.dir('api', [_servedApiPackageDir]),
|
| - _servedPackageDir
|
| - ]);
|
| -
|
| - currentSchedule.onComplete.schedule(() {
|
| - _servedPackages = null;
|
| - _servedApiPackageDir = null;
|
| - _servedPackageDir = null;
|
| - }, 'cleaning up served packages');
|
| - }
|
| -
|
| - schedule(() {
|
| - return awaitObject(pubspecs).then((resolvedPubspecs) {
|
| - if (replace) _servedPackages.clear();
|
| -
|
| - for (var pubspec in resolvedPubspecs) {
|
| - var name = pubspec['name'];
|
| - var version = pubspec['version'];
|
| - var versions = _servedPackages.putIfAbsent(name, () => []);
|
| - versions.add(pubspec);
|
| - }
|
| -
|
| - var repoPackages = new Set();
|
| - if (serveBarback) {
|
| - _addPackage(name) {
|
| - if (_servedPackages.containsKey(name)) return;
|
| - repoPackages.add(name);
|
| -
|
| - var pubspec = new Map.from(loadYaml(
|
| - readTextFile(path.join(repoRoot, 'pkg', name, 'pubspec.yaml'))));
|
| -
|
| - // Remove any SDK constraints since we don't have a valid SDK version
|
| - // while testing.
|
| - pubspec.remove('environment');
|
| -
|
| - _servedPackages[name] = [pubspec];
|
| - if (pubspec.containsKey('dependencies')) {
|
| - pubspec['dependencies'].keys.forEach(_addPackage);
|
| - }
|
| - }
|
| -
|
| - _addPackage('barback');
|
| - }
|
| -
|
| - _servedApiPackageDir.contents.clear();
|
| - _servedPackageDir.contents.clear();
|
| - for (var name in _servedPackages.keys) {
|
| - _servedApiPackageDir.contents.addAll([
|
| - d.file('$name', JSON.encode({
|
| - 'name': name,
|
| - 'uploaders': ['nweiz@google.com'],
|
| - 'versions': _servedPackages[name].map(packageVersionApiMap).toList()
|
| - })),
|
| - d.dir(name, [
|
| - d.dir('versions', _servedPackages[name].map((pubspec) {
|
| - return d.file(pubspec['version'], JSON.encode(
|
| - packageVersionApiMap(pubspec, full: true)));
|
| - }))
|
| - ])
|
| - ]);
|
| -
|
| - _servedPackageDir.contents.add(d.dir(name, [
|
| - d.dir('versions', _servedPackages[name].map((pubspec) {
|
| - var version = pubspec['version'];
|
| -
|
| - if (repoPackages.contains(name)) {
|
| - return d.tar('$version.tar.gz', [
|
| - d.file('pubspec.yaml', JSON.encode(pubspec)),
|
| - new d.DirectoryDescriptor.fromFilesystem('lib',
|
| - path.join(repoRoot, 'pkg', name, 'lib'))
|
| - ]);
|
| - }
|
| -
|
| - 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);
|
| - }))
|
| - ]));
|
| - }
|
| - });
|
| - }, 'initializing the package server');
|
| -}
|
| -
|
| /// Converts [value] into a YAML string.
|
| String yaml(value) => JSON.encode(value);
|
|
|
| @@ -778,7 +648,7 @@ void makeGlobalPackage(String package, String version,
|
| Iterable<d.Descriptor> contents, {Iterable<String> pkg,
|
| Map<String, String> hosted}) {
|
| // Start the server so we know what port to use in the cache directory name.
|
| - servePackages([]);
|
| + serveNoPackages();
|
|
|
| // Create the package in the hosted cache.
|
| d.hostedCache([
|
|
|