1
0
Fork 0

Merge pull request #3365 from WouterJ/patch-1

Updated validator
pull/3866/head
Jordi Boggiano 2015-03-23 11:56:30 +00:00
commit ab3622dff1
1 changed files with 19 additions and 8 deletions

View File

@ -329,6 +329,7 @@ EOT
return $result; return $result;
} }
$versionParser = new VersionParser();
while (null !== $package = $dialog->ask($output, $prompt)) { while (null !== $package = $dialog->ask($output, $prompt)) {
$matches = $this->findPackages($package); $matches = $this->findPackages($package);
@ -354,22 +355,32 @@ EOT
$this->getIO()->writeError($choices); $this->getIO()->writeError($choices);
$this->getIO()->writeError(''); $this->getIO()->writeError('');
$validator = function ($selection) use ($matches) { $validator = function ($selection) use ($matches, $versionParser) {
if ('' === $selection) { if ('' === $selection) {
return false; return false;
} }
if (!is_numeric($selection) && preg_match('{^\s*(\S+)\s+(\S.*)\s*$}', $selection, $matches)) { if (is_numeric($selection) && isset($matches[(int) $selection])) {
return $matches[1].' '.$matches[2]; $package = $matches[(int) $selection];
return $package['name'];
} }
if (!isset($matches[(int) $selection])) { if (preg_match('{^\s*(?P<name>[\S/]+)(?:\s+(?P<version>\S+))?\s*$}', $selection, $packageMatches)) {
throw new \Exception('Not a valid selection'); if (isset($packageMatches['version'])) {
// parsing `acme/example ~2.3`
// validate version constraint
$versionParser->parseConstraints($packageMatches['version']);
return $packageMatches['name'].' '.$packageMatches['version'];
}
// parsing `acme/example`
return $packageMatches['name'];
} }
$package = $matches[(int) $selection]; throw new \Exception('Not a valid selection');
return $package['name'];
}; };
$package = $dialog->askAndValidate($output, $dialog->getQuestion('Enter package # to add, or the complete package name if it is not listed', false, ':'), $validator, 3); $package = $dialog->askAndValidate($output, $dialog->getQuestion('Enter package # to add, or the complete package name if it is not listed', false, ':'), $validator, 3);