| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 serve_packages; | 5 library serve_packages; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:convert'; | 8 import 'dart:convert'; |
| 9 | 9 |
| 10 import 'package:path/path.dart' as p; | 10 import 'package:path/path.dart' as p; |
| 11 import 'package:pub/src/io.dart'; | 11 import 'package:pub/src/io.dart'; |
| 12 import 'package:pub/src/pubspec.dart'; |
| 13 import 'package:pub/src/source_registry.dart'; |
| 12 import 'package:pub/src/utils.dart'; | 14 import 'package:pub/src/utils.dart'; |
| 13 import 'package:pub_semver/pub_semver.dart'; | 15 import 'package:pub_semver/pub_semver.dart'; |
| 14 import 'package:scheduled_test/scheduled_test.dart'; | 16 import 'package:scheduled_test/scheduled_test.dart'; |
| 15 import 'package:yaml/yaml.dart'; | 17 import 'package:yaml/yaml.dart'; |
| 16 | 18 |
| 17 import 'descriptor.dart' as d; | 19 import 'descriptor.dart' as d; |
| 18 import 'test_pub.dart'; | 20 import 'test_pub.dart'; |
| 19 | 21 |
| 20 /// The [d.DirectoryDescriptor] describing the server layout of `/api/packages` | 22 /// The [d.DirectoryDescriptor] describing the server layout of `/api/packages` |
| 21 /// on the test server. | 23 /// on the test server. |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 }); | 98 }); |
| 97 }, 'initializing the package server'); | 99 }, 'initializing the package server'); |
| 98 } | 100 } |
| 99 | 101 |
| 100 /// Like [servePackages], but instead creates an empty server with no packages | 102 /// Like [servePackages], but instead creates an empty server with no packages |
| 101 /// registered. | 103 /// registered. |
| 102 /// | 104 /// |
| 103 /// This will always replace a previous server. | 105 /// This will always replace a previous server. |
| 104 void serveNoPackages() => servePackages((_) {}, replace: true); | 106 void serveNoPackages() => servePackages((_) {}, replace: true); |
| 105 | 107 |
| 108 /// A shortcut for [servePackages] that serves the version of barback used by |
| 109 /// pub. |
| 110 void serveBarback() { |
| 111 servePackages((builder) { |
| 112 builder.serveRealPackage('barback'); |
| 113 }); |
| 114 } |
| 115 |
| 106 /// A builder for specifying which packages should be served by [servePackages]. | 116 /// A builder for specifying which packages should be served by [servePackages]. |
| 107 class PackageServerBuilder { | 117 class PackageServerBuilder { |
| 108 /// A map from package names to a list of concrete packages to serve. | 118 /// A map from package names to a list of concrete packages to serve. |
| 109 final _packages = new Map<String, List<_ServedPackage>>(); | 119 final _packages = new Map<String, List<_ServedPackage>>(); |
| 110 | 120 |
| 111 /// A group of futures from [serve] calls. | 121 /// A group of futures from [serve] calls. |
| 112 /// | 122 /// |
| 113 /// This should be accessed by calling [_awair]. | 123 /// This should be accessed by calling [_awair]. |
| 114 var _futures = new FutureGroup(); | 124 var _futures = new FutureGroup(); |
| 115 | 125 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 140 if (contents == null) contents = [d.libDir(name, "$name $version")]; | 150 if (contents == null) contents = [d.libDir(name, "$name $version")]; |
| 141 contents = [d.file("pubspec.yaml", yaml(pubspecFields))] | 151 contents = [d.file("pubspec.yaml", yaml(pubspecFields))] |
| 142 ..addAll(contents); | 152 ..addAll(contents); |
| 143 | 153 |
| 144 var packages = _packages.putIfAbsent(name, () => []); | 154 var packages = _packages.putIfAbsent(name, () => []); |
| 145 packages.add(new _ServedPackage(pubspecFields, contents)); | 155 packages.add(new _ServedPackage(pubspecFields, contents)); |
| 146 })); | 156 })); |
| 147 } | 157 } |
| 148 | 158 |
| 149 /// Serves the versions of [package] and all its dependencies that are | 159 /// Serves the versions of [package] and all its dependencies that are |
| 150 /// currently checked into the Dart repository. | 160 /// currently depended on by pub. |
| 151 void serveRepoPackage(String package) { | 161 void serveRealPackage(String package) { |
| 152 _addPackage(name) { | 162 _addPackage(name) { |
| 153 if (_packages.containsKey(name)) return; | 163 if (_packages.containsKey(name)) return; |
| 154 _packages[name] = []; | 164 _packages[name] = []; |
| 155 | 165 |
| 156 var root = packagePath(name); | 166 var root = packagePath(name); |
| 157 var pubspec = new Map.from(loadYaml( | 167 var pubspec = new Map.from(loadYaml( |
| 158 readTextFile(p.join(root, 'pubspec.yaml')))); | 168 readTextFile(p.join(root, 'pubspec.yaml')))); |
| 159 | 169 |
| 160 // Remove any SDK constraints since we don't have a valid SDK version | 170 // Remove any SDK constraints since we don't have a valid SDK version |
| 161 // while testing. | 171 // while testing. |
| (...skipping 24 matching lines...) Expand all Loading... |
| 186 | 196 |
| 187 /// A package that's intended to be served. | 197 /// A package that's intended to be served. |
| 188 class _ServedPackage { | 198 class _ServedPackage { |
| 189 final Map pubspec; | 199 final Map pubspec; |
| 190 final List<d.Descriptor> contents; | 200 final List<d.Descriptor> contents; |
| 191 | 201 |
| 192 Version get version => new Version.parse(pubspec['version']); | 202 Version get version => new Version.parse(pubspec['version']); |
| 193 | 203 |
| 194 _ServedPackage(this.pubspec, this.contents); | 204 _ServedPackage(this.pubspec, this.contents); |
| 195 } | 205 } |
| OLD | NEW |