Merge pull request #2824 from nextcloud/ext-storage-expireversions

Properly expire ext storage versions (#26601)
This commit is contained in:
Morris Jobke 2017-03-16 23:00:55 -06:00 committed by GitHub
commit cc077e67d7
3 changed files with 29 additions and 10 deletions

View File

@ -58,8 +58,6 @@ class Expire implements ICommand {
return; return;
} }
\OC_Util::setupFS($this->user); Storage::expire($this->fileName, $this->user);
Storage::expire($this->fileName);
\OC_Util::tearDownFS();
} }
} }

View File

@ -688,30 +688,39 @@ class Storage {
} }
/** /**
* Expire versions which exceed the quota * Expire versions which exceed the quota.
* *
* @param string $filename * This will setup the filesystem for the given user but will not
* tear it down afterwards.
*
* @param string $filename path to file to expire
* @param string $uid user for which to expire the version
* @return bool|int|null * @return bool|int|null
*/ */
public static function expire($filename) { public static function expire($filename, $uid) {
$config = \OC::$server->getConfig(); $config = \OC::$server->getConfig();
$expiration = self::getExpiration(); $expiration = self::getExpiration();
if($config->getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' && $expiration->isEnabled()) { if($config->getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' && $expiration->isEnabled()) {
// get available disk space for user
$user = \OC::$server->getUserManager()->get($uid);
if (is_null($user)) {
\OCP\Util::writeLog('files_versions', 'Backends provided no user object for ' . $uid, \OCP\Util::ERROR);
throw new \OC\User\NoUserException('Backends provided no user object for ' . $uid);
}
\OC_Util::setupFS($uid);
if (!Filesystem::file_exists($filename)) { if (!Filesystem::file_exists($filename)) {
return false; return false;
} }
list($uid, $filename) = self::getUidAndFilename($filename);
if (empty($filename)) { if (empty($filename)) {
// file maybe renamed or deleted // file maybe renamed or deleted
return false; return false;
} }
$versionsFileview = new View('/'.$uid.'/files_versions'); $versionsFileview = new View('/'.$uid.'/files_versions');
// get available disk space for user
$user = \OC::$server->getUserManager()->get($uid);
$softQuota = true; $softQuota = true;
$quota = $user->getQuota(); $quota = $user->getQuota();
if ( $quota === null || $quota === 'none' ) { if ( $quota === null || $quota === 'none' ) {

View File

@ -612,7 +612,19 @@ class VersioningTest extends \Test\TestCase {
// needed to have a FS setup (the background job does this) // needed to have a FS setup (the background job does this)
\OC_Util::setupFS(self::TEST_VERSIONS_USER); \OC_Util::setupFS(self::TEST_VERSIONS_USER);
$this->assertFalse(\OCA\Files_Versions\Storage::expire('/void/unexist.txt')); $this->assertFalse(\OCA\Files_Versions\Storage::expire('/void/unexist.txt', self::TEST_VERSIONS_USER));
}
/**
* @expectedException \OC\User\NoUserException
*/
public function testExpireNonexistingUser() {
$this->logout();
// needed to have a FS setup (the background job does this)
\OC_Util::setupFS(self::TEST_VERSIONS_USER);
\OC\Files\Filesystem::file_put_contents("test.txt", "test file");
$this->assertFalse(\OCA\Files_Versions\Storage::expire('test.txt', 'unexist'));
} }
public function testRestoreSameStorage() { public function testRestoreSameStorage() {