checkoutLocal function
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);
}
}
}
}