Backport tests from #9538 and fix everything
parent
13b7527fca
commit
3242de2438
@ -0,0 +1,87 @@
|
||||
--TEST--
|
||||
Check that replacers/providers which replace/provide a root requirement do not get unlocked
|
||||
|
||||
--REQUEST--
|
||||
{
|
||||
"require": {
|
||||
"base/package": "^1.0",
|
||||
"base/package2": "^1.0",
|
||||
"indirect/replacer": "^1.0"
|
||||
},
|
||||
"locked": [
|
||||
{"name": "shared/dep", "version": "1.2.0", "id": 1},
|
||||
{"name": "shared/dep2", "version": "1.2.0", "id": 2},
|
||||
{"name": "indirect/replacer", "version": "1.2.0", "require": {"replacer/package": "^1.2", "provider/package": "^1.2"}, "id": 3},
|
||||
{"name": "replacer/package", "version": "1.2.0", "require": {"shared/dep": "^1.1"}, "replace": {"base/package": "1.2.0"}, "id": 4},
|
||||
{"name": "provider/package", "version": "1.2.0", "require": {"shared/dep2": "^1.1"}, "provide": {"base/package2": "1.2.0"}, "id": 5}
|
||||
],
|
||||
"allowList": [
|
||||
"indirect/replacer"
|
||||
],
|
||||
"allowTransitiveDepsNoRootRequire": true
|
||||
}
|
||||
|
||||
--FIXED--
|
||||
[
|
||||
]
|
||||
|
||||
--PACKAGE-REPOS--
|
||||
[
|
||||
[
|
||||
{
|
||||
"name": "base/package",
|
||||
"version": "1.0.0",
|
||||
"require": {
|
||||
"shared/dep": "^1.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "base/package2",
|
||||
"version": "1.0.0",
|
||||
"require": {
|
||||
"shared/dep2": "^1.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "shared/dep",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "shared/dep",
|
||||
"version": "1.2.0"
|
||||
},
|
||||
{
|
||||
"name": "shared/dep2",
|
||||
"version": "1.0.0"
|
||||
},
|
||||
{
|
||||
"name": "shared/dep2",
|
||||
"version": "1.2.0"
|
||||
},
|
||||
{
|
||||
"name": "indirect/replacer",
|
||||
"version": "1.2.0",
|
||||
"require": {
|
||||
"replacer/package": "^1.2"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "indirect/replacer",
|
||||
"version": "1.0.0",
|
||||
"require": {
|
||||
"replacer/package": "^1.0"
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
|
||||
--EXPECT--
|
||||
[
|
||||
1,
|
||||
4,
|
||||
5,
|
||||
"base/package2-1.0.0.0",
|
||||
"indirect/replacer-1.2.0.0",
|
||||
"indirect/replacer-1.0.0.0",
|
||||
"shared/dep2-1.2.0.0"
|
||||
]
|
@ -0,0 +1,65 @@
|
||||
--TEST--
|
||||
Ensure a partial update of a dependency updates dependencies which provide its requirements.
|
||||
|
||||
--COMPOSER--
|
||||
{
|
||||
"repositories": [
|
||||
{
|
||||
"type": "package",
|
||||
"package": [
|
||||
{"name": "root/req1", "version": "1.0.0", "require": {"virtual/pkg1": "1.*"}},
|
||||
{"name": "root/req1", "version": "2.0.0", "require": {"virtual/pkg1": "2.*"}},
|
||||
{"name": "root/req2", "version": "1.0.0", "require": {"dep/pkg1": "1.*", "dep/pkg2": "1.*"}},
|
||||
{"name": "dep/pkg1", "version": "1.0.0", "provide": {"virtual/pkg1": "1.0.0"}},
|
||||
{"name": "dep/pkg1", "version": "1.2.0", "provide": {"virtual/pkg1": "2.0.0"}},
|
||||
{"name": "dep/pkg2", "version": "1.0.0", "provide": {"virtual/pkg1": "1.0.0"}},
|
||||
{"name": "dep/pkg2", "version": "1.2.0", "provide": {"virtual/pkg1": "2.0.0"}}
|
||||
]
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"root/req1": "*",
|
||||
"root/req2": "*"
|
||||
}
|
||||
}
|
||||
--LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{"name": "dep/pkg1", "version": "1.0.0", "type": "library", "provide": {"virtual/pkg1": "1.0.0"}},
|
||||
{"name": "dep/pkg2", "version": "1.0.0", "type": "library", "provide": {"virtual/pkg1": "1.0.0"}},
|
||||
{"name": "root/req1", "version": "1.0.0", "type": "library", "require": {"virtual/pkg1": "1.*"}},
|
||||
{"name": "root/req2", "version": "1.0.0", "type": "library", "require": {"dep/pkg1": "1.*", "dep/pkg2": "1.*"}}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {},
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
||||
--RUN--
|
||||
update root/req1 --with-dependencies
|
||||
--EXPECT-LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{"name": "dep/pkg1", "version": "1.2.0", "type": "library", "provide": {"virtual/pkg1": "2.0.0"}},
|
||||
{"name": "dep/pkg2", "version": "1.2.0", "type": "library", "provide": {"virtual/pkg1": "2.0.0"}},
|
||||
{"name": "root/req1", "version": "2.0.0", "type": "library", "require": {"virtual/pkg1": "2.*"}},
|
||||
{"name": "root/req2", "version": "1.0.0", "type": "library", "require": {"dep/pkg1": "1.*", "dep/pkg2": "1.*"}}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
||||
--EXPECT--
|
||||
Installing dep/pkg1 (1.2.0)
|
||||
Installing dep/pkg2 (1.2.0)
|
||||
Installing root/req1 (2.0.0)
|
||||
Installing root/req2 (1.0.0)
|
@ -0,0 +1,62 @@
|
||||
--TEST--
|
||||
Ensure a partial update of a dependency updates dependencies which replace one of its requirements.
|
||||
|
||||
--COMPOSER--
|
||||
{
|
||||
"repositories": [
|
||||
{
|
||||
"type": "package",
|
||||
"package": [
|
||||
{"name": "root/req1", "version": "1.0.0", "require": {"replaced/pkg1": "1.*"}},
|
||||
{"name": "root/req1", "version": "2.0.0", "require": {"replaced/pkg1": "2.*"}},
|
||||
{"name": "root/req2", "version": "1.0.0", "require": {"dep/pkg1": "1.*"}},
|
||||
{"name": "replaced/pkg1", "version": "1.0.0"},
|
||||
{"name": "replaced/pkg1", "version": "2.0.0"},
|
||||
{"name": "dep/pkg1", "version": "1.0.0", "replace": {"replaced/pkg1": "1.0.0"}},
|
||||
{"name": "dep/pkg1", "version": "1.2.0", "replace": {"replaced/pkg1": "2.0.0"}}
|
||||
]
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"root/req1": "*",
|
||||
"root/req2": "*"
|
||||
}
|
||||
}
|
||||
--LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{"name": "dep/pkg1", "version": "1.0.0", "type": "library", "replace": {"replaced/pkg1": "1.0.0"}},
|
||||
{"name": "root/req1", "version": "1.0.0", "type": "library", "require": {"replaced/pkg1": "1.*"}},
|
||||
{"name": "root/req2", "version": "1.0.0", "type": "library", "require": {"dep/pkg1": "1.*"}}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {},
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
||||
--RUN--
|
||||
update root/req1 --with-dependencies
|
||||
--EXPECT-LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{"name": "dep/pkg1", "version": "1.2.0", "type": "library", "replace": {"replaced/pkg1": "2.0.0"}},
|
||||
{"name": "root/req1", "version": "2.0.0", "type": "library", "require": {"replaced/pkg1": "2.*"}},
|
||||
{"name": "root/req2", "version": "1.0.0", "type": "library", "require": {"dep/pkg1": "1.*"}}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
||||
--EXPECT--
|
||||
Installing dep/pkg1 (1.2.0)
|
||||
Installing root/req1 (2.0.0)
|
||||
Installing root/req2 (1.0.0)
|
@ -0,0 +1,133 @@
|
||||
--TEST--
|
||||
Ensure that a partial update of a dependency does not conflict if the only way to proceed is using an old locked version.
|
||||
|
||||
--COMPOSER--
|
||||
{
|
||||
"repositories": [
|
||||
{
|
||||
"type": "package",
|
||||
"package": [
|
||||
{
|
||||
"name": "update/pkg1", "version": "1.0.0", "require": {
|
||||
"dep/pkg2": "*",
|
||||
"root/pkg3": "*",
|
||||
"root/provided-pkg4": "*",
|
||||
"root/replaced-pkg8": "*"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "update/pkg1", "version": "2.0.0", "require": {
|
||||
"dep/pkg2": "*",
|
||||
"root/pkg3": "*",
|
||||
"root/provided-pkg4": "*",
|
||||
"root/replaced-pkg8": "*"
|
||||
}
|
||||
},
|
||||
{"name": "dep/pkg2", "version": "1.0.0"},
|
||||
{"name": "dep/pkg2", "version": "2.0.0"},
|
||||
{"name": "root/pkg3", "version": "1.0.0"},
|
||||
{"name": "root/pkg3", "version": "2.0.0"},
|
||||
{"name": "dep/pkg5", "version": "1.0.0", "provide": {"root/provided-pkg4": "1.0.0"}},
|
||||
{"name": "dep/pkg5", "version": "2.0.0", "provide": {"root/provided-pkg4": "2.0.0"}},
|
||||
{"name": "dep/pkg6", "version": "1.0.0", "provide": {"root/provided-pkg4": "1.0.0"}},
|
||||
{"name": "dep/pkg6", "version": "2.0.0", "provide": {"root/provided-pkg4": "2.0.0"}},
|
||||
{"name": "root/pkg7", "version": "1.0.0", "require": {"dep/pkg5": "*", "dep/pkg6": "*"}},
|
||||
{"name": "dep/pkg9", "version": "1.0.0", "replace": {"root/replaced-pkg8": "1.0.0"}},
|
||||
{"name": "dep/pkg9", "version": "2.0.0", "replace": {"root/replaced-pkg8": "2.0.0"}},
|
||||
{"name": "root/replaced-pkg8", "version": "1.0.0"},
|
||||
{"name": "root/replaced-pkg8", "version": "2.0.0"},
|
||||
{"name": "root/pkg10", "version": "1.0.0", "require": {"dep/pkg9": "*"}}
|
||||
]
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"update/pkg1": "*",
|
||||
"root/pkg3": "*",
|
||||
"root/provided-pkg4": "*",
|
||||
"root/pkg7": "*",
|
||||
"root/replaced-pkg8": "*",
|
||||
"root/pkg10": "*"
|
||||
}
|
||||
}
|
||||
--LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{
|
||||
"name": "update/pkg1", "version": "1.0.0", "type": "library", "require": {
|
||||
"dep/pkg2": "*",
|
||||
"root/pkg3": "*",
|
||||
"root/provided-pkg4": "*",
|
||||
"root/replaced-pkg8": "*"
|
||||
}
|
||||
},
|
||||
{"name": "dep/pkg2", "version": "1.0.0", "type": "library"},
|
||||
{"name": "root/pkg3", "version": "1.0.0", "type": "library"},
|
||||
{"name": "dep/pkg5", "version": "1.0.0", "type": "library", "provide": {"root/provided-pkg4": "1.0.0"}},
|
||||
{"name": "dep/pkg6", "version": "1.0.0", "type": "library", "provide": {"root/provided-pkg4": "1.0.0"}},
|
||||
{"name": "root/pkg7", "version": "1.0.0", "type": "library", "require": {"dep/pkg5": "*", "dep/pkg6": "*"}},
|
||||
{"name": "dep/pkg9", "version": "1.0.0", "type": "library", "replace": {"root/replaced-pkg8": "1.0.0"}},
|
||||
{"name": "root/pkg10", "version": "1.0.0", "type": "library", "require": {"dep/pkg9": "*"}}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": {},
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
||||
--RUN--
|
||||
update update/pkg1 --with-dependencies
|
||||
--EXPECT-LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{"name": "dep/pkg2", "version": "2.0.0", "type": "library"},
|
||||
{"name": "dep/pkg5", "version": "1.0.0", "type": "library", "provide": {"root/provided-pkg4": "1.0.0"}},
|
||||
{"name": "dep/pkg6", "version": "1.0.0", "type": "library", "provide": {"root/provided-pkg4": "1.0.0"}},
|
||||
{"name": "dep/pkg9", "version": "1.0.0", "type": "library", "replace": {"root/replaced-pkg8": "1.0.0"}},
|
||||
{"name": "root/pkg10", "version": "1.0.0", "type": "library", "require": {"dep/pkg9": "*"}},
|
||||
{"name": "root/pkg3", "version": "1.0.0", "type": "library"},
|
||||
{"name": "root/pkg7", "version": "1.0.0", "type": "library", "require": {"dep/pkg5": "*", "dep/pkg6": "*"}},
|
||||
{
|
||||
"name": "update/pkg1", "version": "2.0.0", "type": "library", "require": {
|
||||
"dep/pkg2": "*",
|
||||
"root/pkg3": "*",
|
||||
"root/provided-pkg4": "*",
|
||||
"root/replaced-pkg8": "*"
|
||||
}
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": []
|
||||
}
|
||||
--EXPECT-OUTPUT--
|
||||
Loading composer repositories with package information
|
||||
<warning>Dependency root/pkg3 is also a root requirement. Package has not been listed as an update argument, so keeping locked at old version. Use --with-all-dependencies (-W) to include root dependencies.</warning>
|
||||
<warning>Dependency dep/pkg5 (via provide of root/provided-pkg4) is also a root requirement. Package has not been listed as an update argument, so keeping locked at old version. Use --with-all-dependencies (-W) to include root dependencies.</warning>
|
||||
<warning>Dependency dep/pkg6 (via provide of root/provided-pkg4) is also a root requirement. Package has not been listed as an update argument, so keeping locked at old version. Use --with-all-dependencies (-W) to include root dependencies.</warning>
|
||||
<warning>Dependency dep/pkg9 (via replace of root/replaced-pkg8) is also a root requirement. Package has not been listed as an update argument, so keeping locked at old version. Use --with-all-dependencies (-W) to include root dependencies.</warning>
|
||||
Updating dependencies
|
||||
Lock file operations: 0 installs, 2 updates, 0 removals
|
||||
- Upgrading dep/pkg2 (1.0.0 => 2.0.0)
|
||||
- Upgrading update/pkg1 (1.0.0 => 2.0.0)
|
||||
Writing lock file
|
||||
Installing dependencies from lock file (including require-dev)
|
||||
Package operations: 8 installs, 0 updates, 0 removals
|
||||
Generating autoload files
|
||||
|
||||
--EXPECT--
|
||||
Installing dep/pkg9 (1.0.0)
|
||||
Installing root/pkg10 (1.0.0)
|
||||
Installing dep/pkg6 (1.0.0)
|
||||
Installing dep/pkg5 (1.0.0)
|
||||
Installing root/pkg7 (1.0.0)
|
||||
Installing root/pkg3 (1.0.0)
|
||||
Installing dep/pkg2 (2.0.0)
|
||||
Installing update/pkg1 (2.0.0)
|
Loading…
Reference in New Issue