activeRoots method

List<String> activeRoots()

Returns the paths of all packages_configs registered in _activeRootsDir.

Implementation

List<String> activeRoots() {
  final List<String> files;
  try {
    files = listDir(_activeRootsDir, includeDirs: false, recursive: true);
  } on IOException {
    return [];
  }
  final activeRoots = <String>[];
  for (final file in files) {
    final Object? decoded;
    try {
      decoded = jsonDecode(readTextFile(file));
    } on IOException catch (e) {
      log.fine('Could not read $file $e - deleting');
      tryDeleteEntry(file);
      continue;
    } on FormatException catch (e) {
      log.fine('Could not decode $file $e - deleting');
      tryDeleteEntry(file);
      continue;
    }
    if (decoded is! Map<String, Object?>) {
      log.fine('Faulty $file - deleting');
      tryDeleteEntry(file);
      continue;
    }
    final uriText = decoded['package_config'];
    if (uriText is! String) {
      log.fine('Faulty $file - deleting');
      tryDeleteEntry(file);
      continue;
    }
    final uri = Uri.tryParse(uriText);
    if (uri == null || !uri.isScheme('file')) {
      log.fine('Faulty $file - deleting');
      tryDeleteEntry(file);
      continue;
    }
    activeRoots.add(uri.toFilePath());
  }
  return activeRoots;
}