diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php index b10e9b9e41..e29dd60e33 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDatabasesWorkflow.php @@ -10,6 +10,10 @@ final class PhabricatorStorageManagementDatabasesWorkflow ->setSynopsis(pht('List Phabricator databases.')); } + protected function isReadOnlyWorkflow() { + return true; + } + public function didExecute(PhutilArgumentParser $args) { $api = $this->getAPI(); $patches = $this->getPatches(); diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php index 4933bd70bb..1aec53fd63 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementDumpWorkflow.php @@ -19,6 +19,10 @@ final class PhabricatorStorageManagementDumpWorkflow )); } + protected function isReadOnlyWorkflow() { + return true; + } + public function didExecute(PhutilArgumentParser $args) { $api = $this->getAPI(); $patches = $this->getPatches(); diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php index d65b9bd85a..c45146e6d5 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementProbeWorkflow.php @@ -10,6 +10,10 @@ final class PhabricatorStorageManagementProbeWorkflow ->setSynopsis(pht('Show approximate table sizes.')); } + protected function isReadOnlyWorkflow() { + return true; + } + public function didExecute(PhutilArgumentParser $args) { $console = PhutilConsole::getConsole(); $console->writeErr( diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php index ad4960ceba..e64242344b 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementRenamespaceWorkflow.php @@ -30,6 +30,10 @@ final class PhabricatorStorageManagementRenamespaceWorkflow )); } + protected function isReadOnlyWorkflow() { + return true; + } + public function didExecute(PhutilArgumentParser $args) { $console = PhutilConsole::getConsole(); diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php index c66fc73e98..3cf85e5c35 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementShellWorkflow.php @@ -10,9 +10,11 @@ final class PhabricatorStorageManagementShellWorkflow ->setSynopsis(pht('Launch an interactive shell.')); } + protected function isReadOnlyWorkflow() { + return true; + } + public function execute(PhutilArgumentParser $args) { - - $api = $this->getAPI(); list($host, $port) = $this->getBareHostAndPort($api->getHost()); diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php index be4f8e5434..f9e91427d4 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementStatusWorkflow.php @@ -10,6 +10,10 @@ final class PhabricatorStorageManagementStatusWorkflow ->setSynopsis(pht('Show patch application status.')); } + protected function isReadOnlyWorkflow() { + return true; + } + public function didExecute(PhutilArgumentParser $args) { $api = $this->getAPI(); $patches = $this->getPatches(); diff --git a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php index 7f969793ec..8f22caa803 100644 --- a/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php +++ b/src/infrastructure/storage/management/workflow/PhabricatorStorageManagementWorkflow.php @@ -45,19 +45,24 @@ abstract class PhabricatorStorageManagementWorkflow return $this; } + protected function isReadOnlyWorkflow() { + return false; + } public function execute(PhutilArgumentParser $args) { $this->setDryRun($args->getArg('dryrun')); $this->setForce($args->getArg('force')); - if (PhabricatorEnv::isReadOnly()) { - if ($this->isForce()) { - PhabricatorEnv::setReadOnly(false, null); - } else { - throw new PhutilArgumentUsageException( - pht( - 'Phabricator is currently in read-only mode. Use --force to '. - 'override this mode.')); + if (!$this->isReadOnlyWorkflow()) { + if (PhabricatorEnv::isReadOnly()) { + if ($this->isForce()) { + PhabricatorEnv::setReadOnly(false, null); + } else { + throw new PhutilArgumentUsageException( + pht( + 'Phabricator is currently in read-only mode. Use --force to '. + 'override this mode.')); + } } }