From 3f6b5e35de73fdf63f7efdefbdce50c3b60ddc49 Mon Sep 17 00:00:00 2001 From: Djamil Legato Date: Tue, 14 Oct 2014 12:45:10 -0700 Subject: [PATCH] Added new GPM version command that allows to ask for the version of the Grav instance as well as any installed package. It also supports multiple arguments and if an update is available it will be shown --- bin/gpm | 1 + .../src/Grav/Console/Gpm/VersionCommand.php | 95 +++++++++++++++++++ 2 files changed, 96 insertions(+) create mode 100644 system/src/Grav/Console/Gpm/VersionCommand.php diff --git a/bin/gpm b/bin/gpm index 9a5ad34c2..11d66ac99 100755 --- a/bin/gpm +++ b/bin/gpm @@ -34,6 +34,7 @@ $grav['themes']->init(); $app = new Application('Grav Package Manager', GRAV_VERSION); $app->addCommands(array( new \Grav\Console\Gpm\IndexCommand(), + new \Grav\Console\Gpm\VersionCommand(), new \Grav\Console\Gpm\InfoCommand(), new \Grav\Console\Gpm\InstallCommand(), new \Grav\Console\Gpm\UpdateCommand(), diff --git a/system/src/Grav/Console/Gpm/VersionCommand.php b/system/src/Grav/Console/Gpm/VersionCommand.php new file mode 100644 index 000000000..44b31efba --- /dev/null +++ b/system/src/Grav/Console/Gpm/VersionCommand.php @@ -0,0 +1,95 @@ +setName("version") + ->addOption( + 'force', + 'f', + InputOption::VALUE_NONE, + 'Force re-fetching the data from remote' + ) + ->addArgument( + 'package', + InputArgument::IS_ARRAY | InputArgument::OPTIONAL, + 'The package or packages that is desired to know the version of. By default and if not specified this would be grav' + ) + ->setDescription("Shows the version of an installed package. If available also shows pending updates.") + ->setHelp('The version command displays the current version of a package installed and, if available, the available version of pending updates'); + } + + /** + * @param InputInterface $input + * @param OutputInterface $output + * + * @return int|null|void + */ + protected function execute(InputInterface $input, OutputInterface $output) + { + $this->setupConsole($input, $output); + + $this->gpm = new GPM($this->input->getOption('force')); + $packages = $this->input->getArgument('package'); + + if (!count($packages)) { + $packages = ['grav']; + } + + foreach ($packages as $package) { + $package = strtolower($package); + $name = null; + $version = null; + $updatable = false; + + if ($package == 'grav') { + $name = 'Grav'; + $version = GRAV_VERSION; + $upgrader = new Upgrader(); + + if ($upgrader->isUpgradable()) { + $updatable = ' [upgradable: v' . $upgrader->getRemoteVersion() . ']'; + } + + } else { + if ($installed = $this->gpm->findPackage($package)) { + $name = $installed->name; + $version = $installed->version; + + if ($this->gpm->isUpdatable($package)) { + $updatable = ' [updatable: v' . $installed->available . ']'; + } + } + } + + $updatable = $updatable ?: ''; + $this->output->writeln('You are running ' . $name . ' v' . $version . '' . $updatable); + } + } +}