Add constants to describe error codes from Installer::run

main
Jordi Boggiano 3 years ago
parent 79727d35c4
commit 260ac0011c
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC

@ -21,6 +21,8 @@ use Composer\Package\PackageInterface;
*/ */
class SolverProblemsException extends \RuntimeException class SolverProblemsException extends \RuntimeException
{ {
const ERROR_DEPENDENCY_RESOLUTION_FAILED = 2;
/** @var Problem[] */ /** @var Problem[] */
protected $problems; protected $problems;
/** @var array<Rule[]> */ /** @var array<Rule[]> */
@ -35,7 +37,7 @@ class SolverProblemsException extends \RuntimeException
$this->problems = $problems; $this->problems = $problems;
$this->learnedPool = $learnedPool; $this->learnedPool = $learnedPool;
parent::__construct('Failed resolving dependencies with '.count($problems).' problems, call getPrettyString to get formatted details', 2); parent::__construct('Failed resolving dependencies with '.count($problems).' problems, call getPrettyString to get formatted details', self::ERROR_DEPENDENCY_RESOLUTION_FAILED);
} }
public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, $isVerbose, $isDevExtraction = false) public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, $isVerbose, $isDevExtraction = false)

@ -66,6 +66,13 @@ use Composer\Util\Platform;
*/ */
class Installer class Installer
{ {
const ERROR_NONE = 0; // no error/success state
const ERROR_GENERIC_FAILURE = 1;
const ERROR_NO_LOCK_FILE_FOR_PARTIAL_UPDATE = 3;
const ERROR_LOCK_FILE_INVALID = 4;
// used/declared in SolverProblemsException, carried over here for completeness
const ERROR_DEPENDENCY_RESOLUTION_FAILED = 2;
/** /**
* @var IOInterface * @var IOInterface
*/ */
@ -209,6 +216,7 @@ class Installer
* *
* @throws \Exception * @throws \Exception
* @return int 0 on success or a positive error code on failure * @return int 0 on success or a positive error code on failure
* @phpstan-return self::ERROR_*
*/ */
public function run() public function run()
{ {
@ -387,7 +395,7 @@ class Installer
if (($this->updateAllowList || $this->updateMirrors) && !$lockedRepository) { if (($this->updateAllowList || $this->updateMirrors) && !$lockedRepository) {
$this->io->writeError('<error>Cannot update ' . ($this->updateMirrors ? 'lock file information' : 'only a partial set of packages') . ' without a lock file present. Run `composer update` to generate a lock file.</error>', true, IOInterface::QUIET); $this->io->writeError('<error>Cannot update ' . ($this->updateMirrors ? 'lock file information' : 'only a partial set of packages') . ' without a lock file present. Run `composer update` to generate a lock file.</error>', true, IOInterface::QUIET);
return 1; return self::ERROR_NO_LOCK_FILE_FOR_PARTIAL_UPDATE;
} }
$this->io->writeError('<info>Loading composer repositories with package information</info>'); $this->io->writeError('<info>Loading composer repositories with package information</info>');
@ -434,7 +442,7 @@ class Installer
$ghe = new GithubActionError($this->io); $ghe = new GithubActionError($this->io);
$ghe->emit($err."\n".$prettyProblem); $ghe->emit($err."\n".$prettyProblem);
return max(1, $e->getCode()); return max(self::ERROR_GENERIC_FAILURE, $e->getCode());
} }
$this->io->writeError("Analyzed ".count($pool)." packages to resolve dependencies", true, IOInterface::VERBOSE); $this->io->writeError("Analyzed ".count($pool)." packages to resolve dependencies", true, IOInterface::VERBOSE);
@ -603,7 +611,7 @@ class Installer
$ghe = new GithubActionError($this->io); $ghe = new GithubActionError($this->io);
$ghe->emit($err."\n".$prettyProblem); $ghe->emit($err."\n".$prettyProblem);
return max(1, $e->getCode()); return max(self::ERROR_GENERIC_FAILURE, $e->getCode());
} }
$lockTransaction->setNonDevPackages($nonDevLockTransaction); $lockTransaction->setNonDevPackages($nonDevLockTransaction);
@ -661,7 +669,7 @@ class Installer
if (0 !== count($lockTransaction->getOperations())) { if (0 !== count($lockTransaction->getOperations())) {
$this->io->writeError('<error>Your lock file cannot be installed on this system without changes. Please run composer update.</error>', true, IOInterface::QUIET); $this->io->writeError('<error>Your lock file cannot be installed on this system without changes. Please run composer update.</error>', true, IOInterface::QUIET);
return 1; return self::ERROR_LOCK_FILE_INVALID;
} }
} catch (SolverProblemsException $e) { } catch (SolverProblemsException $e) {
$err = 'Your lock file does not contain a compatible set of packages. Please run composer update.'; $err = 'Your lock file does not contain a compatible set of packages. Please run composer update.';
@ -673,7 +681,7 @@ class Installer
$ghe = new GithubActionError($this->io); $ghe = new GithubActionError($this->io);
$ghe->emit($err."\n".$prettyProblem); $ghe->emit($err."\n".$prettyProblem);
return max(1, $e->getCode()); return max(self::ERROR_GENERIC_FAILURE, $e->getCode());
} }
} }

@ -33,5 +33,5 @@ update b/unstable
--EXPECT-OUTPUT-- --EXPECT-OUTPUT--
Cannot update only a partial set of packages without a lock file present. Run `composer update` to generate a lock file. Cannot update only a partial set of packages without a lock file present. Run `composer update` to generate a lock file.
--EXPECT-EXIT-CODE-- --EXPECT-EXIT-CODE--
1 3
--EXPECT-- --EXPECT--

Loading…
Cancel
Save