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

Side by Side Diff: sdk/lib/_internal/pub_generated/test/serve_packages.dart

Issue 887223007: Revert "Use native async/await support in pub." (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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;
(...skipping 30 matching lines...) Expand all
41 PackageServerBuilder _builder; 41 PackageServerBuilder _builder;
42 42
43 /// Creates an HTTP server that replicates the structure of pub.dartlang.org. 43 /// Creates an HTTP server that replicates the structure of pub.dartlang.org.
44 /// 44 ///
45 /// Calls [callback] with a [PackageServerBuilder] that's used to specify 45 /// Calls [callback] with a [PackageServerBuilder] that's used to specify
46 /// which packages to serve. 46 /// which packages to serve.
47 /// 47 ///
48 /// If [replace] is false, subsequent calls to [servePackages] will add to the 48 /// If [replace] is false, subsequent calls to [servePackages] will add to the
49 /// set of packages that are being served. Previous packages will continue to be 49 /// set of packages that are being served. Previous packages will continue to be
50 /// served. Otherwise, the previous packages will no longer be served. 50 /// served. Otherwise, the previous packages will no longer be served.
51 void servePackages(void callback(PackageServerBuilder builder), 51 void servePackages(void callback(PackageServerBuilder builder), {bool replace:
52 {bool replace: false}) { 52 false}) {
53 if (_servedPackageDir == null) { 53 if (_servedPackageDir == null) {
54 _builder = new PackageServerBuilder(); 54 _builder = new PackageServerBuilder();
55 _servedApiPackageDir = d.dir('packages', []); 55 _servedApiPackageDir = d.dir('packages', []);
56 _servedPackageDir = d.dir('packages', []); 56 _servedPackageDir = d.dir('packages', []);
57 serve([ 57 serve([d.dir('api', [_servedApiPackageDir]), _servedPackageDir]);
58 d.dir('api', [_servedApiPackageDir]),
59 _servedPackageDir
60 ]);
61 58
62 currentSchedule.onComplete.schedule(() { 59 currentSchedule.onComplete.schedule(() {
63 _builder = null; 60 _builder = null;
64 _servedApiPackageDir = null; 61 _servedApiPackageDir = null;
65 _servedPackageDir = null; 62 _servedPackageDir = null;
66 }, 'cleaning up served packages'); 63 }, 'cleaning up served packages');
67 } 64 }
68 65
69 schedule(() { 66 schedule(() {
70 if (replace) _builder = new PackageServerBuilder(); 67 if (replace) _builder = new PackageServerBuilder();
71 callback(_builder); 68 callback(_builder);
72 return _builder._await().then((resolvedPubspecs) { 69 return _builder._await().then((resolvedPubspecs) {
73 _servedApiPackageDir.contents.clear(); 70 _servedApiPackageDir.contents.clear();
74 _servedPackageDir.contents.clear(); 71 _servedPackageDir.contents.clear();
75 _builder._packages.forEach((name, versions) { 72 _builder._packages.forEach((name, versions) {
76 _servedApiPackageDir.contents.addAll([ 73 _servedApiPackageDir.contents.addAll([d.file('$name', JSON.encode({
77 d.file('$name', JSON.encode({
78 'name': name, 74 'name': name,
79 'uploaders': ['nweiz@google.com'], 75 'uploaders': ['nweiz@google.com'],
80 'versions': versions.map((version) => 76 'versions': versions.map(
81 packageVersionApiMap(version.pubspec)).toList() 77 (version) => packageVersionApiMap(version.pubspec)).toList()
82 })), 78 })), d.dir(name, [d.dir('versions', versions.map((version) {
83 d.dir(name, [ 79 return d.file(
84 d.dir('versions', versions.map((version) { 80 version.version.toString(),
85 return d.file(version.version.toString(), JSON.encode( 81 JSON.encode(packageVersionApiMap(version.pubspec, full: true)) );
86 packageVersionApiMap(version.pubspec, full: true))); 82 }))])]);
87 }))
88 ])
89 ]);
90 83
91 _servedPackageDir.contents.add(d.dir(name, [ 84 _servedPackageDir.contents.add(
92 d.dir('versions', versions.map((version) => 85 d.dir(
93 d.tar('${version.version}.tar.gz', version.contents))) 86 name,
94 ])); 87 [
88 d.dir(
89 'versions',
90 versions.map(
91 (version) => d.tar('${version.version}.tar.gz', vers ion.contents)))]));
95 }); 92 });
96 }); 93 });
97 }, 'initializing the package server'); 94 }, 'initializing the package server');
98 } 95 }
99 96
100 /// Like [servePackages], but instead creates an empty server with no packages 97 /// Like [servePackages], but instead creates an empty server with no packages
101 /// registered. 98 /// registered.
102 /// 99 ///
103 /// This will always replace a previous server. 100 /// This will always replace a previous server.
104 void serveNoPackages() => servePackages((_) {}, replace: true); 101 void serveNoPackages() => servePackages((_) {}, replace: true);
(...skipping 11 matching lines...) Expand all
116 /// Specifies that a package named [name] with [version] should be served. 113 /// Specifies that a package named [name] with [version] should be served.
117 /// 114 ///
118 /// If [deps] is passed, it's used as the "dependencies" field of the pubspec. 115 /// If [deps] is passed, it's used as the "dependencies" field of the pubspec.
119 /// If [pubspec] is passed, it's used as the rest of the pubspec. Either of 116 /// If [pubspec] is passed, it's used as the rest of the pubspec. Either of
120 /// these may recursively contain Futures. 117 /// these may recursively contain Futures.
121 /// 118 ///
122 /// If [contents] is passed, it's used as the contents of the package. By 119 /// If [contents] is passed, it's used as the contents of the package. By
123 /// default, a package just contains a dummy lib directory. 120 /// default, a package just contains a dummy lib directory.
124 void serve(String name, String version, {Map deps, Map pubspec, 121 void serve(String name, String version, {Map deps, Map pubspec,
125 Iterable<d.Descriptor> contents}) { 122 Iterable<d.Descriptor> contents}) {
126 _futures.add(Future.wait([ 123 _futures.add(
127 awaitObject(deps), 124 Future.wait([awaitObject(deps), awaitObject(pubspec)]).then((pair) {
128 awaitObject(pubspec)
129 ]).then((pair) {
130 var resolvedDeps = pair.first; 125 var resolvedDeps = pair.first;
131 var resolvedPubspec = pair.last; 126 var resolvedPubspec = pair.last;
132 127
133 var pubspecFields = { 128 var pubspecFields = {
134 "name": name, 129 "name": name,
135 "version": version 130 "version": version
136 }; 131 };
137 if (resolvedPubspec != null) pubspecFields.addAll(resolvedPubspec); 132 if (resolvedPubspec != null) pubspecFields.addAll(resolvedPubspec);
138 if (resolvedDeps != null) pubspecFields["dependencies"] = resolvedDeps; 133 if (resolvedDeps != null) pubspecFields["dependencies"] = resolvedDeps;
139 134
140 if (contents == null) contents = [d.libDir(name, "$name $version")]; 135 if (contents == null) contents = [d.libDir(name, "$name $version")];
141 contents = [d.file("pubspec.yaml", yaml(pubspecFields))] 136 contents =
142 ..addAll(contents); 137 [d.file("pubspec.yaml", yaml(pubspecFields))]..addAll(contents);
143 138
144 var packages = _packages.putIfAbsent(name, () => []); 139 var packages = _packages.putIfAbsent(name, () => []);
145 packages.add(new _ServedPackage(pubspecFields, contents)); 140 packages.add(new _ServedPackage(pubspecFields, contents));
146 })); 141 }));
147 } 142 }
148 143
149 /// Serves the versions of [package] and all its dependencies that are 144 /// Serves the versions of [package] and all its dependencies that are
150 /// currently checked into the Dart repository. 145 /// currently checked into the Dart repository.
151 void serveRepoPackage(String package) { 146 void serveRepoPackage(String package) {
152 _addPackage(name) { 147 _addPackage(name) {
153 if (_packages.containsKey(name)) return; 148 if (_packages.containsKey(name)) return;
154 _packages[name] = []; 149 _packages[name] = [];
155 150
156 var root = packagePath(name); 151 var root = packagePath(name);
157 var pubspec = new Map.from(loadYaml( 152 var pubspec =
158 readTextFile(p.join(root, 'pubspec.yaml')))); 153 new Map.from(loadYaml(readTextFile(p.join(root, 'pubspec.yaml'))));
159 154
160 // Remove any SDK constraints since we don't have a valid SDK version 155 // Remove any SDK constraints since we don't have a valid SDK version
161 // while testing. 156 // while testing.
162 pubspec.remove('environment'); 157 pubspec.remove('environment');
163 158
164 _packages[name].add(new _ServedPackage(pubspec, [ 159 _packages[name].add(
165 d.file('pubspec.yaml', yaml(pubspec)), 160 new _ServedPackage(
166 new d.DirectoryDescriptor.fromFilesystem('lib', p.join(root, 'lib')) 161 pubspec,
167 ])); 162 [
163 d.file('pubspec.yaml', yaml(pubspec)),
164 new d.DirectoryDescriptor.fromFilesystem('lib', p.join(root, ' lib'))]));
168 165
169 if (pubspec.containsKey('dependencies')) { 166 if (pubspec.containsKey('dependencies')) {
170 pubspec['dependencies'].keys.forEach(_addPackage); 167 pubspec['dependencies'].keys.forEach(_addPackage);
171 } 168 }
172 } 169 }
173 170
174 _addPackage(package); 171 _addPackage(package);
175 } 172 }
176 173
177 /// Returns a Future that completes once all the [serve] calls have been fully 174 /// Returns a Future that completes once all the [serve] calls have been fully
178 /// processed. 175 /// processed.
179 Future _await() { 176 Future _await() {
180 if (_futures.futures.isEmpty) return new Future.value(); 177 if (_futures.futures.isEmpty) return new Future.value();
181 return _futures.future.then((_) { 178 return _futures.future.then((_) {
182 _futures = new FutureGroup(); 179 _futures = new FutureGroup();
183 }); 180 });
184 } 181 }
185 } 182 }
186 183
187 /// A package that's intended to be served. 184 /// A package that's intended to be served.
188 class _ServedPackage { 185 class _ServedPackage {
189 final Map pubspec; 186 final Map pubspec;
190 final List<d.Descriptor> contents; 187 final List<d.Descriptor> contents;
191 188
192 Version get version => new Version.parse(pubspec['version']); 189 Version get version => new Version.parse(pubspec['version']);
193 190
194 _ServedPackage(this.pubspec, this.contents); 191 _ServedPackage(this.pubspec, this.contents);
195 } 192 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698