cleanupOldVersions method
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;
}
}