From 1d22a7bfbb6aa3e7b118feb46fa7858a81b50b57 Mon Sep 17 00:00:00 2001
From: Chris McCafferty <cilefen@gmail.com>
Date: Sat, 17 Jun 2017 12:55:00 -0400
Subject: [PATCH] Revert "Issue #2769841 by edgewl2, alexpott, heddn: Prefer
 caret over tilde in composer.json"

This reverts commit 7c48639922f9b965c620e4f16a1a26764d39eca5.
---
 composer.json                                 |  4 +-
 composer.lock                                 |  2 +-
 core/composer.json                            | 58 +++++++++----------
 .../Drupal/Component/Annotation/composer.json |  6 +-
 .../lib/Drupal/Component/Bridge/composer.json |  2 +-
 .../Drupal/Component/Datetime/composer.json   |  2 +-
 .../DependencyInjection/composer.json         |  2 +-
 core/lib/Drupal/Component/Diff/composer.json  |  2 +-
 .../Drupal/Component/Discovery/composer.json  |  4 +-
 .../Component/EventDispatcher/composer.json   |  4 +-
 .../Drupal/Component/Gettext/composer.json    |  2 +-
 .../Component/HttpFoundation/composer.json    |  2 +-
 .../lib/Drupal/Component/Plugin/composer.json |  2 +-
 .../lib/Drupal/Component/Render/composer.json |  2 +-
 .../Component/Serialization/composer.json     |  2 +-
 .../Drupal/Component/Utility/composer.json    |  2 +-
 core/lib/Drupal/Component/Uuid/composer.json  |  2 +-
 .../Drupal/Tests/ComposerIntegrationTest.php  | 40 -------------
 18 files changed, 50 insertions(+), 90 deletions(-)

diff --git a/composer.json b/composer.json
index b9536cfe35c6..38078d6b06f8 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 6622a70a91f0..d7c3a26a81ca 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": "bec46eaaa9fa07a4cbd8c84302f0d275",
+    "content-hash": "5264cac45d935c61a1d48a32b71c9f15",
     "packages": [
         {
             "name": "asm89/stack-cors",
diff --git a/core/composer.json b/core/composer.json
index 0d103002c7cd..f38de18be85b 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 ff33d29b068c..76254ea7faa1 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 928d8676d47a..af6da1862ddd 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 1df4328f1fe7..04d965355a9a 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 cf2519254d4c..77013136b95e 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 cc584532b6f4..0d7f3d36f780 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 588480e8571b..1b0acb677eec 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 a4db6fafa4d9..be66232834a3 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 16512345b989..2dab6984898f 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 b86ab16ba773..1b3920bc3dfc 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 118265715cd4..4ffeeed3a274 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 50c2f70d90e3..88291e91bb1a 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 97fd63931969..5d629cfc1591 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 5fa20796ce1d..13671efef403 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 7c43422dca64..deca54b80d42 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 5619b84d04ae..a64804cf8b8f 100644
--- a/core/tests/Drupal/Tests/ComposerIntegrationTest.php
+++ b/core/tests/Drupal/Tests/ComposerIntegrationTest.php
@@ -88,46 +88,6 @@ 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.
    *
-- 
GitLab