From da288643ff6d8505a66bd388d4e82fd2ea04b0b3 Mon Sep 17 00:00:00 2001
From: Alex Pott <alex.a.pott@googlemail.com>
Date: Thu, 8 Jan 2015 17:19:41 +0000
Subject: [PATCH] Issue #1975220 by davidwbarratt, tstoeckler, mradcliffe,
 RobLoach, Mile23, hussainweb: Allow a Composer user to manage Drupal,
 modules, and PHP dependencies with a custom root composer.json

---
 composer.json                                | 50 +++++---------------
 core/UPGRADE.txt                             |  8 ++--
 core/composer.json                           | 47 ++++++++++++++++++
 composer.lock => core/composer.lock          |  0
 core/vendor/composer/autoload_classmap.php   |  2 +-
 core/vendor/composer/autoload_files.php      |  4 +-
 core/vendor/composer/autoload_namespaces.php |  2 +-
 core/vendor/composer/autoload_psr4.php       |  8 ++--
 core/vendor/composer/include_paths.php       |  2 +-
 example.gitignore                            |  4 ++
 10 files changed, 78 insertions(+), 49 deletions(-)
 create mode 100644 core/composer.json
 rename composer.lock => core/composer.lock (100%)

diff --git a/composer.json b/composer.json
index 722f1faa6194..8f68f6c02253 100644
--- a/composer.json
+++ b/composer.json
@@ -1,48 +1,24 @@
 {
   "name": "drupal/drupal",
   "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-  "type": "drupal-core",
+  "type": "project",
   "license": "GPL-2.0+",
   "require": {
-    "php": ">=5.4.5",
-    "sdboyer/gliph": "0.1.*",
-    "symfony/class-loader": "2.6.*",
-    "symfony/css-selector": "2.6.*",
-    "symfony/dependency-injection": "2.6.*",
-    "symfony/event-dispatcher": "2.6.*",
-    "symfony/http-foundation": "2.6.*",
-    "symfony/http-kernel": "2.6.*",
-    "symfony/routing": "2.6.*",
-    "symfony/serializer": "2.6.*",
-    "symfony/validator": "2.6.*",
-    "symfony/process": "2.6.*",
-    "symfony/yaml": "2.6.*",
-    "twig/twig": "1.16.*",
-    "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
-    "doctrine/annotations": "1.2.*",
-    "guzzlehttp/guzzle": "~5.0",
-    "symfony-cmf/routing": "1.3.*",
-    "easyrdf/easyrdf": "0.9.*",
-    "phpunit/phpunit": "4.1.*",
-    "phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
-    "zendframework/zend-feed": "2.3.*",
-    "mikey179/vfsStream": "1.*",
-    "stack/builder": "1.0.*",
-    "egulias/email-validator": "1.2.*"
-  },
-  "autoload": {
-    "psr-4": {
-      "Drupal\\Core\\": "core/lib/Drupal/Core",
-      "Drupal\\Component\\": "core/lib/Drupal/Component",
-      "Drupal\\Driver\\": "drivers/lib/Drupal/Driver"
-    },
-    "files": [
-      "core/lib/Drupal.php"
-    ]
+    "drupal/core": "~8.0"
   },
+  "minimum-stability": "dev",
+  "prefer-stable": true,
+  "repositories": [],
   "config": {
-    "vendor-dir": "core/vendor",
     "preferred-install": "dist",
     "autoloader-suffix": "Drupal8"
+  },
+  "extra": {
+    "_readme": [
+      "This is an example file to show how a Drupal website can be managed via",
+      "Composer. It does not work out of the box but requires a Git subtree",
+      "split of the core directory to be added to the repositories",
+      "section above."
+    ]
   }
 }
diff --git a/core/UPGRADE.txt b/core/UPGRADE.txt
index 7c43bbca8ce1..9b834565c697 100644
--- a/core/UPGRADE.txt
+++ b/core/UPGRADE.txt
@@ -58,8 +58,9 @@ following the instructions in the INTRODUCTION section at the top of this file:
 3. Remove all old core files and directories, except for the 'sites' directory
    and any custom files you added elsewhere.
 
-   If you made modifications to files like .htaccess or robots.txt, you will
-   need to re-apply them from your backup, after the new files are in place.
+   If you made modifications to files like .htaccess, composer.json, or
+   robots.txt you will need to re-apply them from your backup, after the new
+   files are in place.
 
    Sometimes an update includes changes to default.settings.php (this will be
    noted in the release notes). If that's the case, follow these steps:
@@ -93,7 +94,8 @@ following the instructions in the INTRODUCTION section at the top of this file:
    from http://drupal.org using your web browser, extract it, and then use an
    FTP client to upload the files to your web root.
 
-5. Re-apply any modifications to files such as .htaccess or robots.txt.
+5. Re-apply any modifications to files such as .htaccess, composer.json, or
+   robots.txt.
 
 6. Run update.php by visiting http://www.example.com/update.php (replace
    www.example.com with your domain name). This will update the core database
