On composer install we fix locked packages, but consider them locked for error reporting
parent
74fb313c39
commit
fdde9e5933
|
@ -45,6 +45,7 @@ class Request
|
|||
protected $requires = array();
|
||||
protected $fixedPackages = array();
|
||||
protected $lockedPackages = array();
|
||||
protected $fixedLockedPackages = array();
|
||||
protected $updateAllowList = array();
|
||||
protected $updateAllowTransitiveDependencies = false;
|
||||
|
||||
|
@ -84,6 +85,15 @@ class Request
|
|||
$this->lockedPackages[spl_object_hash($package)] = $package;
|
||||
}
|
||||
|
||||
/**
|
||||
* Mark a package fixed, but also keep track it is from the lock file (needed for composer install error reporting)
|
||||
*/
|
||||
public function fixLockedPackage(PackageInterface $package)
|
||||
{
|
||||
$this->fixedPackages[spl_object_hash($package)] = $package;
|
||||
$this->fixedLockedPackages[spl_object_hash($package)] = $package;
|
||||
}
|
||||
|
||||
public function unlockPackage(PackageInterface $package)
|
||||
{
|
||||
unset($this->lockedPackages[spl_object_hash($package)]);
|
||||
|
@ -132,7 +142,7 @@ class Request
|
|||
|
||||
public function isLockedPackage(PackageInterface $package)
|
||||
{
|
||||
return isset($this->lockedPackages[spl_object_hash($package)]);
|
||||
return isset($this->lockedPackages[spl_object_hash($package)]) || isset($this->fixedLockedPackages[spl_object_hash($package)]);
|
||||
}
|
||||
|
||||
public function getFixedOrLockedPackages()
|
||||
|
|
|
@ -199,6 +199,10 @@ abstract class Rule
|
|||
case self::RULE_FIXED:
|
||||
$package = $this->deduplicateDefaultBranchAlias($this->reasonData['package']);
|
||||
|
||||
if ($request->isLockedPackage($package)) {
|
||||
return $package->getPrettyName().' is locked to version '.$package->getPrettyVersion().' and an update of this package was not requested.';
|
||||
}
|
||||
|
||||
return $package->getPrettyName().' is present at version '.$package->getPrettyVersion() . ' and cannot be modified by Composer';
|
||||
|
||||
case self::RULE_PACKAGE_CONFLICT:
|
||||
|
|
|
@ -633,7 +633,7 @@ class Installer
|
|||
}
|
||||
|
||||
foreach ($lockedRepository->getPackages() as $package) {
|
||||
$request->fixPackage($package);
|
||||
$request->fixLockedPackage($package);
|
||||
}
|
||||
|
||||
foreach ($this->locker->getPlatformRequirements($this->devMode) as $link) {
|
||||
|
@ -651,7 +651,6 @@ class Installer
|
|||
// installing the locked packages on this platform resulted in lock modifying operations, there wasn't a conflict, but the lock file as-is seems to not work on this system
|
||||
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);
|
||||
// TODO actually display operations to explain what happened?
|
||||
return 1;
|
||||
}
|
||||
} catch (SolverProblemsException $e) {
|
||||
|
|
|
@ -21,7 +21,8 @@ Partial update from lock file should update everything to the state of the lock,
|
|||
"require": {
|
||||
"a/old": "*",
|
||||
"b/unstable": "*",
|
||||
"c/uptodate": "*"
|
||||
"c/uptodate": "*",
|
||||
"e/newreq": "*"
|
||||
}
|
||||
}
|
||||
--LOCK--
|
||||
|
@ -60,7 +61,6 @@ update b/unstable
|
|||
{ "name": "a/old", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library", "require": {"f/dependency": "1.*"} },
|
||||
{ "name": "c/uptodate", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "d/removed", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "e/newreq", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "f/dependency", "version": "1.0.0", "type": "library" }
|
||||
],
|
||||
|
@ -77,5 +77,4 @@ update b/unstable
|
|||
Upgrading a/old (0.9.0 => 1.0.0)
|
||||
Downgrading b/unstable (1.1.0-alpha => 1.0.0)
|
||||
Downgrading c/uptodate (2.0.0 => 1.0.0)
|
||||
Installing d/removed (1.0.0)
|
||||
Installing e/newreq (1.0.0)
|
||||
|
|
|
@ -62,6 +62,4 @@ Your lock file does not contain a compatible set of packages. Please run compose
|
|||
- b/requirer is locked to version 1.0.0 and an update of this package was not requested.
|
||||
- b/requirer 1.0.0 requires root/pkg ^1 -> found root/pkg[2.x-dev] but it does not match the constraint.
|
||||
|
||||
Use the option --with-all-dependencies to allow upgrades, downgrades and removals for packages currently locked to specific versions.
|
||||
|
||||
--EXPECT--
|
||||
|
|
Loading…
Reference in New Issue