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

Unified Diff: sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart

Issue 745153002: Make pub's binstubs resilient to changes in snapshot format. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Code review changes Created 6 years 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_generated/lib/src/source/hosted.dart
diff --git a/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart b/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart
index 6b47d1f177a9e9b2b4774a20116a1d51c65c4eb8..3f02137024d4c84459ff8a28c62d743270b83a96 100644
--- a/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart
+++ b/sdk/lib/_internal/pub_generated/lib/src/source/hosted.dart
@@ -129,32 +129,102 @@ class HostedSource extends CachedSource {
/// Re-downloads all packages that have been previously downloaded into the
/// system cache from any server.
Future<Pair<int, int>> repairCachedPackages() {
- if (!dirExists(systemCacheRoot)) return new Future.value(new Pair(0, 0));
-
- var successes = 0;
- var failures = 0;
-
- return Future.wait(listDir(systemCacheRoot).map((serverDir) {
- var url = _directoryToUrl(path.basename(serverDir));
- var packages = _getCachedPackagesInDirectory(path.basename(serverDir));
- packages.sort(Package.orderByNameAndVersion);
- return Future.wait(packages.map((package) {
- return _download(
- url,
- package.name,
- package.version,
- package.dir).then((_) {
- successes++;
- }).catchError((error, stackTrace) {
- failures++;
- var message =
- "Failed to repair ${log.bold(package.name)} " "${package.version}";
- if (url != defaultUrl) message += " from $url";
- log.error("$message. Error:\n$error");
- log.fine(stackTrace);
- });
- }));
- })).then((_) => new Pair(successes, failures));
+ final completer0 = new Completer();
+ scheduleMicrotask(() {
+ try {
+ join0() {
+ var successes = 0;
+ var failures = 0;
+ var it0 = listDir(systemCacheRoot).iterator;
+ break0() {
+ completer0.complete(new Pair(successes, failures));
+ }
+ var trampoline0;
+ continue0() {
+ trampoline0 = null;
+ if (it0.moveNext()) {
+ var serverDir = it0.current;
+ var url = _directoryToUrl(path.basename(serverDir));
+ var packages =
+ _getCachedPackagesInDirectory(path.basename(serverDir));
+ packages.sort(Package.orderByNameAndVersion);
+ var it1 = packages.iterator;
+ break1() {
+ trampoline0 = continue0;
+ }
+ var trampoline1;
+ continue1() {
+ trampoline1 = null;
+ if (it1.moveNext()) {
+ var package = it1.current;
+ join1() {
+ trampoline1 = continue1;
+ }
+ catch0(error, stackTrace) {
+ try {
+ failures++;
+ var message =
+ "Failed to repair ${log.bold(package.name)} " "${package.version}";
+ join2() {
+ log.error("${message}. Error:\n${error}");
+ log.fine(stackTrace);
+ tryDeleteEntry(package.dir);
+ join1();
+ }
+ if (url != defaultUrl) {
+ message += " from ${url}";
+ join2();
+ } else {
+ join2();
+ }
+ } catch (error, stackTrace) {
+ completer0.completeError(error, stackTrace);
+ }
+ }
+ try {
+ _download(
+ url,
+ package.name,
+ package.version,
+ package.dir).then((x0) {
+ trampoline1 = () {
+ trampoline1 = null;
+ try {
+ x0;
+ successes++;
+ join1();
+ } catch (e0, s0) {
+ catch0(e0, s0);
+ }
+ };
+ do trampoline1(); while (trampoline1 != null);
+ }, onError: catch0);
+ } catch (e1, s1) {
+ catch0(e1, s1);
+ }
+ } else {
+ break1();
+ }
+ }
+ trampoline1 = continue1;
+ do trampoline1(); while (trampoline1 != null);
+ } else {
+ break0();
+ }
+ }
+ trampoline0 = continue0;
+ do trampoline0(); while (trampoline0 != null);
+ }
+ if (!dirExists(systemCacheRoot)) {
+ completer0.complete(new Pair(0, 0));
+ } else {
+ join0();
+ }
+ } catch (e, s) {
+ completer0.completeError(e, s);
+ }
+ });
+ return completer0.future;
}
/// Gets all of the packages that have been downloaded into the system cache

Powered by Google App Engine
This is Rietveld 408576698