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.
main
Rafael Dohms 10 years ago
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…
Cancel
Save