diff --git a/core/composer.json b/core/composer.json
new file mode 100644
index 000000000000..4c2e76fe003e
--- /dev/null
+++ b/core/composer.json
@@ -0,0 +1,47 @@
+{
+  "name": "drupal/core",
+  "description": "Drupal is an open source content management platform powering millions of websites and applications.",
+  "type": "drupal-core",
+  "license": "GPL-2.0+",
+  "require": {
+    "php": ">=5.4.5",
+    "sdboyer/gliph": "0.1.*",
+    "symfony/class-loader": "2.6.*",
+    "symfony/css-selector": "2.6.*",
+    "symfony/dependency-injection": "2.6.*",
+    "symfony/event-dispatcher": "2.6.*",
+    "symfony/http-foundation": "2.6.*",
+    "symfony/http-kernel": "2.6.*",
+    "symfony/routing": "2.6.*",
+    "symfony/serializer": "2.6.*",
+    "symfony/validator": "2.6.*",
+    "symfony/process": "2.6.*",
+    "symfony/yaml": "2.6.*",
+    "twig/twig": "1.16.*",
+    "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
+    "doctrine/annotations": "1.2.*",
+    "guzzlehttp/guzzle": "~5.0",
+    "symfony-cmf/routing": "1.3.*",
+    "easyrdf/easyrdf": "0.9.*",
+    "phpunit/phpunit": "4.1.*",
+    "phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
+    "zendframework/zend-feed": "2.3.*",
+    "mikey179/vfsStream": "1.*",
+    "stack/builder": "1.0.*",
+    "egulias/email-validator": "1.2.*"
+  },
+  "autoload": {
+    "psr-4": {
+      "Drupal\\Core\\": "lib/Drupal/Core",
+      "Drupal\\Component\\": "lib/Drupal/Component",
+      "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver"
+    },
+    "files": [
+      "lib/Drupal.php"
+    ]
+  },
+  "config": {
+    "preferred-install": "dist",
+    "autoloader-suffix": "Drupal8"
+  }
+}
diff --git a/composer.lock b/core/composer.lock
similarity index 100%
rename from composer.lock
rename to core/composer.lock
diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php
index 670145c037f5..9f66986c9cf5 100644
--- a/core/vendor/composer/autoload_classmap.php
+++ b/core/vendor/composer/autoload_classmap.php
@@ -3,7 +3,7 @@
 // autoload_classmap.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/File/Iterator.php',
diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php
index de3bf98e8401..c85d22cbdb20 100644
--- a/core/vendor/composer/autoload_files.php
+++ b/core/vendor/composer/autoload_files.php
@@ -3,9 +3,9 @@
 // autoload_files.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     $vendorDir . '/react/promise/src/functions.php',
-    $baseDir . '/core/lib/Drupal.php',
+    $baseDir . '/lib/Drupal.php',
 );
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 54e2998cc44c..ffe0cd5b9f9f 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -3,7 +3,7 @@
 // autoload_namespaces.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     'org\\bovigo\\vfs\\' => array($vendorDir . '/mikey179/vfsStream/src/main/php'),
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index 1b053f1695a7..8b6150bd3acb 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -3,7 +3,7 @@
 // autoload_psr4.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
@@ -11,7 +11,7 @@
     'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
     'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ringphp/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
-    'Drupal\\Driver\\' => array($baseDir . '/drivers/lib/Drupal/Driver'),
-    'Drupal\\Core\\' => array($baseDir . '/core/lib/Drupal/Core'),
-    'Drupal\\Component\\' => array($baseDir . '/core/lib/Drupal/Component'),
+    'Drupal\\Driver\\' => array($baseDir . '/../drivers/lib/Drupal/Driver'),
+    'Drupal\\Core\\' => array($baseDir . '/lib/Drupal/Core'),
+    'Drupal\\Component\\' => array($baseDir . '/lib/Drupal/Component'),
 );
diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php
index b43900abbddc..b3ec291e3e30 100644
--- a/core/vendor/composer/include_paths.php
+++ b/core/vendor/composer/include_paths.php
@@ -3,7 +3,7 @@
 // include_paths.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     $vendorDir . '/phpunit/php-text-template',
diff --git a/example.gitignore b/example.gitignore
index e6c22130f030..e2f0124547ca 100644
--- a/example.gitignore
+++ b/example.gitignore
@@ -7,6 +7,10 @@
 # Because .gitignore can be specific to your site, this file has a different
 # name; updating Drupal core will not override your custom .gitignore file.
 
+# Ignore core and vendor when managing dependencies with Composer.
+# core
+# vendor
+
 # Ignore configuration files that may contain sensitive information.
 sites/*/settings*.php
 sites/*/services*.yml
-- 
GitLab