1
0
Fork 0

Fix #refs handling, fixes #5291

pull/5303/head
Jordi Boggiano 2016-05-10 17:17:08 +01:00
parent 43f9d6389d
commit 72362a085a
2 changed files with 34 additions and 5 deletions

View File

@ -970,6 +970,8 @@ class Installer
) )
)) { )) {
$operations[] = new UpdateOperation($package, $newPackage); $operations[] = new UpdateOperation($package, $newPackage);
continue;
} }
} }
@ -978,7 +980,7 @@ class Installer
$references = $this->package->getReferences(); $references = $this->package->getReferences();
if (isset($references[$package->getName()]) && $references[$package->getName()] !== $package->getSourceReference()) { if (isset($references[$package->getName()]) && $references[$package->getName()] !== $package->getSourceReference()) {
// changing the source ref to update to will be handled in the operations loop below // changing the source ref to update to will be handled in the operations loop
$operations[] = new UpdateOperation($package, clone $package); $operations[] = new UpdateOperation($package, clone $package);
} }
} }
@ -1062,6 +1064,8 @@ class Installer
return; return;
} }
$rootRefs = $this->package->getReferences();
foreach ($localRepo->getCanonicalPackages() as $package) { foreach ($localRepo->getCanonicalPackages() as $package) {
// find similar packages (name/version) in all repositories // find similar packages (name/version) in all repositories
$matches = $pool->whatProvides($package->getName(), new Constraint('=', $package->getVersion())); $matches = $pool->whatProvides($package->getName(), new Constraint('=', $package->getVersion()));
@ -1088,8 +1092,13 @@ class Installer
// update the dist and source URLs // update the dist and source URLs
$sourceUrl = $package->getSourceUrl(); $sourceUrl = $package->getSourceUrl();
$newSourceUrl = $newPackage->getSourceUrl(); $newSourceUrl = $newPackage->getSourceUrl();
$newReference = $newPackage->getSourceReference();
$this->updatePackageUrl($package, $newSourceUrl, $newPackage->getSourceType(), $newPackage->getSourceReference(), $newPackage->getDistUrl()); if ($package->isDev() && isset($rootRefs[$package->getName()]) && $package->getSourceReference() === $rootRefs[$package->getName()]) {
$newReference = $rootRefs[$package->getName()];
}
$this->updatePackageUrl($package, $newSourceUrl, $newPackage->getSourceType(), $newReference, $newPackage->getDistUrl());
if ($package instanceof CompletePackage && $newPackage instanceof CompletePackage) { if ($package instanceof CompletePackage && $newPackage instanceof CompletePackage) {
$package->setAbandoned($newPackage->getReplacementPackage() ?: $newPackage->isAbandoned()); $package->setAbandoned($newPackage->getReplacementPackage() ?: $newPackage->isAbandoned());

View File

@ -7,6 +7,7 @@ c/c is a tag and not whitelisted and gets the new URL but keeps its old ref
d/d is dev but with a #ref so it should get URL updated but not the reference d/d is dev but with a #ref so it should get URL updated but not the reference
e/e is dev and newly installed with a #ref so it should get the correct URL but with the #111 ref e/e is dev and newly installed with a #ref so it should get the correct URL but with the #111 ref
e/e is dev but not whitelisted and gets the new URL but keeps its old ref e/e is dev but not whitelisted and gets the new URL but keeps its old ref
g/g is dev and installed in a different ref than the #ref, so it gets updated and gets the new URL but not the new ref
--COMPOSER-- --COMPOSER--
{ {
"repositories": [ "repositories": [
@ -42,6 +43,11 @@ e/e is dev but not whitelisted and gets the new URL but keeps its old ref
"name": "f/f", "version": "dev-master", "name": "f/f", "version": "dev-master",
"source": { "reference": "2222222222222222222222222222222222222222", "url": "https://github.com/f/newf", "type": "git" }, "source": { "reference": "2222222222222222222222222222222222222222", "url": "https://github.com/f/newf", "type": "git" },
"dist": { "reference": "2222222222222222222222222222222222222222", "url": "https://api.github.com/repos/f/newf/zipball/2222222222222222222222222222222222222222", "type": "zip" } "dist": { "reference": "2222222222222222222222222222222222222222", "url": "https://api.github.com/repos/f/newf/zipball/2222222222222222222222222222222222222222", "type": "zip" }
},
{
"name": "g/g", "version": "dev-master",
"source": { "reference": "2222222222222222222222222222222222222222", "url": "https://github.com/g/newg", "type": "git" },
"dist": { "reference": "2222222222222222222222222222222222222222", "url": "https://api.github.com/repos/g/newg/zipball/2222222222222222222222222222222222222222", "type": "zip" }
} }
] ]
} }
@ -52,7 +58,8 @@ e/e is dev but not whitelisted and gets the new URL but keeps its old ref
"c/c": "1.0.0", "c/c": "1.0.0",
"d/d": "dev-master#1111111111111111111111111111111111111111", "d/d": "dev-master#1111111111111111111111111111111111111111",
"e/e": "dev-master#1111111111111111111111111111111111111111", "e/e": "dev-master#1111111111111111111111111111111111111111",
"f/f": "dev-master" "f/f": "dev-master",
"g/g": "dev-master#1111111111111111111111111111111111111111"
} }
} }
--INSTALLED-- --INSTALLED--
@ -81,6 +88,11 @@ e/e is dev but not whitelisted and gets the new URL but keeps its old ref
"name": "f/f", "version": "dev-master", "name": "f/f", "version": "dev-master",
"source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/f/f", "type": "git" }, "source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/f/f", "type": "git" },
"dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/f/f/zipball/1111111111111111111111111111111111111111", "type": "zip" } "dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/f/f/zipball/1111111111111111111111111111111111111111", "type": "zip" }
},
{
"name": "g/g", "version": "dev-master",
"source": { "reference": "0000000000000000000000000000000000000000", "url": "https://github.com/g/g", "type": "git" },
"dist": { "reference": "0000000000000000000000000000000000000000", "url": "https://api.github.com/repos/g/g/zipball/0000000000000000000000000000000000000000", "type": "zip" }
} }
] ]
--EXPECT-LOCK-- --EXPECT-LOCK--
@ -121,6 +133,12 @@ e/e is dev but not whitelisted and gets the new URL but keeps its old ref
"source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/f/newf", "type": "git" }, "source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/f/newf", "type": "git" },
"dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/f/newf/zipball/1111111111111111111111111111111111111111", "type": "zip", "shasum": null }, "dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/f/newf/zipball/1111111111111111111111111111111111111111", "type": "zip", "shasum": null },
"type": "library" "type": "library"
},
{
"name": "g/g", "version": "dev-master",
"source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/g/newg", "type": "git" },
"dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/g/newg/zipball/1111111111111111111111111111111111111111", "type": "zip", "shasum": null },
"type": "library"
} }
], ],
"packages-dev": [], "packages-dev": [],
@ -130,7 +148,8 @@ e/e is dev but not whitelisted and gets the new URL but keeps its old ref
"a/a": 20, "a/a": 20,
"d/d": 20, "d/d": 20,
"e/e": 20, "e/e": 20,
"f/f": 20 "f/f": 20,
"g/g": 20
}, },
"prefer-stable": false, "prefer-stable": false,
"prefer-lowest": false, "prefer-lowest": false,
@ -138,7 +157,8 @@ e/e is dev but not whitelisted and gets the new URL but keeps its old ref
"platform-dev": [] "platform-dev": []
} }
--RUN-- --RUN--
update a/a b/b d/d update a/a b/b d/d g/g
--EXPECT-- --EXPECT--
Installing e/e (dev-master 1111111) Installing e/e (dev-master 1111111)
Updating a/a (dev-master 1111111) to a/a (dev-master 2222222) Updating a/a (dev-master 1111111) to a/a (dev-master 2222222)
Updating g/g (dev-master 0000000) to g/g (dev-master 1111111)