Merge pull request #51025 from nextcloud/backport/50903/stable31

[stable31] fix(files_versions): Do not expire versions newer than min age
This commit is contained in:
Louis 2025-02-25 17:22:31 +01:00 committed by GitHub
commit d632679d8f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 23 additions and 1 deletions

View file

@ -98,6 +98,20 @@ class Expiration {
return $isOlderThanMax || $isMinReached;
}
/**
* Get minimal retention obligation as a timestamp
*
* @return int|false
*/
public function getMinAgeAsTimestamp() {
$minAge = false;
if ($this->isEnabled() && $this->minAge !== self::NO_OBLIGATION) {
$time = $this->timeFactory->getTime();
$minAge = $time - ($this->minAge * 86400);
}
return $minAge;
}
/**
* Get maximal retention obligation as a timestamp
*

View file

@ -696,7 +696,15 @@ class Storage {
$expiration = self::getExpiration();
if ($expiration->shouldAutoExpire()) {
[$toDelete, $size] = self::getAutoExpireList($time, $versions);
// Exclude versions that are newer than the minimum age from the auto expiration logic.
$minAge = $expiration->getMinAgeAsTimestamp();
if ($minAge !== false) {
$versionsToAutoExpire = array_filter($versions, fn ($version) => $version['version'] < $minAge);
} else {
$versionsToAutoExpire = $versions;
}
[$toDelete, $size] = self::getAutoExpireList($time, $versionsToAutoExpire);
} else {
$size = 0;
$toDelete = []; // versions we want to delete