diff --git a/src/Composer/DependencyResolver/LockTransaction.php b/src/Composer/DependencyResolver/LockTransaction.php index f4f6d1bb8..eb5dead6b 100644 --- a/src/Composer/DependencyResolver/LockTransaction.php +++ b/src/Composer/DependencyResolver/LockTransaction.php @@ -93,12 +93,13 @@ class LockTransaction extends Transaction // we do not reset references if the currently present package didn't have any, or if the type of VCS has changed if ($updateMirrors && !isset($this->presentMap[spl_object_hash($package)])) { foreach ($this->presentMap as $presentPackage) { - if ($package->getName() == $presentPackage->getName() && - $package->getVersion() == $presentPackage->getVersion() && - $presentPackage->getSourceReference() && - $presentPackage->getSourceType() === $package->getSourceType() - ) { - $package->setSourceDistReferences($presentPackage->getSourceReference()); + if ($package->getName() == $presentPackage->getName() && $package->getVersion() == $presentPackage->getVersion()) { + if ($presentPackage->getSourceReference() && $presentPackage->getSourceType() === $package->getSourceType()) { + $package->setSourceDistReferences($presentPackage->getSourceReference()); + } + if ($presentPackage->getReleaseDate()) { + $package->setReleaseDate($presentPackage->getReleaseDate()); + } } } } diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 1a7c5e694..e856aeb39 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -446,6 +446,15 @@ class Installer $installsUpdates[] = $operation; $installNames[] = $operation->getPackage()->getPrettyName().':'.$operation->getPackage()->getFullPrettyVersion(); } elseif ($operation instanceof UpdateOperation) { + // when mirrors/metadata from a package gets updated we do not want to list it as an + // update in the output as it is only an internal lock file metadata update + if ($this->updateMirrors + && $operation->getInitialPackage()->getName() == $operation->getTargetPackage()->getName() + && $operation->getInitialPackage()->getVersion() == $operation->getTargetPackage()->getVersion() + ) { + continue; + } + $installsUpdates[] = $operation; $updateNames[] = $operation->getTargetPackage()->getPrettyName().':'.$operation->getTargetPackage()->getFullPrettyVersion(); } elseif ($operation instanceof UninstallOperation) { diff --git a/tests/Composer/Test/Fixtures/installer/update-mirrors-changes-url.test b/tests/Composer/Test/Fixtures/installer/update-mirrors-changes-url.test index 554783fc0..edb821f8c 100644 --- a/tests/Composer/Test/Fixtures/installer/update-mirrors-changes-url.test +++ b/tests/Composer/Test/Fixtures/installer/update-mirrors-changes-url.test @@ -17,7 +17,8 @@ g/g is dev and installed in a different ref than the #ref, so it gets updated an { "name": "a/a", "version": "dev-master", "source": { "reference": "2222222222222222222222222222222222222222", "url": "https://github.com/a/newa", "type": "git" }, - "dist": { "reference": "2222222222222222222222222222222222222222", "url": "https://api.github.com/repos/a/newa/zipball/2222222222222222222222222222222222222222", "type": "zip" } + "dist": { "reference": "2222222222222222222222222222222222222222", "url": "https://api.github.com/repos/a/newa/zipball/2222222222222222222222222222222222222222", "type": "zip" }, + "time": "2021-03-27T14:32:16+00:00" }, { "name": "b/b", "version": "2.0.3", @@ -67,7 +68,8 @@ g/g is dev and installed in a different ref than the #ref, so it gets updated an { "name": "a/a", "version": "dev-master", "source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/a/a", "type": "git" }, - "dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/a/a/zipball/1111111111111111111111111111111111111111", "type": "zip" } + "dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/a/a/zipball/1111111111111111111111111111111111111111", "type": "zip" }, + "time": "2021-03-14T16:24:37+00:00" }, { "name": "b/b", "version": "2.0.3", @@ -102,6 +104,7 @@ g/g is dev and installed in a different ref than the #ref, so it gets updated an "name": "a/a", "version": "dev-master", "source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/a/a", "type": "git" }, "dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/a/a/zipball/1111111111111111111111111111111111111111", "type": "zip" }, + "time": "2021-03-14T16:24:37+00:00", "type": "library" }, { @@ -151,6 +154,7 @@ g/g is dev and installed in a different ref than the #ref, so it gets updated an "name": "a/a", "version": "dev-master", "source": { "reference": "1111111111111111111111111111111111111111", "url": "https://github.com/a/newa", "type": "git" }, "dist": { "reference": "1111111111111111111111111111111111111111", "url": "https://api.github.com/repos/a/newa/zipball/1111111111111111111111111111111111111111", "type": "zip" }, + "time": "2021-03-14T16:24:37+00:00", "type": "library" }, { @@ -202,3 +206,12 @@ g/g is dev and installed in a different ref than the #ref, so it gets updated an --RUN-- update mirrors --EXPECT-- + +--EXPECT-OUTPUT-- +Loading composer repositories with package information +Updating dependencies +Lock file operations: 0 installs, 0 updates, 0 removals +Writing lock file +Installing dependencies from lock file (including require-dev) +Nothing to install, update or remove +Generating autoload files