@@ -13,6 +13,7 @@ import 'package:crypto/crypto.dart';
1313import 'package:http/http.dart' as http;
1414import 'package:meta/meta.dart' ;
1515import 'package:path/path.dart' as p;
16+ import 'package:pool/pool.dart' ;
1617import 'package:pub_semver/pub_semver.dart' ;
1718import 'package:stack_trace/stack_trace.dart' ;
1819
@@ -1348,32 +1349,40 @@ class HostedSource extends CachedSource {
13481349
13491350 packages.sort (Package .orderByNameAndVersion);
13501351
1352+ final pool = Pool (10 );
13511353 return results..addAll (
13521354 await Future .wait (
13531355 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+ });
13771386 }),
13781387 ),
13791388 );
0 commit comments