execute method

  1. @override
Future execute(
  1. CliLogger logger,
  2. ArgResults? argResults
)
override

Implementation

@override
Future execute(CliLogger logger, ArgResults? argResults) async {
  var output = argResults!['output'] as String;

  var resolvedPath = resolvePath(output);
  if (!Directory(resolvedPath).existsSync()) {
    throw ArgParserException('Output directory $resolvedPath does not exist');
  }

  final buckets = <String, List<String>>{};
  final packageList = await fetchPackageList();
  logger.write('Fetched ${packageList.length} package names');
  for (var item in packageList) {
    buckets.putIfAbsent(item[0], () => []).add(item);
  }
  var dir = Directory(path.join(resolvedPath, '.dart-pub-indexes'));
  if (!dir.existsSync()) dir.createSync(recursive: true);
  buckets.forEach((key, value) {
    logger.success('Output letter: ${key}: ${value.length} items');
    File(path.join(dir.absolute.path, key)).writeAsStringSync(
      value.join('\n'),
    );
  });
  File(path.join(dir.absolute.path, '_all'))
      .writeAsStringSync(packageList.join(' '));
}