aboutsummaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2018-11-02 00:41:59 +0100
committerGitHub <noreply@github.com>2018-11-02 00:41:59 +0100
commit8bfbefa11734e99d0550eb679efccb7773b4a1d7 (patch)
tree4e544cf2c3c1a2f53e1f67090e804e32fe3cc784 /core
parent6702576dfc5e64834d9c907a57e31e4264b2502d (diff)
parent290ede1292a7d995a526ed0d510df67c2751097d (diff)
downloadnextcloud-server-8bfbefa11734e99d0550eb679efccb7773b4a1d7.tar.gz
nextcloud-server-8bfbefa11734e99d0550eb679efccb7773b4a1d7.zip
Merge pull request #11053 from nextcloud/occ-app-update-command
occ app update command
Diffstat (limited to 'core')
-rw-r--r--core/Command/App/Update.php125
-rw-r--r--core/register_command.php1
2 files changed, 126 insertions, 0 deletions
diff --git a/core/Command/App/Update.php b/core/Command/App/Update.php
new file mode 100644
index 00000000000..c571a9a1624
--- /dev/null
+++ b/core/Command/App/Update.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * @copyright Copyright (c) 2018, michag86 (michag86@arcor.de)
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+namespace OC\Core\Command\App;
+
+use OCP\App\IAppManager;
+use OC\Installer;
+use OCP\ILogger;
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+
+class Update extends Command {
+
+ /** @var IAppManager */
+ protected $manager;
+ /** @var Installer */
+ private $installer;
+ /** @var ILogger */
+ private $logger;
+
+ /**
+ * @param IAppManager $manager
+ * @param Installer $installer
+ */
+ public function __construct(IAppManager $manager, Installer $installer, ILogger $logger) {
+ parent::__construct();
+ $this->manager = $manager;
+ $this->installer = $installer;
+ $this->logger = $logger;
+ }
+
+ protected function configure() {
+ $this
+ ->setName('app:update')
+ ->setDescription('update an app or all apps')
+ ->addArgument(
+ 'app-id',
+ InputArgument::OPTIONAL,
+ 'update the specified app'
+ )
+ ->addOption(
+ 'all',
+ null,
+ InputOption::VALUE_NONE,
+ 'update all updatable apps'
+ )
+ ->addOption(
+ 'showonly',
+ null,
+ InputOption::VALUE_NONE,
+ 'show update(s) without updating'
+ )
+
+ ;
+ }
+
+ protected function execute(InputInterface $input, OutputInterface $output) {
+ $singleAppId = $input->getArgument('app-id');
+
+ if ($singleAppId) {
+ $apps = array($singleAppId);
+ try {
+ $this->manager->getAppPath($singleAppId);
+ } catch (\OCP\App\AppPathNotFoundException $e) {
+ $output->writeln($singleAppId . ' not installed');
+ return 1;
+ }
+
+ } else if ($input->getOption('all') || $input->getOption('showonly')) {
+ $apps = \OC_App::getAllApps();
+ } else {
+ $output->writeln("<error>Please specify an app to update or \"--all\" to update all updatable apps\"</error>");
+ return 1;
+ }
+
+ $return = 0;
+ foreach ($apps as $appId) {
+ $newVersion = $this->installer->isUpdateAvailable($appId);
+ if ($newVersion) {
+ $output->writeln($appId . ' new version available: ' . $newVersion);
+
+ if (!$input->getOption('showonly')) {
+ try {
+ $result = $this->installer->updateAppstoreApp($appId);
+ } catch(\Exception $e) {
+ $this->logger->logException($e, ['message' => 'Failure during update of app "' . $appId . '"','app' => 'app:update']);
+ $output->writeln('Error: ' . $e->getMessage());
+ $return = 1;
+ }
+
+ if ($result === false) {
+ $output->writeln($appId . ' couldn\'t be updated');
+ $return = 1;
+ } else if($result === true) {
+ $output->writeln($appId . ' updated');
+ }
+ }
+ }
+ }
+
+ return $return;
+ }
+}
+
diff --git a/core/register_command.php b/core/register_command.php
index 9c3591c8afe..fb029f1be4a 100644
--- a/core/register_command.php
+++ b/core/register_command.php
@@ -66,6 +66,7 @@ if (\OC::$server->getConfig()->getSystemValue('installed', false)) {
$application->add(new OC\Core\Command\App\GetPath());
$application->add(new OC\Core\Command\App\ListApps(\OC::$server->getAppManager()));
$application->add(new OC\Core\Command\App\Remove(\OC::$server->getAppManager(), \OC::$server->query(\OC\Installer::class), \OC::$server->getLogger()));
+ $application->add(\OC::$server->query(\OC\Core\Command\App\Update::class));
$application->add(\OC::$server->query(\OC\Core\Command\TwoFactorAuth\Cleanup::class));
$application->add(\OC::$server->query(\OC\Core\Command\TwoFactorAuth\Enforce::class));