Merge pull request #24212 from owncloud/no_need_to_prop_etag_on_shares

There is no need to do old etag propagation on shares
This commit is contained in:
Roeland Douma 2016-04-30 12:40:30 +02:00
commit 3a7ad79505
4 changed files with 3 additions and 104 deletions

View File

@ -36,15 +36,10 @@ use OCP\User;
class Helper {
public static function registerHooks() {
\OCP\Util::connectHook('OC_Filesystem', 'delete', '\OC\Files\Cache\Shared_Updater', 'deleteHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_rename', '\OC\Files\Cache\Shared_Updater', 'renameHook');
\OCP\Util::connectHook('OC_Filesystem', 'post_delete', '\OCA\Files_Sharing\Hooks', 'unshareChildren');
\OCP\Util::connectHook('OC_Appconfig', 'post_set_value', '\OCA\Files\Share\Maintainer', 'configChangeHook');
\OCP\Util::connectHook('OCP\Share', 'post_shared', '\OC\Files\Cache\Shared_Updater', 'postShareHook');
\OCP\Util::connectHook('OCP\Share', 'post_unshare', '\OC\Files\Cache\Shared_Updater', 'postUnshareHook');
\OCP\Util::connectHook('OCP\Share', 'post_unshareFromSelf', '\OC\Files\Cache\Shared_Updater', 'postUnshareFromSelfHook');
\OCP\Util::connectHook('OC_User', 'post_deleteUser', '\OCA\Files_Sharing\Hooks', 'deleteUser');
}

View File

@ -29,30 +29,6 @@ namespace OC\Files\Cache;
class Shared_Updater {
/**
* Walk up the users file tree and update the etags.
*
* @param string $user user id
* @param string $path share mount point path, relative to the user's "files" folder
*/
static private function correctUsersFolder($user, $path) {
// $path points to the mount point which is a virtual folder, so we start with
// the parent
$path = '/' . ltrim($path, '/');
$path = '/files' . dirname($path);
\OC\Files\Filesystem::initMountPoints($user);
$view = new \OC\Files\View('/' . $user);
if ($view->file_exists($path)) {
while ($path !== dirname($path)) {
$etag = $view->getETag($path);
$view->putFileInfo($path, array('etag' => $etag));
$path = dirname($path);
}
} else {
\OCP\Util::writeLog('files_sharing', 'can not update etags on ' . $path . ' for user ' . $user . '. Path does not exists', \OCP\Util::DEBUG);
}
}
/**
* @param array $params
*/
@ -108,78 +84,6 @@ class Shared_Updater {
}
}
/**
* @param array $params
*/
static public function deleteHook($params) {
$path = $params['path'];
}
/**
* update etags if a file was shared
* @param array $params
*/
static public function postShareHook($params) {
if ($params['itemType'] === 'folder' || $params['itemType'] === 'file') {
$shareWith = $params['shareWith'];
$shareType = $params['shareType'];
if ($shareType === \OCP\Share::SHARE_TYPE_USER) {
self::correctUsersFolder($shareWith, $params['fileTarget']);
} elseif ($shareType === \OCP\Share::SHARE_TYPE_GROUP) {
foreach (\OC_Group::usersInGroup($shareWith) as $user) {
self::correctUsersFolder($user, $params['fileTarget']);
}
}
}
}
/**
* update etags if a file was unshared
*
* @param array $params
*/
static public function postUnshareHook($params) {
// only update etags for file/folders shared to local users/groups
if (($params['itemType'] === 'file' || $params['itemType'] === 'folder') &&
$params['shareType'] !== \OCP\Share::SHARE_TYPE_LINK &&
$params['shareType'] !== \OCP\Share::SHARE_TYPE_REMOTE) {
$deletedShares = isset($params['deletedShares']) ? $params['deletedShares'] : array();
foreach ($deletedShares as $share) {
if ($share['shareType'] === \OCP\Share::SHARE_TYPE_GROUP) {
foreach (\OC_Group::usersInGroup($share['shareWith']) as $user) {
self::correctUsersFolder($user, $share['fileTarget']);
}
} else {
self::correctUsersFolder($share['shareWith'], $share['fileTarget']);
}
}
}
}
/**
* update etags if file was unshared from self
* @param array $params
*/
static public function postUnshareFromSelfHook($params) {
if ($params['itemType'] === 'file' || $params['itemType'] === 'folder') {
foreach ($params['unsharedItems'] as $item) {
if ($item['shareType'] === \OCP\Share::SHARE_TYPE_GROUP) {
foreach (\OC_Group::usersInGroup($item['shareWith']) as $user) {
self::correctUsersFolder($user, $item['fileTarget']);
}
} else {
self::correctUsersFolder($item['shareWith'], $item['fileTarget']);
}
}
}
}
/**
* clean up oc_share table from files which are no longer exists
*

View File

@ -209,7 +209,7 @@ Feature: sharing
When sending "GET" to "/apps/files_sharing/api/v1/shares"
Then the OCS status code should be "100"
And the HTTP status code should be "200"
And File "textfile0 (2).txt" should be included in the response
And File "textfile0.txt" should be included in the response
Scenario: getting all shares of a user using another user
Given user "user0" exists
@ -280,7 +280,7 @@ Feature: sharing
| share_type | 0 |
| share_with | user1 |
| file_source | A_NUMBER |
| file_target | /textfile0 (2).txt |
| file_target | /textfile0.txt |
| path | /textfile0.txt |
| permissions | 19 |
| stime | A_NUMBER |

View File

@ -303,6 +303,6 @@ class CacheJail extends CacheWrapper {
if ($sourceCache === $this) {
return $this->move($sourcePath, $targetPath);
}
return $this->cache->moveFromCache($sourceCache, $sourcePath, $targetPath);
return $this->cache->moveFromCache($sourceCache, $sourcePath, $this->getSourcePath($targetPath));
}
}