From 627a832cc15f9321cbf97eb5692e515800b30f6f Mon Sep 17 00:00:00 2001 From: Patrick Reimers Date: Fri, 1 Mar 2019 19:39:07 +0100 Subject: [PATCH 1/4] Return non zero exit code on deprecation --- src/Composer/Package/Loader/ValidatingArrayLoader.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index 405e567f0..a8aa65331 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -195,7 +195,9 @@ class ValidatingArrayLoader implements LoaderInterface foreach (array_keys(BasePackage::$supportedLinkTypes) as $linkType) { if ($this->validateArray($linkType) && isset($this->config[$linkType])) { foreach ($this->config[$linkType] as $package => $constraint) { - if (!preg_match('{^[A-Za-z0-9_./-]+$}', $package)) { + if ($err = self::hasPackageNamingError($package, true)) { + $this->warnings[] = 'Deprecation warning: '.$linkType.'.'.$err.' Make sure you fix this as Composer 2.0 will error.'; + } elseif (!preg_match('{^[A-Za-z0-9_./-]+$}', $package)) { $this->warnings[] = $linkType.'.'.$package.' : invalid key, package names must be strings containing only [A-Za-z0-9_./-]'; } if (!is_string($constraint)) { From 5d14a95543d12436f3962b32357bafb6ae4bac8b Mon Sep 17 00:00:00 2001 From: Patrick Reimers Date: Fri, 1 Mar 2019 20:11:20 +0100 Subject: [PATCH 2/4] Add test for warning on deprecated naming --- .../Package/Loader/ValidatingArrayLoaderTest.php | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php index ebe6871fe..6de6d45fa 100644 --- a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php @@ -337,6 +337,18 @@ class ValidatingArrayLoaderTest extends TestCase ), false, ), + array( + array( + 'name' => 'foo/bar', + 'require' => array( + 'Foo/Baz' => '^1.0', + ), + ), + array( + 'Deprecation warning: require.Foo/Baz is invalid, it should not contain uppercase characters. Please use foo/baz instead. Make sure you fix this as Composer 2.0 will error.', + ), + false, + ), array( array( 'name' => 'foo/bar', From 8ae8d131d5c8635a6bd34063adfd340e29e3a158 Mon Sep 17 00:00:00 2001 From: Patrick Reimers Date: Tue, 5 Mar 2019 10:44:55 +0100 Subject: [PATCH 3/4] Add deprecation warning for name attribute --- src/Composer/Package/Loader/ValidatingArrayLoader.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index a8aa65331..43f23236b 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -49,6 +49,10 @@ class ValidatingArrayLoader implements LoaderInterface $this->warnings = array(); $this->config = $config; + if ($err = self::hasPackageNamingError($config['name'])) { + $this->warnings[] = 'Deprecation warning: Your package name '.$err.' Make sure you fix this as Composer 2.0 will error.'; + } + if ($this->strictName) { $this->validateRegex('name', '[A-Za-z0-9][A-Za-z0-9_.-]*/[A-Za-z0-9][A-Za-z0-9_.-]*', true); } else { From dd1e80a38f7bb1ce759c127ec405a65f8d97c388 Mon Sep 17 00:00:00 2001 From: Patrick Reimers Date: Tue, 5 Mar 2019 10:53:43 +0100 Subject: [PATCH 4/4] Add tests for wrong package name. --- .../Loader/ValidatingArrayLoaderTest.php | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php index 6de6d45fa..2fc059f3c 100644 --- a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php @@ -298,6 +298,30 @@ class ValidatingArrayLoaderTest extends TestCase 'homepage : invalid value (foo:bar), must be an http/https URL', ), ), + array( + array( + 'name' => 'foo/bar.json', + ), + array( + 'Deprecation warning: Your package name foo/bar.json is invalid, package names can not end in .json, consider renaming it or perhaps using a -json suffix instead. Make sure you fix this as Composer 2.0 will error.', + ), + ), + array( + array( + 'name' => 'com1/foo', + ), + array( + 'Deprecation warning: Your package name com1/foo is reserved, package and vendor names can not match any of: nul, con, prn, aux, com1, com2, com3, com4, com5, com6, com7, com8, com9, lpt1, lpt2, lpt3, lpt4, lpt5, lpt6, lpt7, lpt8, lpt9. Make sure you fix this as Composer 2.0 will error.', + ), + ), + array( + array( + 'name' => 'Foo/Bar', + ), + array( + 'Deprecation warning: Your package name Foo/Bar is invalid, it should not contain uppercase characters. We suggest using foo/bar instead. Make sure you fix this as Composer 2.0 will error.', + ), + ), array( array( 'name' => 'foo/bar',