aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Repair/MoveUpdaterStepFile.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Repair/MoveUpdaterStepFile.php')
-rw-r--r--lib/private/Repair/MoveUpdaterStepFile.php61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/private/Repair/MoveUpdaterStepFile.php b/lib/private/Repair/MoveUpdaterStepFile.php
new file mode 100644
index 00000000000..bb8f9d3acfc
--- /dev/null
+++ b/lib/private/Repair/MoveUpdaterStepFile.php
@@ -0,0 +1,61 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OC\Repair;
+
+use OCP\Files;
+use OCP\Migration\IOutput;
+use OCP\Migration\IRepairStep;
+
+class MoveUpdaterStepFile implements IRepairStep {
+ /** @var \OCP\IConfig */
+ protected $config;
+
+ /**
+ * @param \OCP\IConfig $config
+ */
+ public function __construct($config) {
+ $this->config = $config;
+ }
+
+ public function getName() {
+ return 'Move .step file of updater to backup location';
+ }
+
+ public function run(IOutput $output) {
+ $updateDir = $this->config->getSystemValue('updatedirectory', null) ?? $this->config->getSystemValue('datadirectory', \OC::$SERVERROOT . '/data');
+ $instanceId = $this->config->getSystemValueString('instanceid');
+
+ if (empty($instanceId)) {
+ return;
+ }
+
+ $updaterFolderPath = $updateDir . '/updater-' . $instanceId;
+ $stepFile = $updaterFolderPath . '/.step';
+ if (file_exists($stepFile)) {
+ $output->info('.step file exists');
+
+ $previousStepFile = $updaterFolderPath . '/.step-previous-update';
+
+ // cleanup
+ if (file_exists($previousStepFile)) {
+ if (Files::rmdirr($previousStepFile)) {
+ $output->info('.step-previous-update removed');
+ } else {
+ $output->info('.step-previous-update can\'t be removed - abort move of .step file');
+ return;
+ }
+ }
+
+ // move step file
+ if (rename($stepFile, $previousStepFile)) {
+ $output->info('.step file moved to .step-previous-update');
+ } else {
+ $output->warning('.step file can\'t be moved');
+ }
+ }
+ }
+}