Fix unlocking of replacers when a replaced package is unlocked in partial updates
parent
8386264c98
commit
13b7527fca
|
@ -535,7 +535,19 @@ class PoolBuilder
|
||||||
// as long as it was not unfixed yet
|
// as long as it was not unfixed yet
|
||||||
&& isset($this->skippedLoad[$this->skippedLoad[$name]])
|
&& isset($this->skippedLoad[$this->skippedLoad[$name]])
|
||||||
) {
|
) {
|
||||||
$this->unlockPackage($request, $this->skippedLoad[$name]);
|
$replacerName = $this->skippedLoad[$name];
|
||||||
|
$this->unlockPackage($request, $replacerName);
|
||||||
|
|
||||||
|
if ($this->isRootRequire($request, $replacerName)) {
|
||||||
|
$this->markPackageNameForLoading($request, $replacerName, new MatchAllConstraint);
|
||||||
|
} else {
|
||||||
|
foreach ($this->packages as $loadedPackage) {
|
||||||
|
$requires = $loadedPackage->getRequires();
|
||||||
|
if (isset($requires[$replacerName])) {
|
||||||
|
$this->markPackageNameForLoading($request, $replacerName, $requires[$replacerName]->getConstraint());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($this->skippedLoad[$name], $this->loadedPackages[$name], $this->maxExtendedReqs[$name]);
|
unset($this->skippedLoad[$name], $this->loadedPackages[$name], $this->maxExtendedReqs[$name]);
|
||||||
|
@ -551,11 +563,14 @@ class PoolBuilder
|
||||||
// also loaded, as they were previously ignored because the locked (now unlocked) package already
|
// also loaded, as they were previously ignored because the locked (now unlocked) package already
|
||||||
// satisfied their requirements
|
// satisfied their requirements
|
||||||
foreach ($request->getFixedOrLockedPackages() as $fixedOrLockedPackage) {
|
foreach ($request->getFixedOrLockedPackages() as $fixedOrLockedPackage) {
|
||||||
if ($fixedOrLockedPackage !== $lockedPackage && isset($this->skippedLoad[$fixedOrLockedPackage->getName()])) {
|
if ($fixedOrLockedPackage === $lockedPackage) {
|
||||||
foreach ($fixedOrLockedPackage->getRequires() as $requireLink) {
|
continue;
|
||||||
if ($requireLink->getTarget() === $lockedPackage->getName()) {
|
|
||||||
$this->markPackageNameForLoading($request, $lockedPackage->getName(), $requireLink->getConstraint());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isset($this->skippedLoad[$fixedOrLockedPackage->getName()])) {
|
||||||
|
$requires = $fixedOrLockedPackage->getRequires();
|
||||||
|
if (isset($requires[$lockedPackage->getName()])) {
|
||||||
|
$this->markPackageNameForLoading($request, $lockedPackage->getName(), $requires[$lockedPackage->getName()]->getConstraint());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
--TEST--
|
||||||
|
Partially updating with deps a root requirement which depends on packages should load all available versions for the path repo packages' dependencies.
|
||||||
|
|
||||||
|
--REQUEST--
|
||||||
|
{
|
||||||
|
"require": {
|
||||||
|
"root/update": "*",
|
||||||
|
"root-required/replacer": "*",
|
||||||
|
"replacer/pkg": "*",
|
||||||
|
"root/noupdate": "*"
|
||||||
|
},
|
||||||
|
"locked": [
|
||||||
|
{
|
||||||
|
"name": "replacer/pkg",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"require": {
|
||||||
|
"root-required/replacer-replaced": "1.*",
|
||||||
|
"transitive/dep-of-replacer": "1.*",
|
||||||
|
"transitive/replacer-replaced": "1.*"
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"replaced/pkg": "1.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pkg/with-replaced-deps",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"require": {
|
||||||
|
"transitive/dep": "1.*",
|
||||||
|
"root-required/replacer-replaced": "1.*",
|
||||||
|
"transitive/replacer-replaced": "1.*"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{"name": "root/update", "version": "1.0.1", "require": {"pkg/with-replaced-deps": ">=1.0.1", "replaced/pkg": "*"}},
|
||||||
|
{"name": "root/noupdate", "version": "1.0.1", "require": {"transitive/replacer": "^2"}},
|
||||||
|
{"name": "transitive/dep", "version": "1.0.0"},
|
||||||
|
{"name": "root-required/replacer", "version": "1.0.0", "replace": {"root-required/replacer-replaced": "1.0.0"}},
|
||||||
|
{"name": "transitive/dep-of-replacer", "version": "1.0.0"},
|
||||||
|
{"name": "transitive/replacer", "version": "1.0.0", "replace": {"transitive/replacer-replaced": "1.0.0"}}
|
||||||
|
],
|
||||||
|
"allowList": [
|
||||||
|
"root/update"
|
||||||
|
],
|
||||||
|
"allowTransitiveDeps": true
|
||||||
|
}
|
||||||
|
|
||||||
|
--FIXED--
|
||||||
|
[
|
||||||
|
]
|
||||||
|
|
||||||
|
--PACKAGE-REPOS--
|
||||||
|
[
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"name": "replacer/pkg",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"require": {
|
||||||
|
"root-required/replacer-replaced": ">=1.0.3",
|
||||||
|
"transitive/dep-of-replacer": "2.*",
|
||||||
|
"transitive/replacer-replaced": "2.*"
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"replaced/pkg": "2.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "pkg/with-replaced-deps",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"require": {
|
||||||
|
"transitive/dep": "2.*",
|
||||||
|
"root-required/replacer-replaced": "2.*",
|
||||||
|
"transitive/replacer-replaced": ">=1.0.3"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{"name": "root/update", "version": "1.0.4", "require": {"pkg/with-replaced-deps": ">=1.0.1", "replaced/pkg": "*"}},
|
||||||
|
{"name": "root/noupdate", "version": "1.0.1", "require": {"transitive/replacer": "^2"}},
|
||||||
|
{"name": "transitive/dep", "version": "1.0.0"},
|
||||||
|
{"name": "transitive/dep", "version": "2.0.2"},
|
||||||
|
{"name": "root-required/replacer", "version": "1.0.0", "replace": {"root-required/replacer-replaced": "1.0.0"}},
|
||||||
|
{"name": "root-required/replacer", "version": "1.0.3", "replace": {"root-required/replacer-replaced": "1.0.3"}},
|
||||||
|
{"name": "root-required/replacer", "version": "2.0.4", "replace": {"root-required/replacer-replaced": "2.0.4"}},
|
||||||
|
{"name": "transitive/dep-of-replacer", "version": "1.0.0"},
|
||||||
|
{"name": "transitive/dep-of-replacer", "version": "2.0.2"},
|
||||||
|
{"name": "transitive/replacer", "version": "1.0.0", "replace": {"transitive/replacer-replaced": "1.0.0"}},
|
||||||
|
{"name": "transitive/replacer", "version": "1.0.3", "replace": {"transitive/replacer-replaced": "1.0.3"}},
|
||||||
|
{"name": "transitive/replacer", "version": "2.0.4", "replace": {"transitive/replacer-replaced": "2.0.4"}}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
[
|
||||||
|
"root/noupdate-1.0.1.0 (locked)",
|
||||||
|
"root/update-1.0.4.0",
|
||||||
|
"replacer/pkg-2.0.0.0",
|
||||||
|
"pkg/with-replaced-deps-2.0.0.0",
|
||||||
|
"transitive/dep-2.0.2.0",
|
||||||
|
"root-required/replacer-1.0.0.0",
|
||||||
|
"root-required/replacer-1.0.3.0",
|
||||||
|
"root-required/replacer-2.0.4.0",
|
||||||
|
"transitive/dep-of-replacer-2.0.2.0",
|
||||||
|
"transitive/replacer-2.0.4.0"
|
||||||
|
]
|
Loading…
Reference in New Issue