Abandoned packages support
Added warning to the installer process. If any installed packages are flagged, the user will get a warning at the end of the install/update process.pull/3325/head
parent
5ed01fb60d
commit
f9f2bbac59
|
@ -31,6 +31,7 @@ use Composer\Installer\NoopInstaller;
|
|||
use Composer\IO\IOInterface;
|
||||
use Composer\Json\JsonFile;
|
||||
use Composer\Package\AliasPackage;
|
||||
use Composer\Package\CompletePackage;
|
||||
use Composer\Package\Link;
|
||||
use Composer\Package\LinkConstraint\VersionConstraint;
|
||||
use Composer\Package\Locker;
|
||||
|
@ -239,6 +240,25 @@ class Installer
|
|||
}
|
||||
}
|
||||
|
||||
# Find abandoned packages and warn user
|
||||
foreach ($localRepo->getPackages() as $package) {
|
||||
if (!$package instanceof CompletePackage || !$package->isAbandoned()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$replacement = (is_string($package->getReplacementPackage()))
|
||||
? 'Use ' . $package->getReplacementPackage() . ' instead'
|
||||
: 'No replacement was suggested';
|
||||
|
||||
$this->io->write(
|
||||
sprintf(
|
||||
"<error>Package %s is abandoned, you should avoid using it. %s.</error>",
|
||||
$package->getPrettyName(),
|
||||
$replacement
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
if (!$this->dryRun) {
|
||||
// write lock
|
||||
if ($this->update || !$this->locker->isLocked()) {
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
--TEST--
|
||||
Abandoned packages are flagged
|
||||
--COMPOSER--
|
||||
{
|
||||
"repositories": [
|
||||
{
|
||||
"type": "package",
|
||||
"package": [
|
||||
{ "name": "a/a", "version": "1.0.0", "abandoned": true }
|
||||
]
|
||||
},
|
||||
{
|
||||
"type": "package",
|
||||
"package": [
|
||||
{ "name": "c/c", "version": "1.0.0", "abandoned": "b/b" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"a/a": "1.0.0",
|
||||
"c/c": "1.0.0"
|
||||
}
|
||||
}
|
||||
--RUN--
|
||||
install
|
||||
--EXPECT-OUTPUT--
|
||||
<info>Loading composer repositories with package information</info>
|
||||
<info>Installing dependencies (including require-dev)</info>
|
||||
<error>Package a/a is abandoned, you should avoid using it. No replacement was suggested.</error>
|
||||
<error>Package c/c is abandoned, you should avoid using it. Use b/b instead.</error>
|
||||
<info>Writing lock file</info>
|
||||
<info>Generating autoload files</info>
|
||||
|
||||
--EXPECT--
|
||||
Installing a/a (1.0.0)
|
||||
Installing c/c (1.0.0)
|
|
@ -38,7 +38,8 @@ install --prefer-dist
|
|||
"reference": "459720ff3b74ee0c0d159277c6f2f5df89d8a4f6",
|
||||
"shasum": null
|
||||
},
|
||||
"type": "library"
|
||||
"type": "library",
|
||||
"abandoned": false
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
|
|
@ -50,9 +50,9 @@ update c/uptodate
|
|||
--EXPECT-LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{ "name": "a/old", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "c/uptodate", "version": "2.0.0", "type": "library" }
|
||||
{ "name": "a/old", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "c/uptodate", "version": "2.0.0", "type": "library", "abandoned": false }
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
|
|
|
@ -50,9 +50,9 @@ update b/unstable
|
|||
--EXPECT-LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{ "name": "a/old", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "c/uptodate", "version": "1.0.0", "type": "library" }
|
||||
{ "name": "a/old", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "c/uptodate", "version": "1.0.0", "type": "library", "abandoned": false }
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
|
|
|
@ -33,10 +33,10 @@ update b/unstable
|
|||
--EXPECT-LOCK--
|
||||
{
|
||||
"packages": [
|
||||
{ "name": "a/old", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "c/uptodate", "version": "1.0.0", "type": "library" },
|
||||
{ "name": "d/removed", "version": "1.0.0", "type": "library" }
|
||||
{ "name": "a/old", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "b/unstable", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "c/uptodate", "version": "1.0.0", "type": "library", "abandoned": false },
|
||||
{ "name": "d/removed", "version": "1.0.0", "type": "library", "abandoned": false }
|
||||
],
|
||||
"packages-dev": [],
|
||||
"aliases": [],
|
||||
|
|
|
@ -58,7 +58,8 @@ update
|
|||
"name": "a/a", "version": "dev-master",
|
||||
"extra": { "branch-alias": { "dev-master": "1.0.x-dev" } },
|
||||
"source": { "reference": "master", "type": "git", "url": "" },
|
||||
"type": "library"
|
||||
"type": "library",
|
||||
"abandoned": false
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
@ -70,4 +71,4 @@ update
|
|||
"platform-dev": []
|
||||
}
|
||||
--EXPECT--
|
||||
Updating a/a (dev-master 1234) to a/a (dev-master master)
|
||||
Updating a/a (dev-master 1234) to a/a (dev-master master)
|
||||
|
|
|
@ -51,7 +51,8 @@ update
|
|||
"name": "a/a", "version": "dev-master",
|
||||
"type": "library",
|
||||
"source": { "reference": "newref", "url": "newurl", "type": "git" },
|
||||
"dist": { "reference": "newref", "url": "newurl", "type": "zip", "shasum": "" }
|
||||
"dist": { "reference": "newref", "url": "newurl", "type": "zip", "shasum": "" },
|
||||
"abandoned": false
|
||||
}
|
||||
],
|
||||
"packages-dev": [],
|
||||
|
|
|
@ -304,7 +304,7 @@ class InstallerTest extends TestCase
|
|||
die(sprintf('Test "%s" is not valid, did not match the expected format.', str_replace($fixturesDir.'/', '', $file)));
|
||||
}
|
||||
|
||||
$tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectExitCode);
|
||||
$tests[basename($file)] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $composer, $lock, $installed, $run, $expectLock, $expectOutput, $expect, $expectExitCode);
|
||||
}
|
||||
|
||||
return $tests;
|
||||
|
|
Loading…
Reference in New Issue