summaryrefslogtreecommitdiffstats
path: root/lib/private
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private')
-rw-r--r--lib/private/Files/Config/CachedMountInfo.php19
-rw-r--r--lib/private/Files/Config/LazyStorageMountInfo.php4
-rw-r--r--lib/private/Files/Config/UserMountCache.php44
-rw-r--r--lib/private/Files/Mount/MountPoint.php12
-rw-r--r--lib/private/legacy/app.php7
5 files changed, 69 insertions, 17 deletions
diff --git a/lib/private/Files/Config/CachedMountInfo.php b/lib/private/Files/Config/CachedMountInfo.php
index ce75cb66896..b81cd11a1c1 100644
--- a/lib/private/Files/Config/CachedMountInfo.php
+++ b/lib/private/Files/Config/CachedMountInfo.php
@@ -48,18 +48,25 @@ class CachedMountInfo implements ICachedMountInfo {
protected $mountPoint;
/**
+ * @var int|null
+ */
+ protected $mountId;
+
+ /**
* CachedMountInfo constructor.
*
* @param IUser $user
* @param int $storageId
* @param int $rootId
* @param string $mountPoint
+ * @param int|null $mountId
*/
- public function __construct(IUser $user, $storageId, $rootId, $mountPoint) {
+ public function __construct(IUser $user, $storageId, $rootId, $mountPoint, $mountId = null) {
$this->user = $user;
$this->storageId = $storageId;
$this->rootId = $rootId;
$this->mountPoint = $mountPoint;
+ $this->mountId = $mountId;
}
/**
@@ -104,4 +111,14 @@ class CachedMountInfo implements ICachedMountInfo {
public function getMountPoint() {
return $this->mountPoint;
}
+
+ /**
+ * Get the id of the configured mount
+ *
+ * @return int|null mount id or null if not applicable
+ * @since 9.1.0
+ */
+ public function getMountId() {
+ return $this->mountId;
+ }
}
diff --git a/lib/private/Files/Config/LazyStorageMountInfo.php b/lib/private/Files/Config/LazyStorageMountInfo.php
index 5df04c4b78e..58f288135e6 100644
--- a/lib/private/Files/Config/LazyStorageMountInfo.php
+++ b/lib/private/Files/Config/LazyStorageMountInfo.php
@@ -75,4 +75,8 @@ class LazyStorageMountInfo extends CachedMountInfo {
}
return parent::getMountPoint();
}
+
+ public function getMountId() {
+ return $this->mount->getMountId();
+ }
}
diff --git a/lib/private/Files/Config/UserMountCache.php b/lib/private/Files/Config/UserMountCache.php
index bc6ad1b34f0..d9b538a002a 100644
--- a/lib/private/Files/Config/UserMountCache.php
+++ b/lib/private/Files/Config/UserMountCache.php
@@ -112,13 +112,7 @@ class UserMountCache implements IUserMountCache {
/** @var ICachedMountInfo[] $removedMounts */
$removedMounts = array_udiff($cachedMounts, $newMounts, $mountDiff);
- $changedMounts = array_uintersect($newMounts, $cachedMounts, function (ICachedMountInfo $mount1, ICachedMountInfo $mount2) {
- // filter mounts with the same root id and different mountpoints
- if ($mount1->getRootId() !== $mount2->getRootId()) {
- return -1;
- }
- return ($mount1->getMountPoint() !== $mount2->getMountPoint()) ? 0 : 1;
- });
+ $changedMounts = $this->findChangedMounts($newMounts, $cachedMounts);
foreach ($addedMounts as $mount) {
$this->addToCache($mount);
@@ -130,8 +124,28 @@ class UserMountCache implements IUserMountCache {
unset($this->mountsForUsers[$user->getUID()][$index]);
}
foreach ($changedMounts as $mount) {
- $this->setMountPoint($mount);
+ $this->updateCachedMount($mount);
+ }
+ }
+
+ /**
+ * @param ICachedMountInfo[] $newMounts
+ * @param ICachedMountInfo[] $cachedMounts
+ * @return ICachedMountInfo[]
+ */
+ private function findChangedMounts(array $newMounts, array $cachedMounts) {
+ $changed = [];
+ foreach ($newMounts as $newMount) {
+ foreach ($cachedMounts as $cachedMount) {
+ if (
+ $newMount->getRootId() === $cachedMount->getRootId() &&
+ ($newMount->getMountPoint() !== $cachedMount->getMountPoint() || $newMount->getMountId() !== $cachedMount->getMountId())
+ ) {
+ $changed[] = $newMount;
+ }
+ }
}
+ return $changed;
}
private function addToCache(ICachedMountInfo $mount) {
@@ -140,18 +154,20 @@ class UserMountCache implements IUserMountCache {
'storage_id' => $mount->getStorageId(),
'root_id' => $mount->getRootId(),
'user_id' => $mount->getUser()->getUID(),
- 'mount_point' => $mount->getMountPoint()
+ 'mount_point' => $mount->getMountPoint(),
+ 'mount_id' => $mount->getMountId()
], ['root_id', 'user_id']);
} else {
$this->logger->error('Error getting storage info for mount at ' . $mount->getMountPoint());
}
}
- private function setMountPoint(ICachedMountInfo $mount) {
+ private function updateCachedMount(ICachedMountInfo $mount) {
$builder = $this->connection->getQueryBuilder();
$query = $builder->update('mounts')
->set('mount_point', $builder->createNamedParameter($mount->getMountPoint()))
+ ->set('mount_id', $builder->createNamedParameter($mount->getMountId(), IQueryBuilder::PARAM_INT))
->where($builder->expr()->eq('user_id', $builder->createNamedParameter($mount->getUser()->getUID())))
->andWhere($builder->expr()->eq('root_id', $builder->createNamedParameter($mount->getRootId(), IQueryBuilder::PARAM_INT)));
@@ -169,7 +185,7 @@ class UserMountCache implements IUserMountCache {
private function dbRowToMountInfo(array $row) {
$user = $this->userManager->get($row['user_id']);
- return new CachedMountInfo($user, (int)$row['storage_id'], (int)$row['root_id'], $row['mount_point']);
+ return new CachedMountInfo($user, (int)$row['storage_id'], (int)$row['root_id'], $row['mount_point'], $row['mount_id']);
}
/**
@@ -179,7 +195,7 @@ class UserMountCache implements IUserMountCache {
public function getMountsForUser(IUser $user) {
if (!isset($this->mountsForUsers[$user->getUID()])) {
$builder = $this->connection->getQueryBuilder();
- $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point')
+ $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id')
->from('mounts')
->where($builder->expr()->eq('user_id', $builder->createPositionalParameter($user->getUID())));
@@ -196,7 +212,7 @@ class UserMountCache implements IUserMountCache {
*/
public function getMountsForStorageId($numericStorageId) {
$builder = $this->connection->getQueryBuilder();
- $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point')
+ $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id')
->from('mounts')
->where($builder->expr()->eq('storage_id', $builder->createPositionalParameter($numericStorageId, IQueryBuilder::PARAM_INT)));
@@ -211,7 +227,7 @@ class UserMountCache implements IUserMountCache {
*/
public function getMountsForRootId($rootFileId) {
$builder = $this->connection->getQueryBuilder();
- $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point')
+ $query = $builder->select('storage_id', 'root_id', 'user_id', 'mount_point', 'mount_id')
->from('mounts')
->where($builder->expr()->eq('root_id', $builder->createPositionalParameter($rootFileId, IQueryBuilder::PARAM_INT)));
diff --git a/lib/private/Files/Mount/MountPoint.php b/lib/private/Files/Mount/MountPoint.php
index e11da9e5c74..f76e8151059 100644
--- a/lib/private/Files/Mount/MountPoint.php
+++ b/lib/private/Files/Mount/MountPoint.php
@@ -68,14 +68,19 @@ class MountPoint implements IMountPoint {
*/
private $invalidStorage = false;
+ /** @var int|null */
+ protected $mountId;
+
/**
* @param string|\OC\Files\Storage\Storage $storage
* @param string $mountpoint
* @param array $arguments (optional) configuration for the storage backend
* @param \OCP\Files\Storage\IStorageFactory $loader
* @param array $mountOptions mount specific options
+ * @param int|null $mountId
+ * @throws \Exception
*/
- public function __construct($storage, $mountpoint, $arguments = null, $loader = null, $mountOptions = null) {
+ public function __construct($storage, $mountpoint, $arguments = null, $loader = null, $mountOptions = null, $mountId = null) {
if (is_null($arguments)) {
$arguments = array();
}
@@ -102,6 +107,7 @@ class MountPoint implements IMountPoint {
$this->class = $storage;
$this->arguments = $arguments;
}
+ $this->mountId = $mountId;
}
/**
@@ -249,4 +255,8 @@ class MountPoint implements IMountPoint {
public function getStorageRootId() {
return (int)$this->getStorage()->getCache()->getId('');
}
+
+ public function getMountId() {
+ return $this->mountId;
+ }
}
diff --git a/lib/private/legacy/app.php b/lib/private/legacy/app.php
index 87553cca805..37ceea35ac0 100644
--- a/lib/private/legacy/app.php
+++ b/lib/private/legacy/app.php
@@ -1091,6 +1091,7 @@ class OC_App {
* @throws Exception if no app-name was specified
*/
public static function installApp($app) {
+ $appName = $app; // $app will be overwritten, preserve name for error logging
$l = \OC::$server->getL10N('core');
$config = \OC::$server->getConfig();
$ocsClient = new OCSClient(
@@ -1163,7 +1164,11 @@ class OC_App {
}
\OC_Hook::emit('OC_App', 'post_enable', array('app' => $app));
} else {
- throw new \Exception($l->t("No app name specified"));
+ if(empty($appName) ) {
+ throw new \Exception($l->t("No app name specified"));
+ } else {
+ throw new \Exception($l->t("App '%s' could not be installed!", $appName));
+ }
}
return $app;