cleanGlobalTargets method

Future<CleanResult> cleanGlobalTargets(
  1. List<CacheTarget> targets
)

Cleans a list of global cache targets.

Implementation

Future<CleanResult> cleanGlobalTargets(List<CacheTarget> targets) async {
  verboseLogger?.call('Cleaning ${targets.length} global target(s)...');

  final deletedPaths = <String>[];
  final failedPaths = <String, String>{};
  int reclaimedSize = 0;

  for (int i = 0; i < targets.length; i++) {
    final target = targets[i];
    verboseLogger?.call('  [$i/${targets.length}] ${target.type}: ${target.path}');

    // Validate that it's a global target
    if (!target.isGlobal) {
      verboseLogger?.call('    ❌ Not a global cache target');
      failedPaths[target.path] = 'Not a global cache target';
      continue;
    }

    // Validate deletion safety
    final validationError = SafetyUtils.validateDeletion(
      target,
      target.path, // For global targets, use the target path itself as root
    );
    if (validationError != null) {
      verboseLogger?.call('    ❌ Validation failed: $validationError');
      failedPaths[target.path] = validationError;
      continue;
    }

    // Attempt deletion
    verboseLogger?.call('    Deleting ${_formatSize(target.size)}...');
    final deleteStart = DateTime.now();
    final success = await _deleteTarget(target);
    final deleteTime = DateTime.now().difference(deleteStart);

    if (success) {
      deletedPaths.add(target.path);
      reclaimedSize += target.size;
      verboseLogger?.call('    ✅ Deleted in ${deleteTime.inMilliseconds / 1000.0}s');
    } else {
      verboseLogger?.call('    ❌ Failed to delete');
      failedPaths[target.path] = 'Failed to delete';
    }
  }

  verboseLogger?.call('Global targets complete: ${deletedPaths.length} deleted, ${failedPaths.length} failed, ${_formatSize(reclaimedSize)} reclaimed');

  return CleanResult(
    deletedPaths: deletedPaths,
    failedPaths: failedPaths,
    reclaimedSize: reclaimedSize,
  );
}