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 |