execute method

Future<void> execute()

Implementation

Future<void> execute() async {
  Logger.header('Clean Maloc Project');

  // Determine target directory
  final target = targetPath ?? Directory.current.path;
  final targetDir = Directory(target);

  if (!targetDir.existsSync()) {
    Logger.error('Directory does not exist: $target');
    exit(1);
  }

  // Check if it's a valid project
  final packagesDir = Directory('${targetDir.path}/packages');
  if (!packagesDir.existsSync()) {
    Logger.error(
        'Not a valid Maloc project. "packages" directory not found.');
    Logger.info('Make sure you are in the project root directory.');
    exit(1);
  }

  Logger.step('Cleaning all packages...');
  print('');

  try {
    var successCount = 0;
    var failCount = 0;
    var totalSize = 0;

    // Clean packages directory
    await for (var entity in packagesDir.list()) {
      if (entity is Directory) {
        final pubspecFile = File('${entity.path}/pubspec.yaml');
        if (await pubspecFile.exists()) {
          final packageName = entity.path.split(Platform.pathSeparator).last;
          stdout.write('  ▸ $packageName... ');

          final size = await _cleanPackage(entity.path);

          if (size >= 0) {
            print('${Logger.green}✓${Logger.reset} (${_formatSize(size)})');
            successCount++;
            totalSize += size;
          } else {
            print('${Logger.red}✗${Logger.reset}');
            failCount++;
          }
        }
      }
    }

    // Clean CLI directory if exists
    final cliDir = Directory('${targetDir.path}/cli');
    final cliPubspec = File('${targetDir.path}/cli/pubspec.yaml');
    if (await cliDir.exists() && await cliPubspec.exists()) {
      stdout.write('  ▸ cli... ');

      final size = await _cleanPackage(cliDir.path);

      if (size >= 0) {
        print('${Logger.green}✓${Logger.reset} (${_formatSize(size)})');
        successCount++;
        totalSize += size;
      } else {
        print('${Logger.red}✗${Logger.reset}');
        failCount++;
      }
    }

    // Clean root level cache
    await _cleanRootCache(targetDir.path);

    print('');
    if (failCount == 0) {
      Logger.success(
          'All packages cleaned successfully! ($successCount packages, ${_formatSize(totalSize)} freed)');
    } else {
      Logger.warning(
          'Cleaned with errors: $successCount succeeded, $failCount failed');
      exit(1);
    }
  } catch (e) {
    Logger.error('Error during clean: $e');
    exit(1);
  }
}