diff --git a/composer.json b/composer.json index 38078d6b06f86a2ddf1e0642a284eb7c2fb7a39b..b9536cfe35c6e64368fb084cf6253316f9150134 100644 --- a/composer.json +++ b/composer.json @@ -5,10 +5,10 @@ "license": "GPL-2.0+", "require": { "composer/installers": "^1.0.24", - "wikimedia/composer-merge-plugin": "~1.4" + "wikimedia/composer-merge-plugin": "^1.4" }, "replace": { - "drupal/core": "~8.4" + "drupal/core": "^8.4" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index d7c3a26a81cae584575c99bb2207a95fd1ccb5de..6622a70a91f068a4dd2564a8ccccd53aab0440fe 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "5264cac45d935c61a1d48a32b71c9f15", + "content-hash": "bec46eaaa9fa07a4cbd8c84302f0d275", "packages": [ { "name": "asm89/stack-cors", diff --git a/core/composer.json b/core/composer.json index f38de18be85bcb2c782bdb0ba7b7b39179544aab..0d103002c7cd4aa17ccfc082a39a460b610387ea 100644 --- a/core/composer.json +++ b/core/composer.json @@ -5,47 +5,47 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "symfony/class-loader": "~3.2", - "symfony/console": "~3.2", - "symfony/dependency-injection": "~3.2", - "symfony/event-dispatcher": "~3.2", - "symfony/http-foundation": "~3.2", - "symfony/http-kernel": "~3.2", - "symfony/routing": "~3.2", - "symfony/serializer": "~3.2", - "symfony/translation": "~3.2", - "symfony/validator": "~3.2", - "symfony/process": "~3.2", - "symfony/polyfill-iconv": "~1.0", - "symfony/yaml": "~3.2", + "symfony/class-loader": "^3.2", + "symfony/console": "^3.2", + "symfony/dependency-injection": "^3.2", + "symfony/event-dispatcher": "^3.2", + "symfony/http-foundation": "^3.2", + "symfony/http-kernel": "^3.2", + "symfony/routing": "^3.2", + "symfony/serializer": "^3.2", + "symfony/translation": "^3.2", + "symfony/validator": "^3.2", + "symfony/process": "^3.2", + "symfony/polyfill-iconv": "^1.0", + "symfony/yaml": "^3.2", "twig/twig": "^1.23.1", "doctrine/common": "^2.5", - "doctrine/annotations": "1.2.*", + "doctrine/annotations": "^1.2", "guzzlehttp/guzzle": "^6.2.1", - "symfony-cmf/routing": "~1.4", - "easyrdf/easyrdf": "0.9.*", - "zendframework/zend-feed": "~2.4", - "stack/builder": "1.0.*", - "egulias/email-validator": "1.2.*", - "masterminds/html5": "~2.1", + "symfony-cmf/routing": "^1.4", + "easyrdf/easyrdf": "^0.9", + "zendframework/zend-feed": "^2.4", + "stack/builder": "^1.0", + "egulias/email-validator": "^1.2", + "masterminds/html5": "^2.1", "symfony/psr-http-message-bridge": "^1.0", - "zendframework/zend-diactoros": "~1.1", - "composer/semver": "~1.0", + "zendframework/zend-diactoros": "^1.1", + "composer/semver": "^1.0", "paragonie/random_compat": "^1.0|^2.0", - "asm89/stack-cors": "~1.1" + "asm89/stack-cors": "^1.1" }, "conflict": { "drush/drush": "<8.1.10" }, "require-dev": { "behat/mink": "1.7.x-dev", - "behat/mink-goutte-driver": "~1.2", - "drupal/coder": "8.2.12", - "jcalderonzumba/gastonjs": "~1.0.2", - "jcalderonzumba/mink-phantomjs-driver": "~0.3.1", - "mikey179/vfsStream": "~1.2", + "behat/mink-goutte-driver": "^1.2", + "drupal/coder": "^8.2.12", + "jcalderonzumba/gastonjs": "^1.0.2", + "jcalderonzumba/mink-phantomjs-driver": "^0.3.1", + "mikey179/vfsStream": "^1.2", "phpunit/phpunit": ">=4.8.35 <5", - "symfony/css-selector": "~3.2", + "symfony/css-selector": "^3.2", "symfony/phpunit-bridge": "^3.2" }, "replace": { diff --git a/core/lib/Drupal/Component/Annotation/composer.json b/core/lib/Drupal/Component/Annotation/composer.json index 76254ea7faa1ec41b716df8b8f44acbf7b59ba75..ff33d29b068ce57078646d22e0ac582819fbf6fd 100644 --- a/core/lib/Drupal/Component/Annotation/composer.json +++ b/core/lib/Drupal/Component/Annotation/composer.json @@ -8,9 +8,9 @@ "php": ">=5.5.9", "doctrine/common": "2.5.*", "doctrine/annotations": "1.2.*", - "drupal/core-fileCache": "~8.2", - "drupal/core-plugin": "~8.2", - "drupal/core-utility": "~8.2" + "drupal/core-fileCache": "^8.2", + "drupal/core-plugin": "^8.2", + "drupal/core-utility": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Bridge/composer.json b/core/lib/Drupal/Component/Bridge/composer.json index af6da1862ddd6a2079c93debdd9429a87dc1457b..928d8676d47a03d3afc24d660cce9c636806391a 100644 --- a/core/lib/Drupal/Component/Bridge/composer.json +++ b/core/lib/Drupal/Component/Bridge/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "zendframework/zend-feed": "~2.4" + "zendframework/zend-feed": "^2.4" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Datetime/composer.json b/core/lib/Drupal/Component/Datetime/composer.json index 04d965355a9abb18fbf49b9b8d0d42dad16b535f..1df4328f1fe79e759341b14e91964fd72a2572f7 100644 --- a/core/lib/Drupal/Component/Datetime/composer.json +++ b/core/lib/Drupal/Component/Datetime/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "drupal/core-utility": "~8.2" + "drupal/core-utility": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/DependencyInjection/composer.json b/core/lib/Drupal/Component/DependencyInjection/composer.json index 77013136b95eb701caaa380d2684d28d75297daa..cf2519254d4cbad512a142f628dfa8cb8231aed5 100644 --- a/core/lib/Drupal/Component/DependencyInjection/composer.json +++ b/core/lib/Drupal/Component/DependencyInjection/composer.json @@ -12,7 +12,7 @@ }, "require": { "php": ">=5.5.9", - "symfony/dependency-injection": "~2.8" + "symfony/dependency-injection": "^2.8" }, "suggest": { "symfony/expression-language": "For using expressions in service container configuration" diff --git a/core/lib/Drupal/Component/Diff/composer.json b/core/lib/Drupal/Component/Diff/composer.json index 0d7f3d36f780c798ff3d6ae7d7e3e04dcc4a1cd6..cc584532b6f4bc9265d16f53ce27974b3bec00e7 100644 --- a/core/lib/Drupal/Component/Diff/composer.json +++ b/core/lib/Drupal/Component/Diff/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "drupal/utility": "~8.2" + "drupal/utility": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Discovery/composer.json b/core/lib/Drupal/Component/Discovery/composer.json index 1b0acb677eec23d32a9da207aa1744faa0ae38dc..588480e8571b2a5ad0fa011cf63d0d0333bf25f7 100644 --- a/core/lib/Drupal/Component/Discovery/composer.json +++ b/core/lib/Drupal/Component/Discovery/composer.json @@ -6,8 +6,8 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "drupal/core-filecache": "~8.2", - "drupal/core-serialization": "~8.2" + "drupal/core-filecache": "^8.2", + "drupal/core-serialization": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/EventDispatcher/composer.json b/core/lib/Drupal/Component/EventDispatcher/composer.json index be66232834a3d8112dd827ca46997a69b78cb602..a4db6fafa4d9b372d9af251538054ca375914652 100644 --- a/core/lib/Drupal/Component/EventDispatcher/composer.json +++ b/core/lib/Drupal/Component/EventDispatcher/composer.json @@ -6,8 +6,8 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "symfony/dependency-injection": "~2.8", - "symfony/event-dispatcher": "~2.7" + "symfony/dependency-injection": "^2.8", + "symfony/event-dispatcher": "^2.7" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Gettext/composer.json b/core/lib/Drupal/Component/Gettext/composer.json index 2dab6984898fb5b539bff9d64f4bd35c1200c2e7..16512345b9896633e6339ca3d4ea4640b24d00e7 100644 --- a/core/lib/Drupal/Component/Gettext/composer.json +++ b/core/lib/Drupal/Component/Gettext/composer.json @@ -10,7 +10,7 @@ }, "require": { "php": ">=5.5.9", - "drupal/core-utility": "~8.2" + "drupal/core-utility": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/HttpFoundation/composer.json b/core/lib/Drupal/Component/HttpFoundation/composer.json index 1b3920bc3dfcb4cc993562166421589c0b5f107c..b86ab16ba773eeffd4ce9d995d40d3edf2f799c3 100644 --- a/core/lib/Drupal/Component/HttpFoundation/composer.json +++ b/core/lib/Drupal/Component/HttpFoundation/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "symfony/http-foundation": "~2.7" + "symfony/http-foundation": "^2.7" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Plugin/composer.json b/core/lib/Drupal/Component/Plugin/composer.json index 4ffeeed3a274b7349aa49806afcb2d9b7e80fd2d..118265715cd4f32b393cba6e362b2ee2fa48e988 100644 --- a/core/lib/Drupal/Component/Plugin/composer.json +++ b/core/lib/Drupal/Component/Plugin/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "symfony/validator": "~2.7" + "symfony/validator": "^2.7" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Render/composer.json b/core/lib/Drupal/Component/Render/composer.json index 88291e91bb1a112499787d455ecae378998f5ece..50c2f70d90e35198c8cb97e8035d876badd7f46d 100644 --- a/core/lib/Drupal/Component/Render/composer.json +++ b/core/lib/Drupal/Component/Render/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "drupal/core-utility": "~8.2" + "drupal/core-utility": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Serialization/composer.json b/core/lib/Drupal/Component/Serialization/composer.json index 5d629cfc1591e6fc2ce3d4458ee689602c558ab6..97fd639319693b94ff4b3fa84a16f02234e687d3 100644 --- a/core/lib/Drupal/Component/Serialization/composer.json +++ b/core/lib/Drupal/Component/Serialization/composer.json @@ -6,7 +6,7 @@ "license": "GPL-2.0+", "require": { "php": ">=5.5.9", - "symfony/yaml": "~2.7" + "symfony/yaml": "^2.7" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Utility/composer.json b/core/lib/Drupal/Component/Utility/composer.json index 13671efef403430f1e3c0f90779928018b8c2549..5fa20796ce1da93f90e500303290ca0df527c0c3 100644 --- a/core/lib/Drupal/Component/Utility/composer.json +++ b/core/lib/Drupal/Component/Utility/composer.json @@ -7,7 +7,7 @@ "require": { "php": ">=5.5.9", "paragonie/random_compat": "^1.0|^2.0", - "drupal/core-render": "~8.2" + "drupal/core-render": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/lib/Drupal/Component/Uuid/composer.json b/core/lib/Drupal/Component/Uuid/composer.json index deca54b80d421b7290e0f348056cd4c6fc925ed4..7c43422dca64a6642c5b65e56d8959c579af79f3 100644 --- a/core/lib/Drupal/Component/Uuid/composer.json +++ b/core/lib/Drupal/Component/Uuid/composer.json @@ -10,7 +10,7 @@ }, "require": { "php": ">=5.5.9", - "drupal/core-utility": "~8.2" + "drupal/core-utility": "^8.2" }, "autoload": { "psr-4": { diff --git a/core/tests/Drupal/Tests/ComposerIntegrationTest.php b/core/tests/Drupal/Tests/ComposerIntegrationTest.php index a64804cf8b8f74ee0dc7658ef761901838305359..5619b84d04aee95a6334fd57ab236cad16390cb7 100644 --- a/core/tests/Drupal/Tests/ComposerIntegrationTest.php +++ b/core/tests/Drupal/Tests/ComposerIntegrationTest.php @@ -88,6 +88,46 @@ public function testComposerLockHash() { $this->assertSame($content_hash, $lock['content-hash']); } + /** + * Tests composer.json versions. + * + * @param string $path + * Path to a composer.json to test. + * + * @dataProvider providerTestComposerJson + */ + public function testComposerTilde($path) { + $content = json_decode(file_get_contents($path), TRUE); + $composer_keys = array_intersect(['require', 'require-dev'], array_keys($content)); + if (empty($composer_keys)) { + $this->markTestSkipped("$path has no keys to test"); + } + foreach ($composer_keys as $composer_key) { + foreach ($content[$composer_key] as $dependency => $version) { + $this->assertFalse(strpos($version, '~'), "Dependency $dependency in $path contains a tilde, use a caret."); + } + } + } + + /** + * Data provider for all the composer.json provided by Drupal core. + * + * @return array + */ + public function providerTestComposerJson() { + $root = realpath(__DIR__ . '/../../../../'); + $tests = [[$root . '/composer.json']]; + $directory = new \RecursiveDirectoryIterator($root . '/core'); + $iterator = new \RecursiveIteratorIterator($directory); + /** @var \SplFileInfo $file */ + foreach ($iterator as $file) { + if ($file->getFilename() === 'composer.json' && strpos($file->getPath(), 'core/modules/system/tests/fixtures/HtaccessTest') === FALSE) { + $tests[] = [$file->getRealPath()]; + } + } + return $tests; + } + /** * Tests core's composer.json replace section. *