From 3e6a5cbed26335cc802674515d096010e209f12a Mon Sep 17 00:00:00 2001 From: Rob Davies Date: Thu, 16 Mar 2017 15:11:34 +0000 Subject: [PATCH] Add drupal scaffold --- web/.gitignore | 2 + web/vendor/drupal-composer/drupal-scaffold | 1 - .../drupal-scaffold/.editorconfig | 17 + .../drupal-scaffold/.gitignore | 1 + .../drupal-scaffold/.travis.yml | 25 + .../drupal-composer/drupal-scaffold/README.md | 120 ++ .../drupal-scaffold/composer.json | 25 + .../drupal-scaffold/composer.lock | 1742 +++++++++++++++++ .../drupal-scaffold/phpunit.xml.dist | 15 + .../drupal-scaffold/src/FileFetcher.php | 47 + .../drupal-scaffold/src/Handler.php | 365 ++++ .../src/InitialFileFetcher.php | 24 + .../drupal-scaffold/src/Plugin.php | 81 + .../drupal-scaffold/tests/FetcherTest.php | 99 + .../drupal-scaffold/tests/PluginTest.php | 185 ++ 15 files changed, 2748 insertions(+), 1 deletion(-) delete mode 160000 web/vendor/drupal-composer/drupal-scaffold create mode 100644 web/vendor/drupal-composer/drupal-scaffold/.editorconfig create mode 100644 web/vendor/drupal-composer/drupal-scaffold/.gitignore create mode 100644 web/vendor/drupal-composer/drupal-scaffold/.travis.yml create mode 100644 web/vendor/drupal-composer/drupal-scaffold/README.md create mode 100644 web/vendor/drupal-composer/drupal-scaffold/composer.json create mode 100644 web/vendor/drupal-composer/drupal-scaffold/composer.lock create mode 100644 web/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist create mode 100644 web/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php create mode 100644 web/vendor/drupal-composer/drupal-scaffold/src/Handler.php create mode 100644 web/vendor/drupal-composer/drupal-scaffold/src/InitialFileFetcher.php create mode 100644 web/vendor/drupal-composer/drupal-scaffold/src/Plugin.php create mode 100644 web/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php create mode 100644 web/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php diff --git a/web/.gitignore b/web/.gitignore index 11d331de6..a4e2c9042 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -57,3 +57,5 @@ Thumbs.db # Things in the core directory that Drupal 8 commits in the repository. !core/**/*.gz +# Ignore any extra git folders. +*/.git/ diff --git a/web/vendor/drupal-composer/drupal-scaffold b/web/vendor/drupal-composer/drupal-scaffold deleted file mode 160000 index 3ad465ac8..000000000 --- a/web/vendor/drupal-composer/drupal-scaffold +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 3ad465ac853c2e52e6a808f5529859917662c256 diff --git a/web/vendor/drupal-composer/drupal-scaffold/.editorconfig b/web/vendor/drupal-composer/drupal-scaffold/.editorconfig new file mode 100644 index 000000000..12bcb27e4 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/.editorconfig @@ -0,0 +1,17 @@ +# Drupal editor configuration normalization +# @see http://editorconfig.org/ + +# This is the top-most .editorconfig file; do not search in parent directories. +root = true + +# All files. +[*] +end_of_line = LF +indent_style = space +indent_size = 2 +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[{composer.json,composer.lock}] +indent_size = 4 diff --git a/web/vendor/drupal-composer/drupal-scaffold/.gitignore b/web/vendor/drupal-composer/drupal-scaffold/.gitignore new file mode 100644 index 000000000..22d0d82f8 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/.gitignore @@ -0,0 +1 @@ +vendor diff --git a/web/vendor/drupal-composer/drupal-scaffold/.travis.yml b/web/vendor/drupal-composer/drupal-scaffold/.travis.yml new file mode 100644 index 000000000..72635d7ce --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/.travis.yml @@ -0,0 +1,25 @@ +language: php +php: + - 5.5 + - 5.6 + - 7.0 + +sudo: false + +git: + depth: 10000 + +before_install: + - phpenv config-rm xdebug.ini + - composer --verbose self-update + - composer --version + +install: + - composer --verbose install + +before_script: + - git config --global user.email "travisci@example.com" + - git config --global user.name "Travis CI Test" + +script: + - ./vendor/bin/phpunit diff --git a/web/vendor/drupal-composer/drupal-scaffold/README.md b/web/vendor/drupal-composer/drupal-scaffold/README.md new file mode 100644 index 000000000..82f7c8703 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/README.md @@ -0,0 +1,120 @@ +# drupal-scaffold + +[![Build Status](https://travis-ci.org/drupal-composer/drupal-scaffold.svg?branch=master)](https://travis-ci.org/drupal-composer/drupal-scaffold) + +Composer plugin for automatically downloading Drupal scaffold files (like +`index.php`, `update.php`, …) when using `drupal/core` via Composer. + +It is recommended that the vendor directory be placed in its standard location +at the project root, outside of the Drupal root; however, the location of the +vendor directory and the name of the Drupal root may be placed in whatever +location suits the project. Drupal-scaffold will generate the autoload.php +file at the Drupal root to require the Composer-generated autoload file in the +vendor directory. + +## Usage + +Run `composer require drupal-composer/drupal-scaffold:dev-master` in your composer +project before installing or updating `drupal/core`. + +Once drupal-scaffold is required by your project, it will automatically update +your scaffold files whenever `composer update` changes the version of +`drupal/core` installed. + +## Configuration + +You can configure the plugin with providing some settings in the `extra` section +of your root `composer.json`. + +```json +{ + "extra": { + "drupal-scaffold": { + "source": "http://cgit.drupalcode.org/drupal/plain/{path}?h={version}", + "excludes": [ + "google123.html", + "robots.txt" + ], + "includes": [ + "sites/default/example.settings.my.php" + ], + "initial": { + "sites/default/default.services.yml": "sites/default/services.yml", + "sites/default/default.settings.php": "sites/default/settings.php" + }, + "omit-defaults": false + } + } +} +``` +The `source` option may be used to specify the URL to download the +scaffold files from; the default source is drupal.org. The literal string +`{version}` in the `source` option is replaced with the current version of +Drupal core being updated prior to download. + +With the `drupal-scaffold` option `excludes`, you can provide additional paths +that should not be copied or overwritten. The plugin provides no excludes by +default. + +Default includes are provided by the plugin: +``` +.csslintrc +.editorconfig +.eslintignore +.eslintrc (Drupal <= 8.2.x) +.eslintrc.json (Drupal >= 8.3.x) +.gitattributes +.htaccess +index.php +robots.txt +sites/default/default.settings.php +sites/default/default.services.yml +sites/development.services.yml +sites/example.settings.local.php +sites/example.sites.php +update.php +web.config +``` + +When setting `omit-defaults` to `true`, neither the default excludes nor the +default includes will be provided; in this instance, only those files explicitly +listed in the `excludes` and `includes` options will be considered. If +`omit-defaults` is `false` (the default), then any items listed in `excludes` +or `includes` will be in addition to the usual defaults. + +The `initial` hash lists files that should be copied over only if they do not +exist in the destination. The key specifies the path to the source file, and +the value indicates the path to the destination file. + +## Limitation + +When using Composer to install or update the Drupal development branch, the +scaffold files are always taken from the HEAD of the branch (or, more +specifically, from the most recent development .tar.gz archive). This might +not be what you want when using an old development version (e.g. when the +version is fixed via composer.lock). To avoid problems, always commit your +scaffold files to the repository any time that composer.lock is committed. +Note that the correct scaffold files are retrieved when using a tagged release +of `drupal/core` (recommended). + +## Custom command + +The plugin by default is only downloading the scaffold files when installing or +updating `drupal/core`. If you want to call it manually, you have to add the +command callback to the `scripts`-section of your root `composer.json`, like this: + +```json +{ + "scripts": { + "drupal-scaffold": "DrupalComposer\\DrupalScaffold\\Plugin::scaffold" + } +} +``` + +After that you can manually download the scaffold files according to your +configuration by using `composer drupal-scaffold`. + +It is assumed that the scaffold files will be committed to the repository, to +ensure that the correct files are used on the CI server (see **Limitation**, +above). After running `composer install` for the first time commit the scaffold +files to your repository. diff --git a/web/vendor/drupal-composer/drupal-scaffold/composer.json b/web/vendor/drupal-composer/drupal-scaffold/composer.json new file mode 100644 index 000000000..50da3b254 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/composer.json @@ -0,0 +1,25 @@ +{ + "name": "drupal-composer/drupal-scaffold", + "description": "Composer Plugin for updating the Drupal scaffold files when using drupal/core", + "type": "composer-plugin", + "license": "GPL-2.0+", + "require": { + "php": ">=5.4.5", + "composer-plugin-api": "^1.0.0" + }, + "autoload": { + "psr-4": { + "DrupalComposer\\DrupalScaffold\\": "src/" + } + }, + "extra": { + "class": "DrupalComposer\\DrupalScaffold\\Plugin", + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "require-dev": { + "composer/composer": "dev-master", + "phpunit/phpunit": "^4.4.0" + } +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/composer.lock b/web/vendor/drupal-composer/drupal-scaffold/composer.lock new file mode 100644 index 000000000..c7dc77794 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/composer.lock @@ -0,0 +1,1742 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "116f69e7f88bcdebdc157a80dfaa31c7", + "content-hash": "fcbb0cf6a792bee4cd64b27b2e58909c", + "packages": [], + "packages-dev": [ + { + "name": "composer/ca-bundle", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/composer/ca-bundle.git", + "reference": "a2995e5fe351055f2c7630166af12ce8fd03edfc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/a2995e5fe351055f2c7630166af12ce8fd03edfc", + "reference": "a2995e5fe351055f2c7630166af12ce8fd03edfc", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "symfony/process": "^2.5 || ^3.0" + }, + "suggest": { + "symfony/process": "This is necessary to reliably check whether openssl_x509_parse is vulnerable on older php versions, but can be ignored on PHP 5.5.6+" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\CaBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", + "keywords": [ + "cabundle", + "cacert", + "certificate", + "ssl", + "tls" + ], + "time": "2016-04-13 10:13:24" + }, + { + "name": "composer/composer", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/composer/composer.git", + "reference": "d401f6e95cca835d165c61648327fc1fa062ba31" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/composer/zipball/d401f6e95cca835d165c61648327fc1fa062ba31", + "reference": "d401f6e95cca835d165c61648327fc1fa062ba31", + "shasum": "" + }, + "require": { + "composer/ca-bundle": "^1.0", + "composer/semver": "^1.0", + "composer/spdx-licenses": "^1.0", + "justinrainbow/json-schema": "^1.6", + "php": "^5.3.2 || ^7.0", + "psr/log": "^1.0", + "seld/cli-prompt": "^1.0", + "seld/jsonlint": "^1.4", + "seld/phar-utils": "^1.0", + "symfony/console": "^2.5 || ^3.0", + "symfony/filesystem": "^2.5 || ^3.0", + "symfony/finder": "^2.2 || ^3.0", + "symfony/process": "^2.1 || ^3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "suggest": { + "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", + "ext-zip": "Enabling the zip extension allows you to unzip archives", + "ext-zlib": "Allow gzip compression of HTTP requests" + }, + "bin": [ + "bin/composer" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\": "src/Composer" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "Composer helps you declare, manage and install dependencies of PHP projects, ensuring you have the right stack everywhere.", + "homepage": "https://getcomposer.org/", + "keywords": [ + "autoload", + "dependency", + "package" + ], + "time": "2016-05-19 18:44:43" + }, + { + "name": "composer/semver", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "84c47f3d8901440403217afc120683c7385aecb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/84c47f3d8901440403217afc120683c7385aecb8", + "reference": "84c47f3d8901440403217afc120683c7385aecb8", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "time": "2016-03-30 13:16:03" + }, + { + "name": "composer/spdx-licenses", + "version": "1.1.4", + "source": { + "type": "git", + "url": "https://github.com/composer/spdx-licenses.git", + "reference": "88c26372b1afac36d8db601cdf04ad8716f53d88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/88c26372b1afac36d8db601cdf04ad8716f53d88", + "reference": "88c26372b1afac36d8db601cdf04ad8716f53d88", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.5 || ^5.0.5", + "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Spdx\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "SPDX licenses list and validation library.", + "keywords": [ + "license", + "spdx", + "validator" + ], + "time": "2016-05-04 12:27:30" + }, + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "justinrainbow/json-schema", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/justinrainbow/json-schema.git", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341", + "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341", + "shasum": "" + }, + "require": { + "php": ">=5.3.29" + }, + "require-dev": { + "json-schema/json-schema-test-suite": "1.1.0", + "phpdocumentor/phpdocumentor": "~2", + "phpunit/phpunit": "~3.7" + }, + "bin": [ + "bin/validate-json" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-4": { + "JsonSchema\\": "src/JsonSchema/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Bruno Prieto Reis", + "email": "bruno.p.reis@gmail.com" + }, + { + "name": "Justin Rainbow", + "email": "justin.rainbow@gmail.com" + }, + { + "name": "Igor Wiedler", + "email": "igor@wiedler.ch" + }, + { + "name": "Robert Schönthal", + "email": "seroscho@googlemail.com" + } + ], + "description": "A library to validate a json schema.", + "homepage": "https://github.com/justinrainbow/json-schema", + "keywords": [ + "json", + "schema" + ], + "time": "2016-01-25 15:43:01" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03 12:10:50" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.0", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", + "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "~2.0", + "sebastian/comparator": "~1.1", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpspec/phpspec": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.5.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-02-15 07:46:21" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06 15:47:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2015-06-21 13:08:43" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12 18:03:57" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "reference": "3144ae21711fb6cac0b1ab4cbe63b75ce3d4e8da", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2015-09-15 10:49:45" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.26", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74", + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.1", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2016-05-17 03:09:28" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02 06:51:40" + }, + { + "name": "psr/log", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", + "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "shasum": "" + }, + "type": "library", + "autoload": { + "psr-0": { + "Psr\\Log\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "time": "2012-12-21 11:40:51" + }, + { + "name": "sebastian/comparator", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22", + "reference": "937efb279bd37a375bcadf584dec0726f84dbf22", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2015-07-26 15:48:44" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08 07:14:41" + }, + { + "name": "sebastian/environment", + "version": "1.3.7", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-05-17 03:18:57" + }, + { + "name": "sebastian/exporter", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", + "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2015-06-21 07:55:53" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11 19:50:13" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "seld/cli-prompt", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/cli-prompt.git", + "reference": "8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/cli-prompt/zipball/8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4", + "reference": "8cbe10923cae5bcd7c5a713f6703fc4727c8c1b4", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\CliPrompt\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "Allows you to prompt for user input on the command line, and optionally hide the characters they type", + "keywords": [ + "cli", + "console", + "hidden", + "input", + "prompt" + ], + "time": "2016-04-18 09:31:41" + }, + { + "name": "seld/jsonlint", + "version": "1.4.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/jsonlint.git", + "reference": "66834d3e3566bb5798db7294619388786ae99394" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394", + "reference": "66834d3e3566bb5798db7294619388786ae99394", + "shasum": "" + }, + "require": { + "php": "^5.3 || ^7.0" + }, + "bin": [ + "bin/jsonlint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Seld\\JsonLint\\": "src/Seld/JsonLint/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "JSON Linter", + "keywords": [ + "json", + "linter", + "parser", + "validator" + ], + "time": "2015-11-21 02:21:41" + }, + { + "name": "seld/phar-utils", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/phar-utils.git", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/phar-utils/zipball/7009b5139491975ef6486545a39f3e6dad5ac30a", + "reference": "7009b5139491975ef6486545a39f3e6dad5ac30a", + "shasum": "" + }, + "require": { + "php": ">=5.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Seld\\PharUtils\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be" + } + ], + "description": "PHAR file format utilities, for when PHP phars you up", + "keywords": [ + "phra" + ], + "time": "2015-10-13 18:44:15" + }, + { + "name": "symfony/console", + "version": "v3.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "34a214710e0714b6efcf40ba3cd1e31373a97820" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/34a214710e0714b6efcf40ba3cd1e31373a97820", + "reference": "34a214710e0714b6efcf40ba3cd1e31373a97820", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "symfony/polyfill-mbstring": "~1.0" + }, + "require-dev": { + "psr/log": "~1.0", + "symfony/event-dispatcher": "~2.8|~3.0", + "symfony/process": "~2.8|~3.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/process": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Console Component", + "homepage": "https://symfony.com", + "time": "2016-04-28 09:48:42" + }, + { + "name": "symfony/filesystem", + "version": "v3.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "74fec3511b62cb934b64bce1d96f06fffa4beafd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/74fec3511b62cb934b64bce1d96f06fffa4beafd", + "reference": "74fec3511b62cb934b64bce1d96f06fffa4beafd", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Filesystem Component", + "homepage": "https://symfony.com", + "time": "2016-04-12 18:09:53" + }, + { + "name": "symfony/finder", + "version": "v3.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "c54e407b35bc098916704e9fd090da21da4c4f52" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/c54e407b35bc098916704e9fd090da21da4c4f52", + "reference": "c54e407b35bc098916704e9fd090da21da4c4f52", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Finder Component", + "homepage": "https://symfony.com", + "time": "2016-03-10 11:13:05" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "dff51f72b0706335131b00a7f49606168c582594" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", + "reference": "dff51f72b0706335131b00a7f49606168c582594", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18 14:26:46" + }, + { + "name": "symfony/process", + "version": "v3.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "53f9407c0bb1c5a79127db8f7bfe12f0f6f3dcdb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/53f9407c0bb1c5a79127db8f7bfe12f0f6f3dcdb", + "reference": "53f9407c0bb1c5a79127db8f7bfe12f0f6f3dcdb", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Process Component", + "homepage": "https://symfony.com", + "time": "2016-04-14 15:30:28" + }, + { + "name": "symfony/yaml", + "version": "v3.0.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "0047c8366744a16de7516622c5b7355336afae96" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/0047c8366744a16de7516622c5b7355336afae96", + "reference": "0047c8366744a16de7516622c5b7355336afae96", + "shasum": "" + }, + "require": { + "php": ">=5.5.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2016-03-04 07:55:57" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "composer/composer": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4.5" + }, + "platform-dev": [] +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist b/web/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist new file mode 100644 index 000000000..ac16a3eaf --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/phpunit.xml.dist @@ -0,0 +1,15 @@ + + + + + + ./tests/ + + + diff --git a/web/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php b/web/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php new file mode 100644 index 000000000..4435306ba --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/src/FileFetcher.php @@ -0,0 +1,47 @@ +remoteFilesystem = $remoteFilesystem; + $this->source = $source; + $this->filenames = $filenames; + $this->fs = new Filesystem(); + } + + public function fetch($version, $destination) { + array_walk($this->filenames, function ($filename) use ($version, $destination) { + $url = $this->getUri($filename, $version); + $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename)); + $this->remoteFilesystem->copy($url, $url, $destination . '/' . $filename); + }); + } + + protected function getUri($filename, $version) { + $map = [ + '{path}' => $filename, + '{version}' => $version + ]; + return str_replace(array_keys($map), array_values($map), $this->source); + } + +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/src/Handler.php b/web/vendor/drupal-composer/drupal-scaffold/src/Handler.php new file mode 100644 index 000000000..51c340c60 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/src/Handler.php @@ -0,0 +1,365 @@ +composer = $composer; + $this->io = $io; + } + + /** + * @param $operation + * @return mixed + */ + protected function getCorePackage($operation) { + if ($operation instanceof InstallOperation) { + $package = $operation->getPackage(); + } + elseif ($operation instanceof UpdateOperation) { + $package = $operation->getTargetPackage(); + } + if (isset($package) && $package instanceof PackageInterface && $package->getName() == 'drupal/core') { + return $package; + } + return NULL; + } + + /** + * Marks scaffolding to be processed after an install or update command. + * + * @param \Composer\Installer\PackageEvent $event + */ + public function onPostPackageEvent(\Composer\Installer\PackageEvent $event){ + $package = $this->getCorePackage($event->getOperation()); + if ($package) { + // By explicitly setting the core package, the onPostCmdEvent() will + // process the scaffolding automatically. + $this->drupalCorePackage = $package; + } + } + + /** + * Post install command event to execute the scaffolding. + * + * @param \Composer\Script\Event $event + */ + public function onPostCmdEvent(\Composer\Script\Event $event) { + // Only install the scaffolding if drupal/core was installed, + // AND there are no scaffolding files present. + if (isset($this->drupalCorePackage)) { + $this->downloadScaffold(); + // Generate the autoload.php file after generating the scaffold files. + $this->generateAutoload(); + } + } + + /** + * Downloads drupal scaffold files for the current process. + */ + public function downloadScaffold() { + $drupalCorePackage = $this->getDrupalCorePackage(); + $webroot = realpath($this->getWebRoot()); + + // Collect options, excludes and settings files. + $options = $this->getOptions(); + $files = array_diff($this->getIncludes(), $this->getExcludes()); + + // Call any pre-scaffold scripts that may be defined. + $dispatcher = new EventDispatcher($this->composer, $this->io); + $dispatcher->dispatch(self::PRE_DRUPAL_SCAFFOLD_CMD); + + $version = $this->getDrupalCoreVersion($drupalCorePackage); + + $remoteFs = new RemoteFilesystem($this->io); + + $fetcher = new FileFetcher($remoteFs, $options['source'], $files); + $fetcher->fetch($version, $webroot); + + $initialFileFetcher = new InitialFileFetcher($remoteFs, $options['source'], $this->getInitial()); + $initialFileFetcher->fetch($version, $webroot); + + // Call post-scaffold scripts. + $dispatcher->dispatch(self::POST_DRUPAL_SCAFFOLD_CMD); + } + + /** + * Generate the autoload file at the project root. Include the + * autoload file that Composer generated. + */ + public function generateAutoload() { + $vendorPath = $this->getVendorPath(); + $webroot = $this->getWebRoot(); + + // Calculate the relative path from the webroot (location of the + // project autoload.php) to the vendor directory. + $fs = new SymfonyFilesystem(); + $relativeVendorPath = $fs->makePathRelative($vendorPath, realpath($webroot)); + + $fs->dumpFile($webroot . "/autoload.php", $this->autoLoadContents($relativeVendorPath)); + } + + /** + * Build the contents of the autoload file. + * + * @return string + */ + protected function autoLoadContents($relativeVendorPath) { + $relativeVendorPath = rtrim($relativeVendorPath, '/'); + + $autoloadContents = <<composer->getConfig(); + $filesystem = new Filesystem(); + $filesystem->ensureDirectoryExists($config->get('vendor-dir')); + $vendorPath = $filesystem->normalizePath(realpath($config->get('vendor-dir'))); + + return $vendorPath; + } + + /** + * Look up the Drupal core package object, or return it from where we cached + * it in the $drupalCorePackage field. + * + * @return PackageInterface + */ + public function getDrupalCorePackage() { + if (!isset($this->drupalCorePackage)) { + $this->drupalCorePackage = $this->getPackage('drupal/core'); + } + return $this->drupalCorePackage; + } + + /** + * Returns the Drupal core version for the given package. + * + * @param \Composer\Package\PackageInterface $drupalCorePackage + * + * @return string + */ + protected function getDrupalCoreVersion(PackageInterface $drupalCorePackage) { + $version = $drupalCorePackage->getPrettyVersion(); + if ($drupalCorePackage->getStability() == 'dev' && substr($version, -4) == '-dev') { + $version = substr($version, 0, -4); + return $version; + } + return $version; + } + + /** + * Retrieve the path to the web root. + * + * @return string + */ + public function getWebRoot() { + $drupalCorePackage = $this->getDrupalCorePackage(); + $installationManager = $this->composer->getInstallationManager(); + $corePath = $installationManager->getInstallPath($drupalCorePackage); + // Webroot is the parent path of the drupal core installation path. + $webroot = dirname($corePath); + + return $webroot; + } + + /** + * Retrieve a package from the current composer process. + * + * @param string $name + * Name of the package to get from the current composer installation. + * + * @return PackageInterface + */ + protected function getPackage($name) { + return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*'); + } + + /** + * Retrieve excludes from optional "extra" configuration. + * + * @return array + */ + protected function getExcludes() { + return $this->getNamedOptionList('excludes', 'getExcludesDefault'); + } + + /** + * Retrieve list of additional settings files from optional "extra" configuration. + * + * @return array + */ + protected function getIncludes() { + return $this->getNamedOptionList('includes', 'getIncludesDefault'); + } + + /** + * Retrieve list of initial files from optional "extra" configuration. + * + * @return array + */ + protected function getInitial() { + return $this->getNamedOptionList('initial', 'getInitialDefault'); + } + + /** + * Retrieve a named list of options from optional "extra" configuration. + * Respects 'omit-defaults', and either includes or does not include the + * default values, as requested. + * + * @return array + */ + protected function getNamedOptionList($optionName, $defaultFn) { + $options = $this->getOptions($this->composer); + $result = array(); + if (empty($options['omit-defaults'])) { + $result = $this->$defaultFn(); + } + $result = array_merge($result, (array) $options[$optionName]); + + return $result; + } + + /** + * Retrieve excludes from optional "extra" configuration. + * + * @return array + */ + protected function getOptions() { + $extra = $this->composer->getPackage()->getExtra() + ['drupal-scaffold' => []]; + $options = $extra['drupal-scaffold'] + [ + 'omit-defaults' => FALSE, + 'excludes' => [], + 'includes' => [], + 'initial' => [], + 'source' => 'http://cgit.drupalcode.org/drupal/plain/{path}?h={version}', + // Github: https://raw.githubusercontent.com/drupal/drupal/{version}/{path} + ]; + return $options; + } + + /** + * Holds default excludes. + */ + protected function getExcludesDefault() { + return []; + } + + /** + * Holds default settings files list. + */ + protected function getIncludesDefault() { + $version = $this->getDrupalCoreVersion($this->getDrupalCorePackage()); + list($major, $minor) = explode('.', $version, 3); + $version = "$major.$minor"; + + /** + * Files from 8.3.x + * + * @see http://cgit.drupalcode.org/drupal/tree/?h=8.3.x + */ + $common = [ + '.csslintrc', + '.editorconfig', + '.eslintignore', + '.eslintrc.json', + '.gitattributes', + '.htaccess', + 'index.php', + 'robots.txt', + 'sites/default/default.settings.php', + 'sites/default/default.services.yml', + 'sites/development.services.yml', + 'sites/example.settings.local.php', + 'sites/example.sites.php', + 'update.php', + 'web.config' + ]; + + // Version specific variations. + switch ($version) { + case '8.0': + case '8.1': + case '8.2': + $common[] = '.eslintrc'; + $common = array_diff($common, ['.eslintrc.json']); + break; + } + + sort($common); + return $common; + } + + /** + * Holds default initial files. + */ + protected function getInitialDefault() { + return []; + } + +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/src/InitialFileFetcher.php b/web/vendor/drupal-composer/drupal-scaffold/src/InitialFileFetcher.php new file mode 100644 index 000000000..e9ce3144b --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/src/InitialFileFetcher.php @@ -0,0 +1,24 @@ +filenames, function ($filename, $sourceFilename) use ($version, $destination) { + $target = "$destination/$filename"; + if (!file_exists($target)) { + $url = $this->getUri($sourceFilename, $version); + $this->fs->ensureDirectoryExists($destination . '/' . dirname($filename)); + $this->remoteFilesystem->copy($url, $url, $target); + } + }); + } +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/src/Plugin.php b/web/vendor/drupal-composer/drupal-scaffold/src/Plugin.php new file mode 100644 index 000000000..3424afd55 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/src/Plugin.php @@ -0,0 +1,81 @@ +handler = new Handler($composer, $io); + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents() { + return array( + PackageEvents::POST_PACKAGE_INSTALL => 'postPackage', + PackageEvents::POST_PACKAGE_UPDATE => 'postPackage', + //PackageEvents::POST_PACKAGE_UNINSTALL => 'postPackage', + //ScriptEvents::POST_INSTALL_CMD => 'postCmd', + ScriptEvents::POST_UPDATE_CMD => 'postCmd', + ); + } + + /** + * Post package event behaviour. + * + * @param \Composer\Installer\PackageEvent $event + */ + public function postPackage(PackageEvent $event) { + $this->handler->onPostPackageEvent($event); + } + + /** + * Post command event callback. + * + * @param \Composer\Script\Event $event + */ + public function postCmd(\Composer\Script\Event $event) { + $this->handler->onPostCmdEvent($event); + } + + /** + * Script callback for putting in composer scripts to download the + * scaffold files. + * + * @param \Composer\Script\Event $event + */ + public static function scaffold(\Composer\Script\Event $event) { + $handler = new Handler($event->getComposer(), $event->getIO()); + $handler->downloadScaffold(); + // Generate the autoload.php file after generating the scaffold files. + $handler->generateAutoload(); + } +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php b/web/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php new file mode 100644 index 000000000..39b3e730c --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/tests/FetcherTest.php @@ -0,0 +1,99 @@ +rootDir = realpath(realpath(__DIR__ . '/..')); + + // Prepare temp directory. + $this->fs = new Filesystem(); + $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold'; + $this->ensureDirectoryExistsAndClear($this->tmpDir); + + chdir($this->tmpDir); + } + + /** + * Makes sure the given directory exists and has no content. + * + * @param string $directory + */ + protected function ensureDirectoryExistsAndClear($directory) { + if (is_dir($directory)) { + $this->fs->removeDirectory($directory); + } + mkdir($directory, 0777, true); + } + + public function testFetch() { + $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'http://cgit.drupalcode.org/drupal/plain/{path}?h={version}', ['.htaccess', 'sites/default/default.settings.php']); + $fetcher->fetch('8.1.1', $this->tmpDir); + $this->assertFileExists($this->tmpDir . '/.htaccess'); + $this->assertFileExists($this->tmpDir . '/sites/default/default.settings.php'); + } + + /** + * Tests version specific files. + */ + public function testFetchVersionSpecific() { + $fetcher = new FileFetcher(new RemoteFilesystem(new NullIO()), 'http://cgit.drupalcode.org/drupal/plain/{path}?h={version}', ['.eslintrc', '.eslintrc.json']); + + $this->setExpectedException(TransportException::class); + $fetcher->fetch('8.2.x', $this->tmpDir); + + $this->assertFileExists($this->tmpDir . '/.eslintrc'); + $this->assertFileNotExists($this->tmpDir . '/.eslintrc.json'); + + // Remove downloaded files to retest with 8.3.x. + @unlink($this->tmpDir . '/.eslintrc'); + + $this->setExpectedException(TransportException::class); + $fetcher->fetch('8.3.x', $this->tmpDir); + + $this->assertFileExists($this->tmpDir . '/.eslintrc.json'); + $this->assertFileNotExists($this->tmpDir . '/.eslintrc'); + } + + public function testInitialFetch() { + $fetcher = new InitialFileFetcher(new RemoteFilesystem(new NullIO()), 'http://cgit.drupalcode.org/drupal/plain/{path}?h={version}', ['sites/default/default.settings.php' => 'sites/default/settings.php']); + $fetcher->fetch('8.1.1', $this->tmpDir); + $this->assertFileExists($this->tmpDir . '/sites/default/settings.php'); + } +} diff --git a/web/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php b/web/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php new file mode 100644 index 000000000..704649160 --- /dev/null +++ b/web/vendor/drupal-composer/drupal-scaffold/tests/PluginTest.php @@ -0,0 +1,185 @@ +rootDir = realpath(realpath(__DIR__ . '/..')); + + // Prepare temp directory. + $this->fs = new Filesystem(); + $this->tmpDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'drupal-scaffold'; + $this->ensureDirectoryExistsAndClear($this->tmpDir); + + $this->writeTestReleaseTag(); + $this->writeComposerJSON(); + + chdir($this->tmpDir); + } + + /** + * tearDown + * + * @return void + */ + public function tearDown() + { + $this->fs->removeDirectory($this->tmpDir); + $this->git(sprintf('tag -d "%s"', $this->tmpReleaseTag)); + } + + /** + * Tests a simple composer install without core, but adding core later. + */ + public function testComposerInstallAndUpdate() { + $exampleScaffoldFile = $this->tmpDir . DIRECTORY_SEPARATOR . 'index.php'; + $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.'); + $this->composer('install'); + $this->assertFileExists($this->tmpDir . DIRECTORY_SEPARATOR . 'core', 'Drupal core is installed.'); + $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be automatically installed.'); + $this->fs->remove($exampleScaffoldFile); + $this->assertFileNotExists($exampleScaffoldFile, 'Scaffold file should not be exist.'); + $this->composer('drupal-scaffold'); + $this->assertFileExists($exampleScaffoldFile, 'Scaffold file should be installed by "drupal-scaffold" command.'); + + foreach (['8.0.1', '8.1.x-dev'] as $version) { + // We touch a scaffold file, so we can check the file was modified after + // the scaffold update. + touch($exampleScaffoldFile); + $mtime_touched = filemtime($exampleScaffoldFile); + // Requiring a newer version triggers "composer update" + $this->composer('require --update-with-dependencies drupal/core:"' . $version .'"'); + clearstatcache(); + $mtime_after = filemtime($exampleScaffoldFile); + $this->assertNotEquals($mtime_after, $mtime_touched, 'Scaffold file was modified by composer update. (' . $version . ')'); + } + + // We touch a scaffold file, so we can check the file was modified after + // the custom commandscaffold update. + touch($exampleScaffoldFile); + clearstatcache(); + $mtime_touched = filemtime($exampleScaffoldFile); + $this->composer('drupal-scaffold'); + clearstatcache(); + $mtime_after = filemtime($exampleScaffoldFile); + $this->assertNotEquals($mtime_after, $mtime_touched, 'Scaffold file was modified by custom command.'); + } + + /** + * Writes the default composer json to the temp direcoty. + */ + protected function writeComposerJSON() { + $json = json_encode($this->composerJSONDefaults(), JSON_PRETTY_PRINT); + // Write composer.json. + file_put_contents($this->tmpDir . '/composer.json', $json); + } + + /** + * Writes a tag for the current commit, so we can reference it directly in the + * composer.json. + */ + protected function writeTestReleaseTag() { + // Tag the current state. + $this->tmpReleaseTag = '999.0.' . time(); + $this->git(sprintf('tag -a "%s" -m "%s"', $this->tmpReleaseTag, 'Tag for testing this exact commit')); + } + + /** + * Provides the default composer.json data. + * + * @return array + */ + protected function composerJSONDefaults() { + return array( + 'repositories' => array( + array( + 'type' => 'vcs', + 'url' => $this->rootDir, + ) + ), + 'require' => array( + 'drupal-composer/drupal-scaffold' => $this->tmpReleaseTag, + 'composer/installers' => '^1.0.20', + 'drupal/core' => '8.0.0', + ), + 'scripts' => array( + 'drupal-scaffold' => 'DrupalComposer\\DrupalScaffold\\Plugin::scaffold' + ), + 'minimum-stability' => 'dev', + ); + } + + /** + * Wrapper for the composer command. + * + * @param string $command + * Composer command name, arguments and/or options + */ + protected function composer($command) { + chdir($this->tmpDir); + passthru(escapeshellcmd($this->rootDir . '/vendor/bin/composer ' . $command), $exit_code); + if ($exit_code !== 0) { + throw new \Exception('Composer returned a non-zero exit code'); + } + } + + /** + * Wrapper for git command in the root directory. + * + * @param $command + * Git command name, arguments and/or options. + */ + protected function git($command) { + chdir($this->rootDir); + passthru(escapeshellcmd('git ' . $command), $exit_code); + if ($exit_code !== 0) { + throw new \Exception('Git returned a non-zero exit code'); + } + } + + /** + * Makes sure the given directory exists and has no content. + * + * @param string $directory + */ + protected function ensureDirectoryExistsAndClear($directory) { + if (is_dir($directory)) { + $this->fs->removeDirectory($directory); + } + mkdir($directory, 0777, true); + } +}