Future run()

in lib/src/batch/batch_compare_command.dart [48:99]


  Future<void> run() async {
    final packages = await _parsePackages(argResults!['packages'] as String);
    final experimentConfig =
        await _parseConfig(argResults!['experiment'] as String);
    final controlConfig = await _parseConfig(argResults!['control'] as String);
    final output = argResults!['output'] as String?;

    await withTempDir((tempDir) async {
      final experimentEnv = await _initToolEnv(experimentConfig, tempDir);
      final controlEnv = await _initToolEnv(controlConfig, tempDir);

      final experimentalOptions = await _parseOptions(experimentConfig);
      final controlOptions = await _parseOptions(controlConfig);

      var unchangedCount = 0;
      final increased = <String, int>{};
      final decreased = <String, int>{};

      for (final package in packages) {
        final expSummary = await PackageAnalyzer(experimentEnv)
            .inspectPackage(package, options: experimentalOptions);
        final controlSummary = await PackageAnalyzer(controlEnv)
            .inspectPackage(package, options: controlOptions);

        final diff = (expSummary.report?.grantedPoints ?? 0) -
            (controlSummary.report?.grantedPoints ?? 0);
        print('$package: $diff');

        if (diff == 0) {
          unchangedCount++;
        } else if (diff > 0) {
          increased[package] = diff;
        } else {
          decreased[package] = diff;
        }
      }

      final result = BatchResult(
        unchangedCount: unchangedCount,
        increased: BatchChanged(count: increased.length, packages: increased),
        decreased: BatchChanged(count: decreased.length, packages: decreased),
      );

      final formatted =
          const JsonEncoder.withIndent('  ').convert(result.toJson());
      if (output == null) {
        print(formatted);
      } else {
        await File(output).writeAsString(formatted);
      }
    });
  }