Skip to content

Commit

Permalink
Merge pull request #50903 from nextcloud/artonge/fix/min_age_rententi…
Browse files Browse the repository at this point in the history
…on_files_versions

fix(files_versions): Do not expire versions newer than min age
  • Loading branch information
artonge authored Feb 25, 2025
2 parents 373107b + 4561a0a commit 9682ef7
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
14 changes: 14 additions & 0 deletions apps/files_versions/lib/Expiration.php
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,20 @@ public function isExpired(int $timestamp, bool $quotaExceeded = false): bool {
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
*
Expand Down
10 changes: 9 additions & 1 deletion apps/files_versions/lib/Storage.php
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,15 @@ protected static function getExpireList($time, $versions, $quotaExceeded = false
$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
Expand Down

0 comments on commit 9682ef7

Please sign in to comment.