checkoutLocal function

Future<void> checkoutLocal(
  1. DartReposOptions options,
  2. CliLogger logger
)

Implementation

Future<void> checkoutLocal(DartReposOptions options, CliLogger logger) async {
  final checkout = options.repos;
  final results = <String, CheckoutResult>{};

  if (checkout.checkoutRoot?.isEmpty ?? true) {
    logger.warning('Invalid config:  Must have configured a root');
  } else {
    final dir = Directory(checkout.checkoutRoot!);
    if (!dir.existsSync()) {
      dir.createSync(recursive: true);
    }
    for (final entry in checkout.sources.entries) {
      final result = CheckoutResult();
      results[entry.key] = result;
      try {
        final key = entry.key;
        final value = entry.value;

        switch (value.mode ?? checkout.defaultMode) {
          case CheckoutMode.local:
            if (value.git != null) {
              final git = GitReference(
                value.git!.url,
                value.git!.ref ?? options.repos.defaultRef,
                value.git!.path,
              );
              await checkoutProject(
                key,
                git,
                dir,
                logger: logger,
                result: result,
              );
            } else {
              result.message('No git configured');
            }
            break;
          default:
            result.message(
                'Not checking out (${(value.mode ?? checkout.defaultMode).name})');
        }
        result.success = true;
      } catch (e) {
        result.error('Unexpected: $e');
      }
    }
  }
  final isError = results.values.any((element) => !element.success);
  final anySuccess = results.values.any((element) => element.success);
  if (anySuccess) {
    logger.log('Successes: ');
    for (final value in results.entries) {
      if (value.value.success) {
        final ch = logger.child(value.key);
        value.value.messages.forEach(ch.log);
      }
    }
  }

  if (isError) {
    logger.log('There were some errors');
    for (final value in results.entries) {
      if (!value.value.success) {
        final ch = logger.child(value.key);
        value.value.messages.forEach(ch.child);
      }
    }
  }
}