OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 pub.source.hosted; | 5 library pub.source.hosted; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:io' as io; | 8 import 'dart:io' as io; |
9 import "dart:convert"; | 9 import "dart:convert"; |
10 | 10 |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
122 /// refers to a package with the given name from the host at the given URL. | 122 /// refers to a package with the given name from the host at the given URL. |
123 dynamic parseDescription(String containingPath, description, | 123 dynamic parseDescription(String containingPath, description, |
124 {bool fromLockFile: false}) { | 124 {bool fromLockFile: false}) { |
125 _parseDescription(description); | 125 _parseDescription(description); |
126 return description; | 126 return description; |
127 } | 127 } |
128 | 128 |
129 /// Re-downloads all packages that have been previously downloaded into the | 129 /// Re-downloads all packages that have been previously downloaded into the |
130 /// system cache from any server. | 130 /// system cache from any server. |
131 Future<Pair<int, int>> repairCachedPackages() { | 131 Future<Pair<int, int>> repairCachedPackages() { |
132 if (!dirExists(systemCacheRoot)) return new Future.value(new Pair(0, 0)); | 132 final completer0 = new Completer(); |
133 | 133 scheduleMicrotask(() { |
134 var successes = 0; | 134 try { |
135 var failures = 0; | 135 join0() { |
136 | 136 var successes = 0; |
137 return Future.wait(listDir(systemCacheRoot).map((serverDir) { | 137 var failures = 0; |
138 var url = _directoryToUrl(path.basename(serverDir)); | 138 var it0 = listDir(systemCacheRoot).iterator; |
139 var packages = _getCachedPackagesInDirectory(path.basename(serverDir)); | 139 break0() { |
140 packages.sort(Package.orderByNameAndVersion); | 140 completer0.complete(new Pair(successes, failures)); |
141 return Future.wait(packages.map((package) { | 141 } |
142 return _download( | 142 var trampoline0; |
143 url, | 143 continue0() { |
144 package.name, | 144 trampoline0 = null; |
145 package.version, | 145 if (it0.moveNext()) { |
146 package.dir).then((_) { | 146 var serverDir = it0.current; |
147 successes++; | 147 var url = _directoryToUrl(path.basename(serverDir)); |
148 }).catchError((error, stackTrace) { | 148 var packages = |
149 failures++; | 149 _getCachedPackagesInDirectory(path.basename(serverDir)); |
150 var message = | 150 packages.sort(Package.orderByNameAndVersion); |
151 "Failed to repair ${log.bold(package.name)} " "${package.version}"
; | 151 var it1 = packages.iterator; |
152 if (url != defaultUrl) message += " from $url"; | 152 break1() { |
153 log.error("$message. Error:\n$error"); | 153 trampoline0 = continue0; |
154 log.fine(stackTrace); | 154 } |
155 }); | 155 var trampoline1; |
156 })); | 156 continue1() { |
157 })).then((_) => new Pair(successes, failures)); | 157 trampoline1 = null; |
| 158 if (it1.moveNext()) { |
| 159 var package = it1.current; |
| 160 join1() { |
| 161 trampoline1 = continue1; |
| 162 } |
| 163 catch0(error, stackTrace) { |
| 164 try { |
| 165 failures++; |
| 166 var message = |
| 167 "Failed to repair ${log.bold(package.name)} " "${packa
ge.version}"; |
| 168 join2() { |
| 169 log.error("${message}. Error:\n${error}"); |
| 170 log.fine(stackTrace); |
| 171 tryDeleteEntry(package.dir); |
| 172 join1(); |
| 173 } |
| 174 if (url != defaultUrl) { |
| 175 message += " from ${url}"; |
| 176 join2(); |
| 177 } else { |
| 178 join2(); |
| 179 } |
| 180 } catch (error, stackTrace) { |
| 181 completer0.completeError(error, stackTrace); |
| 182 } |
| 183 } |
| 184 try { |
| 185 _download( |
| 186 url, |
| 187 package.name, |
| 188 package.version, |
| 189 package.dir).then((x0) { |
| 190 trampoline1 = () { |
| 191 trampoline1 = null; |
| 192 try { |
| 193 x0; |
| 194 successes++; |
| 195 join1(); |
| 196 } catch (e0, s0) { |
| 197 catch0(e0, s0); |
| 198 } |
| 199 }; |
| 200 do trampoline1(); while (trampoline1 != null); |
| 201 }, onError: catch0); |
| 202 } catch (e1, s1) { |
| 203 catch0(e1, s1); |
| 204 } |
| 205 } else { |
| 206 break1(); |
| 207 } |
| 208 } |
| 209 trampoline1 = continue1; |
| 210 do trampoline1(); while (trampoline1 != null); |
| 211 } else { |
| 212 break0(); |
| 213 } |
| 214 } |
| 215 trampoline0 = continue0; |
| 216 do trampoline0(); while (trampoline0 != null); |
| 217 } |
| 218 if (!dirExists(systemCacheRoot)) { |
| 219 completer0.complete(new Pair(0, 0)); |
| 220 } else { |
| 221 join0(); |
| 222 } |
| 223 } catch (e, s) { |
| 224 completer0.completeError(e, s); |
| 225 } |
| 226 }); |
| 227 return completer0.future; |
158 } | 228 } |
159 | 229 |
160 /// Gets all of the packages that have been downloaded into the system cache | 230 /// Gets all of the packages that have been downloaded into the system cache |
161 /// from the default server. | 231 /// from the default server. |
162 List<Package> getCachedPackages() { | 232 List<Package> getCachedPackages() { |
163 return _getCachedPackagesInDirectory(_urlToDirectory(defaultUrl)); | 233 return _getCachedPackagesInDirectory(_urlToDirectory(defaultUrl)); |
164 } | 234 } |
165 | 235 |
166 /// Gets all of the packages that have been downloaded into the system cache | 236 /// Gets all of the packages that have been downloaded into the system cache |
167 /// into [dir]. | 237 /// into [dir]. |
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
372 var name = description["name"]; | 442 var name = description["name"]; |
373 if (name is! String) { | 443 if (name is! String) { |
374 throw new FormatException("The 'name' key must have a string value."); | 444 throw new FormatException("The 'name' key must have a string value."); |
375 } | 445 } |
376 | 446 |
377 var url = description["url"]; | 447 var url = description["url"]; |
378 if (url == null) url = HostedSource.defaultUrl; | 448 if (url == null) url = HostedSource.defaultUrl; |
379 | 449 |
380 return new Pair<String, String>(name, url); | 450 return new Pair<String, String>(name, url); |
381 } | 451 } |
OLD | NEW |