@@ -13,6 +13,7 @@ import 'package:crypto/crypto.dart';
13
13
import 'package:http/http.dart' as http;
14
14
import 'package:meta/meta.dart' ;
15
15
import 'package:path/path.dart' as p;
16
+ import 'package:pool/pool.dart' ;
16
17
import 'package:pub_semver/pub_semver.dart' ;
17
18
import 'package:stack_trace/stack_trace.dart' ;
18
19
@@ -1348,32 +1349,40 @@ class HostedSource extends CachedSource {
1348
1349
1349
1350
packages.sort (Package .orderByNameAndVersion);
1350
1351
1352
+ final pool = Pool (10 );
1351
1353
return results..addAll (
1352
1354
await Future .wait (
1353
1355
packages.map ((package) async {
1354
- final id = PackageId (
1355
- package.name,
1356
- package.version,
1357
- ResolvedHostedDescription (
1358
- HostedDescription ._(package.name, url),
1359
- sha256: null ,
1360
- ),
1361
- );
1362
- try {
1363
- deleteEntry (package.dir);
1364
- await _download (id, package.dir, cache);
1365
- return RepairResult (id.name, id.version, this , success: true );
1366
- } catch (error, stackTrace) {
1367
- var message =
1368
- 'Failed to repair ${log .bold (package .name )} '
1369
- '${package .version }' ;
1370
- if (url != defaultUrl) message += ' from $url ' ;
1371
- log.error ('$message . Error:\n $error ' );
1372
- log.fine (stackTrace.toString ());
1373
-
1374
- tryDeleteEntry (package.dir);
1375
- return RepairResult (id.name, id.version, this , success: false );
1376
- }
1356
+ return await pool.withResource (() async {
1357
+ final id = PackageId (
1358
+ package.name,
1359
+ package.version,
1360
+ ResolvedHostedDescription (
1361
+ HostedDescription ._(package.name, url),
1362
+ sha256: null ,
1363
+ ),
1364
+ );
1365
+ try {
1366
+ deleteEntry (package.dir);
1367
+ await _download (id, package.dir, cache);
1368
+ return RepairResult (id.name, id.version, this , success: true );
1369
+ } catch (error, stackTrace) {
1370
+ var message =
1371
+ 'Failed to repair ${log .bold (package .name )} '
1372
+ '${package .version }' ;
1373
+ if (url != defaultUrl) message += ' from $url ' ;
1374
+ log.error ('$message . Error:\n $error ' );
1375
+ log.fine (stackTrace.toString ());
1376
+
1377
+ tryDeleteEntry (package.dir);
1378
+ return RepairResult (
1379
+ id.name,
1380
+ id.version,
1381
+ this ,
1382
+ success: false ,
1383
+ );
1384
+ }
1385
+ });
1377
1386
}),
1378
1387
),
1379
1388
);
0 commit comments