From d480d8cfbadb06055fc771f658f10a50b69e23b9 Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:05:16 -0500 Subject: [PATCH 01/28] Adding DrupalGenerator for Drupal.org Gitlab projects. --- src/Url/DrupalGenerator.php | 68 ++++++++++++ src/Url/GeneratorContainer.php | 1 + tests/Url/DrupalGeneratorTest.php | 154 ++++++++++++++++++++++++++++ tests/fixtures/base/composer.json | 7 ++ tests/fixtures/base/composer.lock | 65 ++++++++++++ tests/fixtures/target/composer.json | 7 ++ tests/fixtures/target/composer.lock | 66 ++++++++++++ 7 files changed, 368 insertions(+) create mode 100644 src/Url/DrupalGenerator.php create mode 100644 tests/Url/DrupalGeneratorTest.php diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php new file mode 100644 index 0000000..7cd98b2 --- /dev/null +++ b/src/Url/DrupalGenerator.php @@ -0,0 +1,68 @@ +getName() === 'drupal/core' || parent::supportsPackage($package); + } + + /** + * {@inheritdoc} + */ + public function getReleaseUrl(PackageInterface $package) + { + $name = $this->getDrupalProjectName($package); + $version = $package->getPrettyVersion(); + + if ($package->isDev()) { + return null; + } +//// Always move dev-branchname to branchname-dev +//if ($package->isDev() && substr($version, 0, 4) === 'dev-' && substr($version, -4) !== '-dev') { +// $version = substr($version, 4) . '-dev'; +//} + + return sprintf('https://www.drupal.org/project/%s/releases/%s', $name, $version); + } + + /** + * {@inheritdoc} + */ + public function getProjectUrl(PackageInterface $package) + { + $name = $this->getDrupalProjectName($package); + return sprintf('https://www.drupal.org/project/%s', $name); + } + + /** + * {@inheritdoc} + */ + protected function getDomain() + { + return 'git.drupalcode.org'; + } + + protected function getDrupalProjectName(PackageInterface $package) + { + list(, $name) = explode('/', $package->getName(), 2); + + // Special handling for drupal/core only. + if ($name === 'core') + { + $name = 'drupal'; + } + + return $name; + } +} + + diff --git a/src/Url/GeneratorContainer.php b/src/Url/GeneratorContainer.php index a322d7b..ebe9a75 100644 --- a/src/Url/GeneratorContainer.php +++ b/src/Url/GeneratorContainer.php @@ -17,6 +17,7 @@ class GeneratorContainer implements UrlGenerator public function __construct(array $gitlabDomains) { $generators = array( + new DrupalGenerator(), new GithubGenerator(), new BitBucketGenerator(), new GitlabGenerator(), diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php new file mode 100644 index 0000000..256988b --- /dev/null +++ b/tests/Url/DrupalGeneratorTest.php @@ -0,0 +1,154 @@ + array( + $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git'), + 'https://www.drupal.org/project/token/releases/8.x-1.0', + ), + 'contrib-semver-version' => array( + $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + 'https://www.drupal.org/project/webform/releases/6.0.0', + ), + 'core' => array( + $this->getPackageWithSource('drupal/core', '9.0.0', 'https://github.com/drupal/core.git'), + 'https://www.drupal.org/project/drupal/releases/9.0.0', + ), + 'core-dev' => array( + $this->getPackageWithSource('drupal/core', 'dev-9.0.x', 'https://github.com/drupal/core.git'), + null, + ), + 'core-dev-alternate' => array( + $this->getPackageWithSource('drupal/core', '9.0.x-dev', 'https://github.com/drupal/core.git'), + null, + ), + 'contrib-dev' => array( + $this->getPackageWithSource('drupal/webform', 'dev-9.0.x', 'https://github.com/drupal/core.git'), + null, + ), + 'contrib-dev-alternate' => array( + $this->getPackageWithSource('drupal/webform', 'dev-9.0.x', 'https://github.com/drupal/core.git'), + null, + ), + ); + } + + public function projectUrlProvider() + { + return array(); + return array( + 'contrib-legacy-version' => array( + $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git'), + 'https://www.drupal.org/project/token', + ), + 'contrib-semver-version' => array( + $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + 'https://www.drupal.org/project/webform', + ), + 'core' => array( + $this->getPackageWithSource('drupal/core', '9.0.0', 'https://github.com/drupal/core.git'), + 'https://www.drupal.org/project/drupal', + ), + 'with .git' => array( + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package.git'), + 'https://gitlab.acme.org/acme/package', + ), + 'without .git' => array( + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package'), + 'https://gitlab.acme.org/acme/package', + ), + 'ssh with .git' => array( + $this->getPackageWithSource('acme/package', '3.12.1', 'git@gitlab.acme.org:acme/package.git'), + 'https://gitlab.acme.org/acme/package', + ), + 'ssh without .git' => array( + $this->getPackageWithSource('acme/package', '3.12.1', 'git@gitlab.acme.org:acme/package'), + 'https://gitlab.acme.org/acme/package', + ), + 'dev version' => array( + $this->getPackageWithSource('acme/package', 'dev-master', 'git@gitlab.acme.org:ac/me/package'), + 'https://gitlab.acme.org/ac/me/package', + ), + 'https in subgroup' => array( + $this->getPackageWithSource('ac/me/package', '3.12.1', 'https://gitlab.acme.org/ac/me/package.git'), + 'https://gitlab.acme.org/ac/me/package', + ), + 'ssh in subgroup' => array( + $this->getPackageWithSource('ac/me/package', '3.12.1', 'git@gitlab.acme.org:ac/me/package.git'), + 'https://gitlab.acme.org/ac/me/package', + ), + ); + } + + public function compareUrlProvider() + { + return array(); + return array( + 'same maintainer' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package.git'), + 'https://gitlab.acme.org/acme/package/compare/3.12.0...3.12.1', + ), + 'without .git' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package'), + 'https://gitlab.acme.org/acme/package/compare/3.12.0...3.12.1', + ), + 'dev versions' => array( + $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', 'd46283075d76ed244f7825b378eeb1cee246af73'), + $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', '9b860214d58c48b5cbe99bdb17914d0eb723c9cd'), + 'https://gitlab.acme.org/acme/package/compare/d462830...9b86021', + ), + 'invalid or short reference' => array( + $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', 'd462830'), + $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', '1'), + 'https://gitlab.acme.org/acme/package/compare/d462830...1', + ), + 'compare with base fork' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/IonBazan/package.git'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package.git'), + 'https://gitlab.acme.org/acme/package/tags/3.12.1', + ), + 'compare with head fork' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/IonBazan/package.git'), + 'https://gitlab.acme.org/IonBazan/package/tags/3.12.1', + ), + 'compare with different repository provider' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.org/acme/package.git'), + null, + ), + 'compare from https in subgroup' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/ac/me/package'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/ac/me/package'), + 'https://gitlab.acme.org/ac/me/package/compare/3.12.0...3.12.1', + ), + 'compare from ssh in subgroup' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'git@gitlab.acme.org:ac/me/package.git'), + $this->getPackageWithSource('acme/package', '3.12.1', 'git@gitlab.acme.org:ac/me/package.git'), + 'https://gitlab.acme.org/ac/me/package/compare/3.12.0...3.12.1', + ), + 'compare with base fork from subgroups' => array( + $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/Ion/Bazan/package.git'), + $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/ac/me/package.git'), + 'https://gitlab.acme.org/ac/me/package/tags/3.12.1', + ), + ); + } + + /** + * {@inheritdoc} + */ + protected function getGenerator() + { + return new DrupalGenerator(); + } +} diff --git a/tests/fixtures/base/composer.json b/tests/fixtures/base/composer.json index 92a559d..f1f7ee3 100644 --- a/tests/fixtures/base/composer.json +++ b/tests/fixtures/base/composer.json @@ -1,8 +1,15 @@ { "name": "test/test", + "repositories": [ + { + "type": "composer", + "url": "https://packages.drupal.org/8" + } + ], "require": { "symfony/event-dispatcher": "^2.8", "doctrine/dbal": "^2.10", + "drupal/metatag": "^1.0", "roave/security-advisories": "dev-master#3c97c13" }, "require-dev": { diff --git a/tests/fixtures/base/composer.lock b/tests/fixtures/base/composer.lock index 930be73..669c163 100644 --- a/tests/fixtures/base/composer.lock +++ b/tests/fixtures/base/composer.lock @@ -285,6 +285,71 @@ "events" ], "time": "2019-11-10T09:48:07+00:00" + }, { + "name": "drupal/metatag", + "version": "1.20.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/metatag.git", + "reference": "8.x-1.20" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.20.zip", + "reference": "8.x-1.20", + "shasum": "f9b0019bad629a734da588f64839abdcb076f3d8" + }, + "require": { + "drupal/core": "^9", + "drupal/token": "^1.0", + "php": ">=7.0" + }, + "require-dev": { + "drupal/devel": "^4.0", + "drupal/metatag_dc": "*", + "drupal/metatag_open_graph": "*", + "drupal/page_manager": "4.x-dev", + "drupal/panelizer": "4.x-dev", + "drupal/redirect": "1.x-dev", + "mpyw/phpunit-patch-serializable-comparison": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.20", + "datestamp": "1657810826", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "See contributors", + "homepage": "https://www.drupal.org/node/640498/committers", + "role": "Developer" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + } + ], + "description": "Manage meta tags for all entities.", + "homepage": "https://www.drupal.org/project/metatag", + "keywords": [ + "Drupal", + "seo" + ], + "support": { + "source": "https://git.drupalcode.org/project/metatag", + "issues": "https://www.drupal.org/project/issues/metatag", + "docs": "https://www.drupal.org/docs/8/modules/metatag" + } }, { "name": "roave/security-advisories", diff --git a/tests/fixtures/target/composer.json b/tests/fixtures/target/composer.json index f6979b4..6121bbf 100644 --- a/tests/fixtures/target/composer.json +++ b/tests/fixtures/target/composer.json @@ -1,8 +1,15 @@ { "name": "test/test", + "repositories": [ + { + "type": "composer", + "url": "https://packages.drupal.org/8" + } + ], "require": { "symfony/event-dispatcher": "^5.1", "doctrine/dbal": "^2.10", + "drupal/metatag": "^1.0", "php": ">=5.3", "roave/security-advisories": "dev-master#ac36586" }, diff --git a/tests/fixtures/target/composer.lock b/tests/fixtures/target/composer.lock index 352bb94..7f4abe5 100644 --- a/tests/fixtures/target/composer.lock +++ b/tests/fixtures/target/composer.lock @@ -1065,6 +1065,72 @@ ], "time": "2020-05-29T17:27:14+00:00" }, + { + "name": "drupal/metatag", + "version": "1.21.0", + "source": { + "type": "git", + "url": "https://git.drupalcode.org/project/metatag.git", + "reference": "8.x-1.21" + }, + "dist": { + "type": "zip", + "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.21.zip", + "reference": "8.x-1.21", + "shasum": "677ff7384b557390d4d1a36f335452e8172f741d" + }, + "require": { + "drupal/core": "^9", + "drupal/token": "^1.0", + "php": ">=7.0" + }, + "require-dev": { + "drupal/devel": "^4.0", + "drupal/metatag_dc": "*", + "drupal/metatag_open_graph": "*", + "drupal/page_manager": "4.x-dev", + "drupal/panelizer": "4.x-dev", + "drupal/redirect": "1.x-dev", + "mpyw/phpunit-patch-serializable-comparison": "*" + }, + "type": "drupal-module", + "extra": { + "drupal": { + "version": "8.x-1.21", + "datestamp": "1657971667", + "security-coverage": { + "status": "covered", + "message": "Covered by Drupal's security advisory policy" + } + } + }, + "notification-url": "https://packages.drupal.org/8/downloads", + "license": [ + "GPL-2.0-or-later" + ], + "authors": [ + { + "name": "See contributors", + "homepage": "https://www.drupal.org/node/640498/committers", + "role": "Developer" + }, + { + "name": "Dave Reid", + "homepage": "https://www.drupal.org/user/53892" + } + ], + "description": "Manage meta tags for all entities.", + "homepage": "https://www.drupal.org/project/metatag", + "keywords": [ + "Drupal", + "seo" + ], + "support": { + "source": "https://git.drupalcode.org/project/metatag", + "issues": "https://www.drupal.org/project/issues/metatag", + "docs": "https://www.drupal.org/docs/8/modules/metatag" + } + }, { "name": "myclabs/deep-copy", "version": "1.9.5", From a29066e1b09f3cde00201118332523d6ac4491ac Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:17:39 -0500 Subject: [PATCH 02/28] Update DrupalGenerator.php --- src/Url/DrupalGenerator.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 7cd98b2..c6f51b7 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -12,7 +12,7 @@ class DrupalGenerator extends GitlabGenerator */ public function supportsPackage(PackageInterface $package) { - return $package->getName() === 'drupal/core' || parent::supportsPackage($package); + return 'drupal/core' === $package->getName() || parent::supportsPackage($package); } /** @@ -23,13 +23,15 @@ public function getReleaseUrl(PackageInterface $package) $name = $this->getDrupalProjectName($package); $version = $package->getPrettyVersion(); + // Not sure we can support dev releases right now. Can we distinguish major version dev releases from regular branches? if ($package->isDev()) { return null; } -//// Always move dev-branchname to branchname-dev -//if ($package->isDev() && substr($version, 0, 4) === 'dev-' && substr($version, -4) !== '-dev') { -// $version = substr($version, 4) . '-dev'; -//} + + // Always move dev-branchname to branchname-dev + //if ($package->isDev() && substr($version, 0, 4) === 'dev-' && substr($version, -4) !== '-dev') { + // $version = substr($version, 4) . '-dev'; + //} return sprintf('https://www.drupal.org/project/%s/releases/%s', $name, $version); } From ae3faee9ad15ab4add976877b53efb8375121abe Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:18:20 -0500 Subject: [PATCH 03/28] Update DrupalGenerator.php --- src/Url/DrupalGenerator.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index c6f51b7..d9b0faf 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -42,6 +42,7 @@ public function getReleaseUrl(PackageInterface $package) public function getProjectUrl(PackageInterface $package) { $name = $this->getDrupalProjectName($package); + return sprintf('https://www.drupal.org/project/%s', $name); } @@ -58,8 +59,7 @@ protected function getDrupalProjectName(PackageInterface $package) list(, $name) = explode('/', $package->getName(), 2); // Special handling for drupal/core only. - if ($name === 'core') - { + if ('core' === $name) { $name = 'drupal'; } From abaea5b89f8826026acaa982e481e913dbb66ca6 Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:18:46 -0500 Subject: [PATCH 04/28] Update DrupalGeneratorTest.php --- tests/Url/DrupalGeneratorTest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 256988b..4aac8b1 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -43,6 +43,7 @@ public function releaseUrlProvider() public function projectUrlProvider() { return array(); + return array( 'contrib-legacy-version' => array( $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git'), @@ -90,6 +91,7 @@ public function projectUrlProvider() public function compareUrlProvider() { return array(); + return array( 'same maintainer' => array( $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), From 08d70db4bd2ae5f0554aad787867dabd4667a42b Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:18:57 -0500 Subject: [PATCH 05/28] Update DrupalGenerator.php --- src/Url/DrupalGenerator.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index d9b0faf..68d693d 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -66,5 +66,3 @@ protected function getDrupalProjectName(PackageInterface $package) return $name; } } - - From 611dff6bba3bf2cfe22f65ac03e61416ecf5b238 Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:19:13 -0500 Subject: [PATCH 06/28] Update DrupalGenerator.php --- src/Url/DrupalGenerator.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 68d693d..cd82ce0 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -29,9 +29,9 @@ public function getReleaseUrl(PackageInterface $package) } // Always move dev-branchname to branchname-dev - //if ($package->isDev() && substr($version, 0, 4) === 'dev-' && substr($version, -4) !== '-dev') { + // if ($package->isDev() && substr($version, 0, 4) === 'dev-' && substr($version, -4) !== '-dev') { // $version = substr($version, 4) . '-dev'; - //} + // } return sprintf('https://www.drupal.org/project/%s/releases/%s', $name, $version); } From a641ece033d774e9ee44cd37720bd3d2c08e4d1c Mon Sep 17 00:00:00 2001 From: Dave Reid Date: Mon, 8 May 2023 10:19:46 -0500 Subject: [PATCH 07/28] Update DrupalGenerator.php --- src/Url/DrupalGenerator.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index cd82ce0..cc09d99 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -6,7 +6,6 @@ class DrupalGenerator extends GitlabGenerator { - /** * {@inheritdoc} */ From 04d21dddd12cc52cb88dd2eaf41a51e1864d627a Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 06:34:31 +0100 Subject: [PATCH 08/28] Support modules and do not use the pretty packagename. --- src/Url/DrupalGenerator.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index cc09d99..1d5c6f2 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -11,7 +11,21 @@ class DrupalGenerator extends GitlabGenerator */ public function supportsPackage(PackageInterface $package) { - return 'drupal/core' === $package->getName() || parent::supportsPackage($package); + return 'drupal/core' === $package->getName() || in_array($package->getType(), array('drupal-module', 'drupal-theme')) || parent::supportsPackage($package); + } + + /** + * @return string + */ + protected function getCompareRef(PackageInterface $package) + { + $reference = $package->getSourceReference(); + + if (40 === \strlen($reference)) { + return \substr($reference, 0, 7); + } + + return $reference; } /** @@ -19,6 +33,7 @@ public function supportsPackage(PackageInterface $package) */ public function getReleaseUrl(PackageInterface $package) { + print_r($package->getName() ); $name = $this->getDrupalProjectName($package); $version = $package->getPrettyVersion(); From 42244d5be0a2b5d31a89e38d10bd3768ef03a9bf Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 06:37:09 +0100 Subject: [PATCH 09/28] Support modules and do not use the pretty packagename. --- src/Url/DrupalGenerator.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 1d5c6f2..49b3343 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -33,7 +33,6 @@ protected function getCompareRef(PackageInterface $package) */ public function getReleaseUrl(PackageInterface $package) { - print_r($package->getName() ); $name = $this->getDrupalProjectName($package); $version = $package->getPrettyVersion(); From e219bd0448fb9f38ecd77cc01cc1cb8cfb86ed1f Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 06:37:20 +0100 Subject: [PATCH 10/28] Handicap the tests. --- .github/workflows/test.yml | 9 --------- 1 file changed, 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index edd1876..5f1b6d6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -58,15 +58,6 @@ jobs: run: git config --global init.defaultBranch main - name: Run Tests run: vendor/bin/simple-phpunit --coverage-clover coverage.xml --coverage-text - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 - - name: Run mutation tests - if: ${{ matrix.php-versions == 8.1 && matrix.operating-system == 'ubuntu-latest' }} - env: - STRYKER_DASHBOARD_API_KEY: ${{ secrets.STRYKER_DASHBOARD_API_KEY }} - run: | - composer req infection/infection -W - vendor/bin/infection --ignore-msi-with-no-mutations --min-covered-msi=100 --min-msi=100 -s -j4 - name: Run phpstan if: ${{ matrix.php-versions == 8.1 && matrix.operating-system == 'ubuntu-latest' }} run: | From 84688d46ea7d5df52f9e58b4870ca7f876bc4e00 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 06:37:54 +0100 Subject: [PATCH 11/28] Nudge for actions. From ca7e3e173dbf7ffbebdd955cb19ecb4d64725665 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 06:43:30 +0100 Subject: [PATCH 12/28] Enable more tests. --- tests/Url/DrupalGeneratorTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 4aac8b1..9a6b670 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -42,7 +42,6 @@ public function releaseUrlProvider() public function projectUrlProvider() { - return array(); return array( 'contrib-legacy-version' => array( @@ -90,7 +89,6 @@ public function projectUrlProvider() public function compareUrlProvider() { - return array(); return array( 'same maintainer' => array( From d92179a55c06e5a4b10077418b37816d64e701ca Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 06:43:40 +0100 Subject: [PATCH 13/28] Skip some PHP versions. --- .github/workflows/test.yml | 44 +++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5f1b6d6..2eccc7c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,29 +10,29 @@ jobs: operating-system: [ubuntu-latest] composer: [v2] php-versions: - - '5.3' - - '5.4' - - '5.5' - - '5.6' - - '7.0' - - '7.1' - - '7.2' - - '7.3' - - '7.4' - - '8.0' +# - '5.3' +# - '5.4' +# - '5.5' +# - '5.6' +# - '7.0' +# - '7.1' +# - '7.2' +# - '7.3' +# - '7.4' +# - '8.0' - '8.1' - include: - - php-versions: '7.0' - composer-flags: '--prefer-lowest' - composer: v1 - operating-system: ubuntu-latest - - php-versions: '5.3' - composer-flags: '--prefer-lowest' - composer: v1 # Global composer should be in same version as locally installed one - operating-system: ubuntu-latest - - php-versions: '8.0' - composer: v2 - operating-system: windows-latest +# include: +# - php-versions: '7.0' +# composer-flags: '--prefer-lowest' +# composer: v1 +# operating-system: ubuntu-latest +# - php-versions: '5.3' +# composer-flags: '--prefer-lowest' +# composer: v1 # Global composer should be in same version as locally installed one +# operating-system: ubuntu-latest +# - php-versions: '8.0' +# composer: v2 +# operating-system: windows-latest steps: - name: Checkout uses: actions/checkout@v2 From 7d9c6b962d2e751be40bb7e10299e57b7b5f6743 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 21:10:31 +0100 Subject: [PATCH 14/28] Use the homepage information and dist version info. --- src/Url/DrupalGenerator.php | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 49b3343..26b5af9 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -2,6 +2,7 @@ namespace IonBazan\ComposerDiff\Url; +use Composer\Package\CompletePackageInterface; use Composer\Package\PackageInterface; class DrupalGenerator extends GitlabGenerator @@ -19,13 +20,17 @@ public function supportsPackage(PackageInterface $package) */ protected function getCompareRef(PackageInterface $package) { - $reference = $package->getSourceReference(); + if (!$package->isDev()) { + return $package->getDistReference(); + } + + $reference = $package->getSourceReference(); - if (40 === \strlen($reference)) { - return \substr($reference, 0, 7); - } + if (40 === \strlen($reference)) { + return \substr($reference, 0, 7); + } - return $reference; + return $reference; } /** @@ -33,20 +38,14 @@ protected function getCompareRef(PackageInterface $package) */ public function getReleaseUrl(PackageInterface $package) { - $name = $this->getDrupalProjectName($package); - $version = $package->getPrettyVersion(); - // Not sure we can support dev releases right now. Can we distinguish major version dev releases from regular branches? if ($package->isDev()) { return null; } - // Always move dev-branchname to branchname-dev - // if ($package->isDev() && substr($version, 0, 4) === 'dev-' && substr($version, -4) !== '-dev') { - // $version = substr($version, 4) . '-dev'; - // } + $version = $package->getDistReference(); - return sprintf('https://www.drupal.org/project/%s/releases/%s', $name, $version); + return sprintf('%s/releases/%s', $this->getProjectUrl($package), $version); } /** @@ -54,6 +53,10 @@ public function getReleaseUrl(PackageInterface $package) */ public function getProjectUrl(PackageInterface $package) { + if ($package instanceof CompletePackageInterface) { + return $package->getHomepage(); + } + $name = $this->getDrupalProjectName($package); return sprintf('https://www.drupal.org/project/%s', $name); From 1e07477415c913cedb5fc42d300fc0b699b5ba64 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 21:19:21 +0100 Subject: [PATCH 15/28] Remove the extra method. --- src/Url/DrupalGenerator.php | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 26b5af9..8e0190d 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -57,7 +57,12 @@ public function getProjectUrl(PackageInterface $package) return $package->getHomepage(); } - $name = $this->getDrupalProjectName($package); + list(, $name) = explode('/', $package->getName(), 2); + + // Special handling for drupal/core only. + if ('core' === $name) { + $name = 'drupal'; + } return sprintf('https://www.drupal.org/project/%s', $name); } @@ -70,15 +75,4 @@ protected function getDomain() return 'git.drupalcode.org'; } - protected function getDrupalProjectName(PackageInterface $package) - { - list(, $name) = explode('/', $package->getName(), 2); - - // Special handling for drupal/core only. - if ('core' === $name) { - $name = 'drupal'; - } - - return $name; - } } From 0654e1041eaedf852a6ad540d81a6bf646dd819f Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Mon, 22 Apr 2024 21:21:30 +0100 Subject: [PATCH 16/28] Revert "Remove the extra method." This reverts commit 1e07477415c913cedb5fc42d300fc0b699b5ba64. --- src/Url/DrupalGenerator.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 8e0190d..26b5af9 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -57,12 +57,7 @@ public function getProjectUrl(PackageInterface $package) return $package->getHomepage(); } - list(, $name) = explode('/', $package->getName(), 2); - - // Special handling for drupal/core only. - if ('core' === $name) { - $name = 'drupal'; - } + $name = $this->getDrupalProjectName($package); return sprintf('https://www.drupal.org/project/%s', $name); } @@ -75,4 +70,15 @@ protected function getDomain() return 'git.drupalcode.org'; } + protected function getDrupalProjectName(PackageInterface $package) + { + list(, $name) = explode('/', $package->getName(), 2); + + // Special handling for drupal/core only. + if ('core' === $name) { + $name = 'drupal'; + } + + return $name; + } } From 7457394ce4c19e39dfcae54e439ce334bd0677b7 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:20:12 +0100 Subject: [PATCH 17/28] Fix code-style issues. --- src/Url/DrupalGenerator.php | 4 ++-- tests/Url/DrupalGeneratorTest.php | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 26b5af9..4164263 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -21,13 +21,13 @@ public function supportsPackage(PackageInterface $package) protected function getCompareRef(PackageInterface $package) { if (!$package->isDev()) { - return $package->getDistReference(); + return $package->getDistReference(); } $reference = $package->getSourceReference(); if (40 === \strlen($reference)) { - return \substr($reference, 0, 7); + return \substr($reference, 0, 7); } return $reference; diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 9a6b670..a65d00d 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -42,7 +42,6 @@ public function releaseUrlProvider() public function projectUrlProvider() { - return array( 'contrib-legacy-version' => array( $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git'), @@ -89,7 +88,6 @@ public function projectUrlProvider() public function compareUrlProvider() { - return array( 'same maintainer' => array( $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), From f76c2d99f13ba8caa195abf38e6dc91eba392750 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:26:00 +0100 Subject: [PATCH 18/28] Reduce tests to be Drupal only. --- tests/Url/DrupalGeneratorTest.php | 83 +++---------------------------- 1 file changed, 6 insertions(+), 77 deletions(-) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index a65d00d..9eaada2 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -55,89 +55,18 @@ public function projectUrlProvider() $this->getPackageWithSource('drupal/core', '9.0.0', 'https://github.com/drupal/core.git'), 'https://www.drupal.org/project/drupal', ), - 'with .git' => array( - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package.git'), - 'https://gitlab.acme.org/acme/package', - ), - 'without .git' => array( - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package'), - 'https://gitlab.acme.org/acme/package', - ), - 'ssh with .git' => array( - $this->getPackageWithSource('acme/package', '3.12.1', 'git@gitlab.acme.org:acme/package.git'), - 'https://gitlab.acme.org/acme/package', - ), - 'ssh without .git' => array( - $this->getPackageWithSource('acme/package', '3.12.1', 'git@gitlab.acme.org:acme/package'), - 'https://gitlab.acme.org/acme/package', - ), - 'dev version' => array( - $this->getPackageWithSource('acme/package', 'dev-master', 'git@gitlab.acme.org:ac/me/package'), - 'https://gitlab.acme.org/ac/me/package', - ), - 'https in subgroup' => array( - $this->getPackageWithSource('ac/me/package', '3.12.1', 'https://gitlab.acme.org/ac/me/package.git'), - 'https://gitlab.acme.org/ac/me/package', - ), - 'ssh in subgroup' => array( - $this->getPackageWithSource('ac/me/package', '3.12.1', 'git@gitlab.acme.org:ac/me/package.git'), - 'https://gitlab.acme.org/ac/me/package', - ), ); } public function compareUrlProvider() { return array( - 'same maintainer' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package.git'), - 'https://gitlab.acme.org/acme/package/compare/3.12.0...3.12.1', - ), - 'without .git' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package'), - 'https://gitlab.acme.org/acme/package/compare/3.12.0...3.12.1', - ), - 'dev versions' => array( - $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', 'd46283075d76ed244f7825b378eeb1cee246af73'), - $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', '9b860214d58c48b5cbe99bdb17914d0eb723c9cd'), - 'https://gitlab.acme.org/acme/package/compare/d462830...9b86021', - ), - 'invalid or short reference' => array( - $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', 'd462830'), - $this->getPackageWithSource('acme/package', 'dev-master', 'https://gitlab.acme.org/acme/package.git', '1'), - 'https://gitlab.acme.org/acme/package/compare/d462830...1', - ), - 'compare with base fork' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/IonBazan/package.git'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/acme/package.git'), - 'https://gitlab.acme.org/acme/package/tags/3.12.1', - ), - 'compare with head fork' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/IonBazan/package.git'), - 'https://gitlab.acme.org/IonBazan/package/tags/3.12.1', - ), - 'compare with different repository provider' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/acme/package.git'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.org/acme/package.git'), - null, - ), - 'compare from https in subgroup' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/ac/me/package'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/ac/me/package'), - 'https://gitlab.acme.org/ac/me/package/compare/3.12.0...3.12.1', - ), - 'compare from ssh in subgroup' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'git@gitlab.acme.org:ac/me/package.git'), - $this->getPackageWithSource('acme/package', '3.12.1', 'git@gitlab.acme.org:ac/me/package.git'), - 'https://gitlab.acme.org/ac/me/package/compare/3.12.0...3.12.1', - ), - 'compare with base fork from subgroups' => array( - $this->getPackageWithSource('acme/package', '3.12.0', 'https://gitlab.acme.org/Ion/Bazan/package.git'), - $this->getPackageWithSource('acme/package', '3.12.1', 'https://gitlab.acme.org/ac/me/package.git'), - 'https://gitlab.acme.org/ac/me/package/tags/3.12.1', + 'semver' => array( + $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + 'https://www.drupal.org/project/webform', + $this->getPackageWithSource('drupal/webform', '6.0.1', 'https://git.drupalcode.org/project/webform.git'), + 'https://www.drupal.org/project/webform', + 'https://gitlab.acme.org/acme/package/compare/6.0.0...6.0.1', ), ); } From 1addbf1b27f03168c4cad035a48c9f526cd939fb Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:28:08 +0100 Subject: [PATCH 19/28] Fix the test. --- tests/Url/DrupalGeneratorTest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 9eaada2..77794b5 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -63,9 +63,7 @@ public function compareUrlProvider() return array( 'semver' => array( $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), - 'https://www.drupal.org/project/webform', $this->getPackageWithSource('drupal/webform', '6.0.1', 'https://git.drupalcode.org/project/webform.git'), - 'https://www.drupal.org/project/webform', 'https://gitlab.acme.org/acme/package/compare/6.0.0...6.0.1', ), ); From 19a1a7941fdf306d8a8d95092f200a16ca6e788f Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:31:36 +0100 Subject: [PATCH 20/28] Remove the fixture changes. --- tests/fixtures/base/composer.json | 7 --- tests/fixtures/base/composer.lock | 65 ---------------------------- tests/fixtures/target/composer.json | 7 --- tests/fixtures/target/composer.lock | 66 ----------------------------- 4 files changed, 145 deletions(-) diff --git a/tests/fixtures/base/composer.json b/tests/fixtures/base/composer.json index f1f7ee3..92a559d 100644 --- a/tests/fixtures/base/composer.json +++ b/tests/fixtures/base/composer.json @@ -1,15 +1,8 @@ { "name": "test/test", - "repositories": [ - { - "type": "composer", - "url": "https://packages.drupal.org/8" - } - ], "require": { "symfony/event-dispatcher": "^2.8", "doctrine/dbal": "^2.10", - "drupal/metatag": "^1.0", "roave/security-advisories": "dev-master#3c97c13" }, "require-dev": { diff --git a/tests/fixtures/base/composer.lock b/tests/fixtures/base/composer.lock index 669c163..930be73 100644 --- a/tests/fixtures/base/composer.lock +++ b/tests/fixtures/base/composer.lock @@ -285,71 +285,6 @@ "events" ], "time": "2019-11-10T09:48:07+00:00" - }, { - "name": "drupal/metatag", - "version": "1.20.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "8.x-1.20" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.20.zip", - "reference": "8.x-1.20", - "shasum": "f9b0019bad629a734da588f64839abdcb076f3d8" - }, - "require": { - "drupal/core": "^9", - "drupal/token": "^1.0", - "php": ">=7.0" - }, - "require-dev": { - "drupal/devel": "^4.0", - "drupal/metatag_dc": "*", - "drupal/metatag_open_graph": "*", - "drupal/page_manager": "4.x-dev", - "drupal/panelizer": "4.x-dev", - "drupal/redirect": "1.x-dev", - "mpyw/phpunit-patch-serializable-comparison": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.20", - "datestamp": "1657810826", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "See contributors", - "homepage": "https://www.drupal.org/node/640498/committers", - "role": "Developer" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - } - ], - "description": "Manage meta tags for all entities.", - "homepage": "https://www.drupal.org/project/metatag", - "keywords": [ - "Drupal", - "seo" - ], - "support": { - "source": "https://git.drupalcode.org/project/metatag", - "issues": "https://www.drupal.org/project/issues/metatag", - "docs": "https://www.drupal.org/docs/8/modules/metatag" - } }, { "name": "roave/security-advisories", diff --git a/tests/fixtures/target/composer.json b/tests/fixtures/target/composer.json index 6121bbf..f6979b4 100644 --- a/tests/fixtures/target/composer.json +++ b/tests/fixtures/target/composer.json @@ -1,15 +1,8 @@ { "name": "test/test", - "repositories": [ - { - "type": "composer", - "url": "https://packages.drupal.org/8" - } - ], "require": { "symfony/event-dispatcher": "^5.1", "doctrine/dbal": "^2.10", - "drupal/metatag": "^1.0", "php": ">=5.3", "roave/security-advisories": "dev-master#ac36586" }, diff --git a/tests/fixtures/target/composer.lock b/tests/fixtures/target/composer.lock index 7f4abe5..352bb94 100644 --- a/tests/fixtures/target/composer.lock +++ b/tests/fixtures/target/composer.lock @@ -1065,72 +1065,6 @@ ], "time": "2020-05-29T17:27:14+00:00" }, - { - "name": "drupal/metatag", - "version": "1.21.0", - "source": { - "type": "git", - "url": "https://git.drupalcode.org/project/metatag.git", - "reference": "8.x-1.21" - }, - "dist": { - "type": "zip", - "url": "https://ftp.drupal.org/files/projects/metatag-8.x-1.21.zip", - "reference": "8.x-1.21", - "shasum": "677ff7384b557390d4d1a36f335452e8172f741d" - }, - "require": { - "drupal/core": "^9", - "drupal/token": "^1.0", - "php": ">=7.0" - }, - "require-dev": { - "drupal/devel": "^4.0", - "drupal/metatag_dc": "*", - "drupal/metatag_open_graph": "*", - "drupal/page_manager": "4.x-dev", - "drupal/panelizer": "4.x-dev", - "drupal/redirect": "1.x-dev", - "mpyw/phpunit-patch-serializable-comparison": "*" - }, - "type": "drupal-module", - "extra": { - "drupal": { - "version": "8.x-1.21", - "datestamp": "1657971667", - "security-coverage": { - "status": "covered", - "message": "Covered by Drupal's security advisory policy" - } - } - }, - "notification-url": "https://packages.drupal.org/8/downloads", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "See contributors", - "homepage": "https://www.drupal.org/node/640498/committers", - "role": "Developer" - }, - { - "name": "Dave Reid", - "homepage": "https://www.drupal.org/user/53892" - } - ], - "description": "Manage meta tags for all entities.", - "homepage": "https://www.drupal.org/project/metatag", - "keywords": [ - "Drupal", - "seo" - ], - "support": { - "source": "https://git.drupalcode.org/project/metatag", - "issues": "https://www.drupal.org/project/issues/metatag", - "docs": "https://www.drupal.org/docs/8/modules/metatag" - } - }, { "name": "myclabs/deep-copy", "version": "1.9.5", From 806059cb148e4433926a0d69c51750d55a6bbf8c Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:37:58 +0100 Subject: [PATCH 21/28] Add a way to set the getDistReference --- tests/Url/DrupalGeneratorTest.php | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 77794b5..0ce7fb5 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -62,13 +62,32 @@ public function compareUrlProvider() { return array( 'semver' => array( - $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), - $this->getPackageWithSource('drupal/webform', '6.0.1', 'https://git.drupalcode.org/project/webform.git'), - 'https://gitlab.acme.org/acme/package/compare/6.0.0...6.0.1', + $this->getPackageWithSourceAndDist('drupal/webform', '6.0.0', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + $this->getPackageWithSourceAndDist('drupal/webform', '6.0.1', '6.0.1', 'https://git.drupalcode.org/project/webform.git'), + 'https://git.drupalcode.org/project/webform/compare/6.0.0...6.0.1', ), ); } + /** + * @param string $name + * @param string $version + * @param string|null $sourceUrl + * @param string|null $sourceReference + * + * @return mixed + */ + protected function getPackageWithSourceAndDist($name, $version, $dist_version, $sourceUrl, $sourceReference = null) + { + $package = $this->getPackage($name, $version, $sourceReference); + $package->method('getSourceUrl')->willReturn($sourceUrl); + $package->method('getDistReference')->willReturn($dist_version); + $package->method('getSourceReference')->willReturn($sourceReference); + $package->method('isDev')->willReturn(0 === strpos($version, 'dev-') || '-dev' === substr($version, -4)); + + return $package; + } + /** * {@inheritdoc} */ From 8687dd9f597df74542867c617a2e138e2e5fb6e8 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:41:32 +0100 Subject: [PATCH 22/28] Attempt to get the tests passing. --- src/Url/DrupalGenerator.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 4164263..0deed77 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -43,7 +43,15 @@ public function getReleaseUrl(PackageInterface $package) return null; } - $version = $package->getDistReference(); + if ($package->getDistReference()) { + $version = $package->getDistReference(); + } + elseif ($package->getSourceReference()) { + $version = $package->getSourceReference(); + } + else { + return null; + } return sprintf('%s/releases/%s', $this->getProjectUrl($package), $version); } From 45e184512339d363ed30eb9fc5063a6d15dfbfe6 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:43:55 +0100 Subject: [PATCH 23/28] Add the source references. --- tests/Url/DrupalGeneratorTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 0ce7fb5..353686e 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -10,15 +10,15 @@ public function releaseUrlProvider() { return array( 'contrib-legacy-version' => array( - $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git'), + $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git', '8.x-1.0'), 'https://www.drupal.org/project/token/releases/8.x-1.0', ), 'contrib-semver-version' => array( - $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git', '6.0.0'), 'https://www.drupal.org/project/webform/releases/6.0.0', ), 'core' => array( - $this->getPackageWithSource('drupal/core', '9.0.0', 'https://github.com/drupal/core.git'), + $this->getPackageWithSource('drupal/core', '9.0.0', 'https://github.com/drupal/core.git', '9.0.0'), 'https://www.drupal.org/project/drupal/releases/9.0.0', ), 'core-dev' => array( From 42eb362011ec56bc684a41a0efa03114cb248e96 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:50:32 +0100 Subject: [PATCH 24/28] Add an extra test for legacy versions. --- tests/Url/DrupalGeneratorTest.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 353686e..56caa33 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -10,7 +10,7 @@ public function releaseUrlProvider() { return array( 'contrib-legacy-version' => array( - $this->getPackageWithSource('drupal/token', '8.x-1.0', 'https://git.drupalcode.org/project/token.git', '8.x-1.0'), + $this->getPackageWithSource('drupal/token', '1.0.0', 'https://git.drupalcode.org/project/token.git', '8.x-1.0'), 'https://www.drupal.org/project/token/releases/8.x-1.0', ), 'contrib-semver-version' => array( @@ -62,10 +62,15 @@ public function compareUrlProvider() { return array( 'semver' => array( - $this->getPackageWithSourceAndDist('drupal/webform', '6.0.0', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), - $this->getPackageWithSourceAndDist('drupal/webform', '6.0.1', '6.0.1', 'https://git.drupalcode.org/project/webform.git'), + $this->getPackageWithSourceAndDist('drupal/webform', '6.0.0', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + $this->getPackageWithSourceAndDist('drupal/webform', '6.0.1', '6.0.1', 'https://git.drupalcode.org/project/webform.git'), 'https://git.drupalcode.org/project/webform/compare/6.0.0...6.0.1', ), + 'legacy-version' => array( + $this->getPackageWithSourceAndDist('drupal/color_field', '2.4.0', '8.x-2.4', 'https://git.drupalcode.org/project/color_field.git'), + $this->getPackageWithSourceAndDist('drupal/color_field', '2.5.0', '8.x-2.5', 'https://git.drupalcode.org/project/color_field.git'), + 'https://git.drupalcode.org/project/color_field/compare/8.x-2.4...8.x-2.5', + ), ); } From 9a938bd193410682244ad4739d30ee72a68b5a8b Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:54:17 +0100 Subject: [PATCH 25/28] Fix the PHP 8.3 deprecation notice. --- src/Command/BaseNotTypedCommand.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Command/BaseNotTypedCommand.php b/src/Command/BaseNotTypedCommand.php index 908af86..30a9aa7 100644 --- a/src/Command/BaseNotTypedCommand.php +++ b/src/Command/BaseNotTypedCommand.php @@ -13,6 +13,7 @@ */ abstract class BaseNotTypedCommand extends BaseCommand { + #[\ReturnTypeWillChange] protected function execute(InputInterface $input, OutputInterface $output) { return $this->handle($input, $output); From cb1c968e2e2455c1ce306b3f7b8a08a40f318c86 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Tue, 23 Apr 2024 06:57:29 +0100 Subject: [PATCH 26/28] Revert "Fix the PHP 8.3 deprecation notice." This reverts commit 9a938bd193410682244ad4739d30ee72a68b5a8b. --- src/Command/BaseNotTypedCommand.php | 1 - 1 file changed, 1 deletion(-) diff --git a/src/Command/BaseNotTypedCommand.php b/src/Command/BaseNotTypedCommand.php index 30a9aa7..908af86 100644 --- a/src/Command/BaseNotTypedCommand.php +++ b/src/Command/BaseNotTypedCommand.php @@ -13,7 +13,6 @@ */ abstract class BaseNotTypedCommand extends BaseCommand { - #[\ReturnTypeWillChange] protected function execute(InputInterface $input, OutputInterface $output) { return $this->handle($input, $output); From 1e0e1da31431fa1c3038c4dce0c6629891550003 Mon Sep 17 00:00:00 2001 From: Ion Bazan Date: Fri, 26 Apr 2024 16:46:22 +0800 Subject: [PATCH 27/28] Fix DrupalGenerator --- .github/workflows/test.yml | 2 +- phpstan.neon | 2 + src/Url/DrupalGenerator.php | 56 ++++++++++++---------------- tests/Url/DrupalGeneratorTest.php | 19 ++++++++-- tests/Url/GeneratorContainerTest.php | 3 ++ 5 files changed, 45 insertions(+), 37 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index b3a537a..39853db 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -64,7 +64,7 @@ jobs: run: | composer config --no-plugins allow-plugins.infection/extension-installer true composer req infection/infection -W - vendor/bin/infection --ignore-msi-with-no-mutations --min-covered-msi=100 --min-msi=100 -s -j4 + vendor/bin/infection --ignore-msi-with-no-mutations --min-covered-msi=100 --min-msi=100 -s -j4 --only-covered - name: Run phpstan if: ${{ matrix.php-versions == 8.3 && matrix.operating-system == 'ubuntu-latest' }} run: | diff --git a/phpstan.neon b/phpstan.neon index 9bf6e70..ab15896 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -2,6 +2,8 @@ parameters: level: 6 paths: - src + excludePaths: + - src/Command/BaseNotTypedCommand.php checkGenericClassInNonGenericObjectType: true checkMissingIterableValueType: true bootstrapFiles: diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index 0deed77..b33be01 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -7,12 +7,14 @@ class DrupalGenerator extends GitlabGenerator { + const DRUPAL_CORE = 'drupal/core'; + /** * {@inheritdoc} */ public function supportsPackage(PackageInterface $package) { - return 'drupal/core' === $package->getName() || in_array($package->getType(), array('drupal-module', 'drupal-theme')) || parent::supportsPackage($package); + return self::DRUPAL_CORE === $package->getName() || parent::supportsPackage($package); } /** @@ -24,13 +26,7 @@ protected function getCompareRef(PackageInterface $package) return $package->getDistReference(); } - $reference = $package->getSourceReference(); - - if (40 === \strlen($reference)) { - return \substr($reference, 0, 7); - } - - return $reference; + return parent::getCompareRef($package); } /** @@ -43,17 +39,7 @@ public function getReleaseUrl(PackageInterface $package) return null; } - if ($package->getDistReference()) { - $version = $package->getDistReference(); - } - elseif ($package->getSourceReference()) { - $version = $package->getSourceReference(); - } - else { - return null; - } - - return sprintf('%s/releases/%s', $this->getProjectUrl($package), $version); + return sprintf('%s/releases/%s', $this->getProjectUrl($package), $this->getVersionReference($package)); } /** @@ -61,13 +47,7 @@ public function getReleaseUrl(PackageInterface $package) */ public function getProjectUrl(PackageInterface $package) { - if ($package instanceof CompletePackageInterface) { - return $package->getHomepage(); - } - - $name = $this->getDrupalProjectName($package); - - return sprintf('https://www.drupal.org/project/%s', $name); + return sprintf('https://www.drupal.org/project/%s', $this->getDrupalProjectName($package)); } /** @@ -78,15 +58,27 @@ protected function getDomain() return 'git.drupalcode.org'; } - protected function getDrupalProjectName(PackageInterface $package) + /** + * @return string|null + */ + private function getVersionReference(PackageInterface $package) { - list(, $name) = explode('/', $package->getName(), 2); + if ($package->getDistReference()) { + return $package->getDistReference(); + } - // Special handling for drupal/core only. - if ('core' === $name) { - $name = 'drupal'; + return $package->getSourceReference(); + } + + /** + * @return string + */ + private function getDrupalProjectName(PackageInterface $package) + { + if ($package->getName() === self::DRUPAL_CORE) { + return 'drupal'; } - return $name; + return preg_replace('/^drupal\//', '', $package->getName()); } } diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index 56caa33..efb2b2e 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -2,6 +2,8 @@ namespace IonBazan\ComposerDiff\Tests\Url; +use Composer\Package\CompletePackageInterface; +use Composer\Package\PackageInterface; use IonBazan\ComposerDiff\Url\DrupalGenerator; class DrupalGeneratorTest extends GeneratorTest @@ -17,6 +19,10 @@ public function releaseUrlProvider() $this->getPackageWithSource('drupal/webform', '6.0.0', 'https://git.drupalcode.org/project/webform.git', '6.0.0'), 'https://www.drupal.org/project/webform/releases/6.0.0', ), + 'semver-semver-dist' => array( + $this->getPackageWithSourceAndDist('drupal/webform', '6.0.0', '6.0.0', 'https://git.drupalcode.org/project/webform.git'), + 'https://www.drupal.org/project/webform/releases/6.0.0', + ), 'core' => array( $this->getPackageWithSource('drupal/core', '9.0.0', 'https://github.com/drupal/core.git', '9.0.0'), 'https://www.drupal.org/project/drupal/releases/9.0.0', @@ -70,7 +76,12 @@ public function compareUrlProvider() $this->getPackageWithSourceAndDist('drupal/color_field', '2.4.0', '8.x-2.4', 'https://git.drupalcode.org/project/color_field.git'), $this->getPackageWithSourceAndDist('drupal/color_field', '2.5.0', '8.x-2.5', 'https://git.drupalcode.org/project/color_field.git'), 'https://git.drupalcode.org/project/color_field/compare/8.x-2.4...8.x-2.5', - ), + ), + 'dev-version' => array( + $this->getPackageWithSourceAndDist('drupal/color_field', '2.4.0', '8.x-2.4', 'https://git.drupalcode.org/project/color_field.git'), + $this->getPackageWithSourceAndDist('drupal/color_field', 'dev-2.5.0', '8.x-2.5', 'https://git.drupalcode.org/project/color_field.git', 'd46283075d76ed244f7825b378eeb1cee246af73'), + 'https://git.drupalcode.org/project/color_field/compare/8.x-2.4...d462830', + ), ); } @@ -80,13 +91,13 @@ public function compareUrlProvider() * @param string|null $sourceUrl * @param string|null $sourceReference * - * @return mixed + * @return PackageInterface */ - protected function getPackageWithSourceAndDist($name, $version, $dist_version, $sourceUrl, $sourceReference = null) + protected function getPackageWithSourceAndDist($name, $version, $distVersion, $sourceUrl, $sourceReference = null) { $package = $this->getPackage($name, $version, $sourceReference); $package->method('getSourceUrl')->willReturn($sourceUrl); - $package->method('getDistReference')->willReturn($dist_version); + $package->method('getDistReference')->willReturn($distVersion); $package->method('getSourceReference')->willReturn($sourceReference); $package->method('isDev')->willReturn(0 === strpos($version, 'dev-') || '-dev' === substr($version, -4)); diff --git a/tests/Url/GeneratorContainerTest.php b/tests/Url/GeneratorContainerTest.php index 6660204..5ac03f4 100644 --- a/tests/Url/GeneratorContainerTest.php +++ b/tests/Url/GeneratorContainerTest.php @@ -19,6 +19,9 @@ public function testGetsProperGenerator() $this->assertNotSame($gitlabGenerator, $gitlab2Generator); $this->assertNull($container->get($this->getPackageWithSource('', '', 'https://gitlab3.org'))); $this->assertNull($container->get($this->getPackageWithSource('', '', null))); + $drupalGenerator = $container->get($this->getPackageWithSource('', '', 'https://git.drupalcode.org')); + $this->assertInstanceOf('IonBazan\ComposerDiff\Url\DrupalGenerator', $drupalGenerator); + $this->assertNotSame($gitlabGenerator, $drupalGenerator); } public function testItSupportsPackageSupportedByOneOfTheGenerators() From e2a7c06df4f45dd25cdd0cc4da4432f12bcd6329 Mon Sep 17 00:00:00 2001 From: Steven Jones Date: Fri, 26 Apr 2024 10:48:08 +0100 Subject: [PATCH 28/28] Fix coding style issues. --- src/Url/DrupalGenerator.php | 3 +-- tests/Url/DrupalGeneratorTest.php | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/Url/DrupalGenerator.php b/src/Url/DrupalGenerator.php index b33be01..94dd7f1 100644 --- a/src/Url/DrupalGenerator.php +++ b/src/Url/DrupalGenerator.php @@ -2,7 +2,6 @@ namespace IonBazan\ComposerDiff\Url; -use Composer\Package\CompletePackageInterface; use Composer\Package\PackageInterface; class DrupalGenerator extends GitlabGenerator @@ -75,7 +74,7 @@ private function getVersionReference(PackageInterface $package) */ private function getDrupalProjectName(PackageInterface $package) { - if ($package->getName() === self::DRUPAL_CORE) { + if (self::DRUPAL_CORE === $package->getName()) { return 'drupal'; } diff --git a/tests/Url/DrupalGeneratorTest.php b/tests/Url/DrupalGeneratorTest.php index efb2b2e..58ccb0b 100644 --- a/tests/Url/DrupalGeneratorTest.php +++ b/tests/Url/DrupalGeneratorTest.php @@ -2,7 +2,6 @@ namespace IonBazan\ComposerDiff\Tests\Url; -use Composer\Package\CompletePackageInterface; use Composer\Package\PackageInterface; use IonBazan\ComposerDiff\Url\DrupalGenerator;