diff options
Diffstat (limited to 'lib/private/Repair/MoveUpdaterStepFile.php')
-rw-r--r-- | lib/private/Repair/MoveUpdaterStepFile.php | 61 |
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'); + } + } + } +} |