]> source.dussan.org Git - nextcloud-server.git/commitdiff
Adding repair step to fix missing etags - fixes #12172
authorThomas Müller <thomas.mueller@tmit.eu>
Mon, 12 Jan 2015 14:22:02 +0000 (15:22 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Mon, 12 Jan 2015 19:20:19 +0000 (20:20 +0100)
lib/private/repair.php
lib/repair/filletags.php [new file with mode: 0644]

index be607b44ed8aac52b9e31660ba670686f36da546..c4f057b53ae41f50061277e266b31d6fc4ca71aa 100644 (file)
@@ -12,6 +12,7 @@ use OC\Hooks\BasicEmitter;
 use OC\Hooks\Emitter;
 use OC\Repair\AssetCache;
 use OC\Repair\Collation;
+use OC\Repair\FillETags;
 use OC\Repair\InnoDB;
 use OC\Repair\RepairConfig;
 use OC\Repair\RepairLegacyStorages;
@@ -79,7 +80,8 @@ class Repair extends BasicEmitter {
                        new RepairMimeTypes(),
                        new RepairLegacyStorages(\OC::$server->getConfig(), \OC_DB::getConnection()),
                        new RepairConfig(),
-                       new AssetCache()
+                       new AssetCache(),
+                       new FillETags(\OC_DB::getConnection())
                );
        }
 
diff --git a/lib/repair/filletags.php b/lib/repair/filletags.php
new file mode 100644 (file)
index 0000000..b94ae38
--- /dev/null
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Copyright (c) 2015 Thomas Müller <deepdiver@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace OC\Repair;
+
+use Doctrine\DBAL\Query\QueryBuilder;
+use OC\Hooks\BasicEmitter;
+
+class FillETags extends BasicEmitter implements \OC\RepairStep {
+
+       /** @var \OC\DB\Connection */
+       protected $connection;
+
+       /**
+        * @param \OC\DB\Connection $connection
+        */
+       public function __construct($connection) {
+               $this->connection = $connection;
+       }
+
+       public function getName() {
+               return 'Generate ETags for file where no ETag is present.';
+       }
+
+       public function run() {
+               $qb = $this->connection->createQueryBuilder();
+               $qb->update('`*PREFIX*filecache`')
+                       ->set('`etag`', $qb->expr()->literal('xxx'))
+                       ->where($qb->expr()->eq('`etag`', $qb->expr()->literal('')))
+                       ->orWhere($qb->expr()->isNull('`etag`'));
+
+               $result = $qb->execute();
+               $this->emit('\OC\Repair', 'info', array("ETags have been fixed for $result files/folders."));
+       }
+}
+