1
0
Fork 0

Add browse command to docs, add a -H flag and tweak fallback mechanism to maximize chances of opening something, refs #2445

pull/3142/head
Jordi Boggiano 2014-07-20 18:46:44 +02:00
parent e10bf5a172
commit 22afc074a9
2 changed files with 30 additions and 10 deletions

View File

@ -268,6 +268,16 @@ php composer.phar show monolog/monolog 1.0.2
* **--platform (-p):** List only platform packages (php & extensions). * **--platform (-p):** List only platform packages (php & extensions).
* **--self (-s):** List the root package info. * **--self (-s):** List the root package info.
## browse / home
The `browse` (aliased to `home`) opens a package's repository URL or homepage
in your browser.
### Options
* **--homepage (-H):** Open the homepage instead of the repository URL.
times.
## depends ## depends
The `depends` command tells you which other packages depend on a certain The `depends` command tells you which other packages depend on a certain

View File

@ -19,6 +19,7 @@ use Composer\Package\Loader\InvalidPackageException;
use Composer\Repository\CompositeRepository; use Composer\Repository\CompositeRepository;
use Composer\Repository\RepositoryInterface; use Composer\Repository\RepositoryInterface;
use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Process\Exception\InvalidArgumentException; use Symfony\Component\Process\Exception\InvalidArgumentException;
@ -36,12 +37,16 @@ class HomeCommand extends Command
$this $this
->setName('browse') ->setName('browse')
->setAliases(array('home')) ->setAliases(array('home'))
->setDescription('opens the package in your browser') ->setDescription('Opens the package\'s repository URL or homepage in your browser.')
->setDefinition(array( ->setDefinition(array(
new InputArgument('package', InputArgument::REQUIRED, 'Package to goto'), new InputArgument('package', InputArgument::REQUIRED, 'Package to browse to.'),
new InputOption('homepage', 'H', InputOption::VALUE_NONE, 'Open the homepage instead of the repository URL.'),
)) ))
->setHelp(<<<EOT ->setHelp(<<<EOT
The home command opens the package in your preferred browser The home command opens a package's repository URL or
homepage in your default browser.
To open the homepage by default, use -H or --homepage.
EOT EOT
); );
} }
@ -55,15 +60,20 @@ EOT
$package = $this->getPackage($repo, $input->getArgument('package')); $package = $this->getPackage($repo, $input->getArgument('package'));
if (!$package instanceof CompletePackageInterface) { if (!$package instanceof CompletePackageInterface) {
throw new InvalidArgumentException('package not found'); throw new InvalidArgumentException('Package not found');
} }
if (filter_var($package->getSourceUrl(), FILTER_VALIDATE_URL)) {
$support = $package->getSupport(); $support = $package->getSupport();
$url = isset($support['source']) ? $support['source'] : $package->getSourceUrl(); $url = isset($support['source']) ? $support['source'] : $package->getSourceUrl();
$this->openBrowser($url); if (!$url || $input->getOption('home')) {
} else { $url = $package->getHomepage();
throw new InvalidPackageException(array($package->getName() => 'invalid source-url'));
} }
if (!filter_var($url, FILTER_VALIDATE_URL)) {
throw new InvalidPackageException(array($package->getName() => $input->getOption('home') ? 'Invalid or missing homepage' : 'Invalid or missing repository URL'));
}
$this->openBrowser($url);
} }
/** /**