cleanupOldVersions method

Future<int> cleanupOldVersions()

Clean up old versions, keeping versionRetentionCount most recent.

Implementation

Future<int> cleanupOldVersions() async {
  final dirs = _getBaseDirectories();
  try {
    final versionsDir = Directory(dirs.versions);
    if (!await versionsDir.exists()) return 0;

    final entries = await versionsDir.list().toList();
    if (entries.length <= versionRetentionCount) return 0;

    // Sort by modification time (newest first)
    entries.sort((a, b) {
      final aStat = a.statSync();
      final bStat = b.statSync();
      return bStat.modified.compareTo(aStat.modified);
    });

    int cleaned = 0;
    for (int i = versionRetentionCount; i < entries.length; i++) {
      final entry = entries[i];
      final version = p.basename(entry.path);

      // Don't delete locked versions
      final lockPath = p.join(dirs.locks, '$version.lock');
      if (isLockActive(lockPath)) continue;

      try {
        if (entry is File) {
          await entry.delete();
        } else if (entry is Directory) {
          await entry.delete(recursive: true);
        }
        cleaned++;
        _logDebug('Cleaned up old version: $version');
      } catch (_) {}
    }
    return cleaned;
  } catch (_) {
    return 0;
  }
}