diff --git a/apps/files_versions/lib/Storage.php b/apps/files_versions/lib/Storage.php index fe9f91534fa01..fa8a42902256a 100644 --- a/apps/files_versions/lib/Storage.php +++ b/apps/files_versions/lib/Storage.php @@ -181,6 +181,10 @@ public static function store($filename) { return false; } + if (self::ignoredByHiddenFile($file)) { + return false; + } + $mount = $file->getMountPoint(); if ($mount instanceof SharedMount) { $ownerFolder = $rootFolder->getUserFolder($mount->getShare()->getShareOwner()); @@ -1007,4 +1011,34 @@ protected static function getExpiration() { } return self::$application->getContainer()->get(Expiration::class); } + + /** + * returns TRUE if a file named '.noversion' is found + * in the current folder or in a parent folder + */ + private static function ignoredByHiddenFile(Node $node): bool { + if (!$node instanceof Folder) { + try { + $node = $node->getParent(); + } catch (NotFoundException $e) { + \OCP\Server::get(LoggerInterface::class)->warning('parent folder must exist', ['exception' => $e]); + return false; + } + } + + $i = 0; + while ($i++ < 30) { + if ($node->nodeExists('.noversion')) { + return true; + } + + try { + $node = $node->getParent(); + } catch (NotFoundException) { + break; + } + } + + return false; + } }