From 6610dc3e3931edab2e490ff70ea3d6430e12b123 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Mon, 7 Apr 2025 13:22:09 +0100 Subject: [PATCH 01/12] Remove all PHP code --- .github/dependabot.yml | 5 - .github/workflows/main.yml | 40 - .gitignore | 8 - .php-cs-fixer.php | 9 - Brewfile | 2 - bin/whippet | 26 - composer.json | 35 - composer.lock | 5664 ------------------- generators/app/generate.php | 85 - generators/plugin/generate.php | 53 - generators/theme/generate.php | 53 - phpunit.xml | 13 - psalm.xml | 20 - spec/dependencies/dependency_types.spec.php | 9 - spec/dependencies/describer.spec.php | 101 - spec/dependencies/validator.spec.php | 317 -- src/Dependencies/DependencyTypes.php | 16 - src/Dependencies/Describer.php | 53 - src/Dependencies/Installer.php | 149 - src/Dependencies/Updater.php | 220 - src/Dependencies/Validator.php | 111 - src/Factory.php | 25 - src/Files/Base.php | 37 - src/Files/WhippetJson.php | 35 - src/Files/WhippetLock.php | 45 - src/Git/Git.php | 451 -- src/Git/Gitignore.php | 57 - src/Models/Inspection.php | 32 - src/Modules/Dependencies.php | 102 - src/Modules/Deploy.php | 206 - src/Modules/Generate.php | 71 - src/Modules/Helpers/ManifestIo.php | 148 - src/Modules/Helpers/WhippetHelpers.php | 223 - src/Modules/Plugin.php | 304 - src/Modules/Release.php | 165 - src/Modules/Theme.php | 56 - src/ProjectDirectory.php | 33 - src/Services/BaseApi.php | 29 - src/Services/InspectionChecker.php | 67 - src/Services/InspectionsApi.php | 87 - src/Services/JsonApi.php | 33 - src/Services/NullInspectionChecker.php | 12 - src/Whippet.php | 85 - src/WhippetGenerator.php | 21 - tests/Helpers.php | 147 - tests/dependencies/installer_test.php | 678 --- tests/dependencies/updater_test.php | 1158 ---- tests/files/whippet_json_test.php | 67 - tests/files/whippet_lock_test.php | 203 - tests/plugins_test.php | 92 - tests/project_directory_test.php | 110 - tests/services/inspection_checker_test.php | 132 - tests/services/inspections_api_test.php | 126 - tests/services/json_api_test.php | 132 - vendor.phar | Bin 1504653 -> 0 bytes 55 files changed, 12158 deletions(-) delete mode 100644 .github/workflows/main.yml delete mode 100644 .php-cs-fixer.php delete mode 100755 bin/whippet delete mode 100644 composer.json delete mode 100644 composer.lock delete mode 100644 generators/app/generate.php delete mode 100644 generators/plugin/generate.php delete mode 100644 generators/theme/generate.php delete mode 100644 phpunit.xml delete mode 100644 psalm.xml delete mode 100644 spec/dependencies/dependency_types.spec.php delete mode 100644 spec/dependencies/describer.spec.php delete mode 100644 spec/dependencies/validator.spec.php delete mode 100644 src/Dependencies/DependencyTypes.php delete mode 100644 src/Dependencies/Describer.php delete mode 100644 src/Dependencies/Installer.php delete mode 100644 src/Dependencies/Updater.php delete mode 100644 src/Dependencies/Validator.php delete mode 100644 src/Factory.php delete mode 100644 src/Files/Base.php delete mode 100644 src/Files/WhippetJson.php delete mode 100644 src/Files/WhippetLock.php delete mode 100644 src/Git/Git.php delete mode 100644 src/Git/Gitignore.php delete mode 100644 src/Models/Inspection.php delete mode 100644 src/Modules/Dependencies.php delete mode 100644 src/Modules/Deploy.php delete mode 100644 src/Modules/Generate.php delete mode 100644 src/Modules/Helpers/ManifestIo.php delete mode 100644 src/Modules/Helpers/WhippetHelpers.php delete mode 100644 src/Modules/Plugin.php delete mode 100644 src/Modules/Release.php delete mode 100644 src/Modules/Theme.php delete mode 100644 src/ProjectDirectory.php delete mode 100644 src/Services/BaseApi.php delete mode 100644 src/Services/InspectionChecker.php delete mode 100644 src/Services/InspectionsApi.php delete mode 100644 src/Services/JsonApi.php delete mode 100644 src/Services/NullInspectionChecker.php delete mode 100644 src/Whippet.php delete mode 100644 src/WhippetGenerator.php delete mode 100644 tests/Helpers.php delete mode 100644 tests/dependencies/installer_test.php delete mode 100644 tests/dependencies/updater_test.php delete mode 100644 tests/files/whippet_json_test.php delete mode 100644 tests/files/whippet_lock_test.php delete mode 100644 tests/plugins_test.php delete mode 100644 tests/project_directory_test.php delete mode 100644 tests/services/inspection_checker_test.php delete mode 100644 tests/services/inspections_api_test.php delete mode 100644 tests/services/json_api_test.php delete mode 100644 vendor.phar diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2e616059..76896a82 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,8 +5,3 @@ updates: directory: "/" schedule: interval: daily -- package-ecosystem: composer - directory: "/" - schedule: - interval: daily - open-pull-requests-limit: 0 diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 634ae48b..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Tests & Linting - -on: push - -jobs: - run: - runs-on: ubuntu-24.04 - strategy: - matrix: - php-versions: ['7.4', '8.0', '8.1', '8.2'] - fail-fast: false - name: PHP ${{ matrix.php-versions }} - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - - - name: Get Composer Cache Directory - id: composer-cache - run: | - echo "::set-output name=dir::$(composer config cache-files-dir)" - - uses: actions/cache@v4 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: | - ${{ runner.os }}-composer- - - - name: git config (required for PluginsTest) - run: git config --global user.email you@example.com && git config --global user.name you - - - name: Run lints and tests - run: ./script/test - - - name: Run Psalm for this specific PHP version - run: ./vendor/bin/psalm --php-version=${{ matrix.php-versions }} diff --git a/.gitignore b/.gitignore index 0b1abe85..e69de29b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +0,0 @@ -/vendor -/tests/plugins-test-dir -/docker-images/.DS_Store -/docker-images/whippet-wordpress/.DS_Store -npm-debug.log -/.php_cs.cache -/.php-cs-fixer.cache -/.phpunit.result.cache diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php deleted file mode 100644 index a797a9e4..00000000 --- a/.php-cs-fixer.php +++ /dev/null @@ -1,9 +0,0 @@ -exclude('generators') -->exclude('vendor') -->in(__DIR__); - -return \Dxw\PhpCsFixerConfig\Config::create() -->setFinder($finder); diff --git a/Brewfile b/Brewfile index dc5aa269..2c2a1499 100644 --- a/Brewfile +++ b/Brewfile @@ -1,3 +1 @@ -brew "php@7.4" -brew "composer" brew "shellcheck" diff --git a/bin/whippet b/bin/whippet deleted file mode 100755 index 077df182..00000000 --- a/bin/whippet +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/env php -register(); -$loader->addPrefix('Dxw\\Whippet', __DIR__.'/../src'); - -date_default_timezone_set("UTC"); - -define('WHIPPET_ROOT', dirname(dirname(__FILE__))); - -$whippet = new \Dxw\Whippet\Whippet(); -$whippet->start($argv); diff --git a/composer.json b/composer.json deleted file mode 100644 index b6b8b412..00000000 --- a/composer.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "name": "dxw/whippet", - "description": "", - "bin": ["bin/whippet"], - "scripts": { - "post-update-cmd": "vendor/bin/phar-install" - }, - "autoload": { - "psr-4": { - "Dxw\\Whippet\\": "src/" - } - }, - "config": { - "platform": { - "php":"7.4" - } - }, - "require": { - "php": "^7.4||^8.0", - "dxw/rubbishthorclone": "^1.0", - "aura/autoload": "^2.0", - "nikita2206/result": "^0.2.0", - "kevinlebrun/colors.php": "^1.0", - "guzzlehttp/guzzle": "^6.5.8" - }, - "require-dev": { - "phpunit/phpunit": "^9.0", - "mockery/mockery": "^1.1", - "dxw/phar-install": "^1.1", - "mikey179/vfsstream": "^1.6", - "dxw/php-cs-fixer-config": "^2.0", - "kahlan/kahlan": "^5.1", - "vimeo/psalm": "^5.15" - } -} diff --git a/composer.lock b/composer.lock deleted file mode 100644 index 612dd638..00000000 --- a/composer.lock +++ /dev/null @@ -1,5664 +0,0 @@ -{ - "_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#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "bf29d8b7a0135e28b9f5f2bb31ae2a22", - "packages": [ - { - "name": "aura/autoload", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/auraphp/Aura.Autoload.git", - "reference": "306a7f8d3cb58fb6f94bcff1dddf20c543f68668" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/auraphp/Aura.Autoload/zipball/306a7f8d3cb58fb6f94bcff1dddf20c543f68668", - "reference": "306a7f8d3cb58fb6f94bcff1dddf20c543f68668", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "aura": { - "type": "library" - } - }, - "autoload": { - "psr-4": { - "Aura\\Autoload\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Aura.Autoload Contributors", - "homepage": "https://github.com/auraphp/Aura.Autoload/contributors" - } - ], - "description": "Provides a PSR-4 compliant autoloader implementation.", - "homepage": "https://github.com/auraphp/Aura.Autoload", - "keywords": [ - "PSR-4", - "SPL autoloader", - "autoload", - "autoloader", - "class loader" - ], - "support": { - "issues": "https://github.com/auraphp/Aura.Autoload/issues", - "source": "https://github.com/auraphp/Aura.Autoload/tree/2.x" - }, - "time": "2016-10-03T19:36:19+00:00" - }, - { - "name": "dxw/optionparser", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/dxw/optionparser.git", - "reference": "09dcb3bf0271c1b10b5540f50cdf5c18c8133886" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dxw/optionparser/zipball/09dcb3bf0271c1b10b5540f50cdf5c18c8133886", - "reference": "09dcb3bf0271c1b10b5540f50cdf5c18c8133886", - "shasum": "" - }, - "type": "library", - "autoload": { - "files": [ - "lib/OptionParser.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "support": { - "source": "https://github.com/dxw/optionparser/tree/v1.0.0" - }, - "abandoned": true, - "time": "2020-02-14T13:48:18+00:00" - }, - { - "name": "dxw/rubbishthorclone", - "version": "v1.0.2", - "source": { - "type": "git", - "url": "https://github.com/dxw/RubbishThorClone.git", - "reference": "af23b936583bd93c1741aa274339ea48b74fabf9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dxw/RubbishThorClone/zipball/af23b936583bd93c1741aa274339ea48b74fabf9", - "reference": "af23b936583bd93c1741aa274339ea48b74fabf9", - "shasum": "" - }, - "require": { - "dxw/optionparser": "^1.0", - "pear/console_table": "*" - }, - "require-dev": { - "vimeo/psalm": "^5.14" - }, - "type": "library", - "autoload": { - "files": [ - "rubbish_thor_clone.class.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "support": { - "issues": "https://github.com/dxw/RubbishThorClone/issues", - "source": "https://github.com/dxw/RubbishThorClone/tree/v1.0.2" - }, - "time": "2023-08-17T08:53:56+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "6.5.8", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981", - "reference": "a52f0440530b54fa079ce76e8c5d196a42cad981", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.0", - "guzzlehttp/psr7": "^1.9", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.17" - }, - "require-dev": { - "ext-curl": "*", - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", - "psr/log": "^1.1" - }, - "suggest": { - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.5-dev" - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "homepage": "http://guzzlephp.org/", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/6.5.8" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2022-06-20T22:16:07+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "1.5.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e", - "reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "symfony/phpunit-bridge": "^4.4 || ^5.1" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/1.5.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2023-05-21T12:31:43+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "1.9.1", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b", - "reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "psr/http-message": "~1.0", - "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" - }, - "provide": { - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "ext-zlib": "*", - "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/1.9.1" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2023-04-17T16:00:37+00:00" - }, - { - "name": "kevinlebrun/colors.php", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/kevinlebrun/colors.php.git", - "reference": "cdda5eee41314b87cd5a8bb91b1ffc7c0210e673" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kevinlebrun/colors.php/zipball/cdda5eee41314b87cd5a8bb91b1ffc7c0210e673", - "reference": "cdda5eee41314b87cd5a8bb91b1ffc7c0210e673", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "3.7.*", - "satooshi/php-coveralls": "1.0.*", - "squizlabs/php_codesniffer": "1.*" - }, - "type": "library", - "autoload": { - "psr-0": { - "Colors": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kevin Le Brun", - "email": "lebrun.k@gmail.com", - "homepage": "http://kevinlebrun.fr", - "role": "developer" - } - ], - "description": "Colors for PHP CLI scripts", - "homepage": "https://github.com/kevinlebrun/colors.php", - "keywords": [ - "cli", - "color", - "colors", - "console", - "shell" - ], - "support": { - "issues": "https://github.com/kevinlebrun/colors.php/issues", - "source": "https://github.com/kevinlebrun/colors.php/tree/master" - }, - "time": "2018-05-30T08:34:23+00:00" - }, - { - "name": "nikita2206/result", - "version": "0.2", - "source": { - "type": "git", - "url": "https://github.com/nikita2206/result.git", - "reference": "7b08cb5a2ecd79843d34aec3902b0ea973a92473" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikita2206/result/zipball/7b08cb5a2ecd79843d34aec3902b0ea973a92473", - "reference": "7b08cb5a2ecd79843d34aec3902b0ea973a92473", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "~4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Result\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nikita Nefedov", - "email": "inefedor@gmail.com" - } - ], - "description": "Result data type (just like in Rust)", - "support": { - "issues": "https://github.com/nikita2206/result/issues", - "source": "https://github.com/nikita2206/result/tree/master" - }, - "time": "2016-03-25T16:02:11+00:00" - }, - { - "name": "pear/console_table", - "version": "v1.3.1", - "source": { - "type": "git", - "url": "https://github.com/pear/Console_Table.git", - "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/pear/Console_Table/zipball/1930c11897ca61fd24b95f2f785e99e0f36dcdea", - "reference": "1930c11897ca61fd24b95f2f785e99e0f36dcdea", - "shasum": "" - }, - "require": { - "php": ">=5.2.0" - }, - "suggest": { - "pear/Console_Color2": ">=0.1.2" - }, - "type": "library", - "autoload": { - "classmap": [ - "Table.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Jan Schneider", - "homepage": "http://pear.php.net/user/yunosh" - }, - { - "name": "Tal Peer", - "homepage": "http://pear.php.net/user/tal" - }, - { - "name": "Xavier Noguer", - "homepage": "http://pear.php.net/user/xnoguer" - }, - { - "name": "Richard Heyes", - "homepage": "http://pear.php.net/user/richard" - } - ], - "description": "Library that makes it easy to build console style tables.", - "homepage": "http://pear.php.net/package/Console_Table/", - "keywords": [ - "console" - ], - "support": { - "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Console_Table", - "source": "https://github.com/pear/Console_Table" - }, - "time": "2018-01-25T20:47:17+00:00" - }, - { - "name": "psr/http-message", - "version": "1.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/1.1" - }, - "time": "2023-04-04T09:50:52+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:30:37+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "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 intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "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 backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - } - ], - "packages-dev": [ - { - "name": "amphp/amp", - "version": "v2.6.2", - "source": { - "type": "git", - "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1", - "ext-json": "*", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.x-dev" - } - }, - "autoload": { - "files": [ - "lib/functions.php", - "lib/Internal/functions.php" - ], - "psr-4": { - "Amp\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Daniel Lowrey", - "email": "rdlowrey@php.net" - }, - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Bob Weinand", - "email": "bobwei9@hotmail.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "https://amphp.org/amp", - "keywords": [ - "async", - "asynchronous", - "awaitable", - "concurrency", - "event", - "event-loop", - "future", - "non-blocking", - "promise" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2022-02-20T17:52:18+00:00" - }, - { - "name": "amphp/byte-stream", - "version": "v1.8.1", - "source": { - "type": "git", - "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", - "shasum": "" - }, - "require": { - "amphp/amp": "^2", - "php": ">=7.1" - }, - "require-dev": { - "amphp/php-cs-fixer-config": "dev-master", - "amphp/phpunit-util": "^1.4", - "friendsofphp/php-cs-fixer": "^2.3", - "jetbrains/phpstorm-stubs": "^2019.3", - "phpunit/phpunit": "^6 || ^7 || ^8", - "psalm/phar": "^3.11.4" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "files": [ - "lib/functions.php" - ], - "psr-4": { - "Amp\\ByteStream\\": "lib" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Aaron Piotrowski", - "email": "aaron@trowski.com" - }, - { - "name": "Niklas Keller", - "email": "me@kelunik.com" - } - ], - "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", - "keywords": [ - "amp", - "amphp", - "async", - "io", - "non-blocking", - "stream" - ], - "support": { - "irc": "irc://irc.freenode.org/amphp", - "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" - }, - "funding": [ - { - "url": "https://github.com/amphp", - "type": "github" - } - ], - "time": "2021-03-30T17:13:30+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.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" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2023-08-31T09:50:34+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "dnoegel/php-xdg-base-dir", - "version": "v0.1.1", - "source": { - "type": "git", - "url": "https://github.com/dnoegel/php-xdg-base-dir.git", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd", - "shasum": "" - }, - "require": { - "php": ">=5.3.2" - }, - "require-dev": { - "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "XdgBaseDir\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "implementation of xdg base directory specification for php", - "support": { - "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues", - "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1" - }, - "time": "2019-12-04T15:06:13+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" - }, - "time": "2023-09-27T20:04:15+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "1.5.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", - "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^0.16 || ^1", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-phpunit": "^1", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "vimeo/psalm": "^4.30 || ^5.4" - }, - "type": "library", - "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": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.5.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:15:36+00:00" - }, - { - "name": "dxw/phar-install", - "version": "v1.1.2", - "source": { - "type": "git", - "url": "https://github.com/dxw/phar-install.git", - "reference": "36eb78be91d433546bc90194db6f4de754a542de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dxw/phar-install/zipball/36eb78be91d433546bc90194db6f4de754a542de", - "reference": "36eb78be91d433546bc90194db6f4de754a542de", - "shasum": "" - }, - "bin": [ - "bin/phar-install" - ], - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mallory Adams", - "email": "mallory@dxw.com", - "homepage": "https://www.dxw.com" - } - ], - "homepage": "https://github.com/dxw/phar-install", - "support": { - "issues": "https://github.com/dxw/phar-install/issues", - "source": "https://github.com/dxw/phar-install/tree/master" - }, - "time": "2020-04-06T09:47:56+00:00" - }, - { - "name": "dxw/php-cs-fixer-config", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/dxw/php-cs-fixer-config.git", - "reference": "690a251beb6a3080a2de5adc749675a99e22d9fd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dxw/php-cs-fixer-config/zipball/690a251beb6a3080a2de5adc749675a99e22d9fd", - "reference": "690a251beb6a3080a2de5adc749675a99e22d9fd", - "shasum": "" - }, - "require": { - "friendsofphp/php-cs-fixer": "^3.2", - "php": "^7.4||^8.1" - }, - "require-dev": { - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "^5.15" - }, - "type": "library", - "autoload": { - "psr-4": { - "Dxw\\PhpCsFixerConfig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dxw/php-cs-fixer-config/issues", - "source": "https://github.com/dxw/php-cs-fixer-config/tree/v2.1.1" - }, - "time": "2023-09-13T12:53:23+00:00" - }, - { - "name": "felixfbecker/advanced-json-rpc", - "version": "v3.2.1", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "reference": "b5f37dbff9a8ad360ca341f3240dc1c168b45447", - "shasum": "" - }, - "require": { - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "php": "^7.1 || ^8.0", - "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.0 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "AdvancedJsonRpc\\": "lib/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "A more advanced JSONRPC implementation", - "support": { - "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues", - "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.1" - }, - "time": "2021-06-11T22:34:44+00:00" - }, - { - "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", - "source": { - "type": "git", - "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "require-dev": { - "phpstan/phpstan": "*", - "squizlabs/php_codesniffer": "^3.1", - "vimeo/psalm": "^4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "LanguageServerProtocol\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "ISC" - ], - "authors": [ - { - "name": "Felix Becker", - "email": "felix.b@outlook.com" - } - ], - "description": "PHP classes for the Language Server Protocol", - "keywords": [ - "language", - "microsoft", - "php", - "server" - ], - "support": { - "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" - }, - "time": "2022-03-02T22:36:06+00:00" - }, - { - "name": "fidry/cpu-core-counter", - "version": "0.5.1", - "source": { - "type": "git", - "url": "https://github.com/theofidry/cpu-core-counter.git", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theofidry/cpu-core-counter/zipball/b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "reference": "b58e5a3933e541dc286cc91fc4f3898bbc6f1623", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "fidry/makefile": "^0.2.0", - "phpstan/extension-installer": "^1.2.0", - "phpstan/phpstan": "^1.9.2", - "phpstan/phpstan-deprecation-rules": "^1.0.0", - "phpstan/phpstan-phpunit": "^1.2.2", - "phpstan/phpstan-strict-rules": "^1.4.4", - "phpunit/phpunit": "^9.5.26 || ^8.5.31", - "theofidry/php-cs-fixer-config": "^1.0", - "webmozarts/strict-phpunit": "^7.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Fidry\\CpuCoreCounter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Théo FIDRY", - "email": "theo.fidry@gmail.com" - } - ], - "description": "Tiny utility to get the number of CPU cores.", - "keywords": [ - "CPU", - "core" - ], - "support": { - "issues": "https://github.com/theofidry/cpu-core-counter/issues", - "source": "https://github.com/theofidry/cpu-core-counter/tree/0.5.1" - }, - "funding": [ - { - "url": "https://github.com/theofidry", - "type": "github" - } - ], - "time": "2022-12-24T12:35:10+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.26.1", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "d023ba6684055f6ea1da1352d8a02baca0426983" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d023ba6684055f6ea1da1352d8a02baca0426983", - "reference": "d023ba6684055f6ea1da1352d8a02baca0426983", - "shasum": "" - }, - "require": { - "composer/semver": "^3.3", - "composer/xdebug-handler": "^3.0.3", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "facile-it/paraunit": "^1.3 || ^2.0", - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.26.1" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2023-09-08T19:09:07+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "kahlan/kahlan", - "version": "5.2.5", - "source": { - "type": "git", - "url": "https://github.com/kahlan/kahlan.git", - "reference": "b306b275316c35c96da931fb619387e82eb61760" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/kahlan/kahlan/zipball/b306b275316c35c96da931fb619387e82eb61760", - "reference": "b306b275316c35c96da931fb619387e82eb61760", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "require-dev": { - "rector/rector": "^0.18", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/kahlan" - ], - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Kahlan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "CrysaLEAD" - } - ], - "description": "The PHP Test Framework for Freedom, Truth and Justice.", - "keywords": [ - "BDD", - "Behavior-Driven Development", - "Monkey Patching", - "TDD", - "mock", - "stub", - "testing", - "unit test" - ], - "support": { - "issues": "https://github.com/kahlan/kahlan/issues", - "source": "https://github.com/kahlan/kahlan/tree/5.2.5" - }, - "time": "2023-09-12T10:35:16+00:00" - }, - { - "name": "mikey179/vfsstream", - "version": "v1.6.11", - "source": { - "type": "git", - "url": "https://github.com/bovigo/vfsStream.git", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/bovigo/vfsStream/zipball/17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "reference": "17d16a85e6c26ce1f3e2fa9ceeacdc2855db1e9f", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.5|^5.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.6.x-dev" - } - }, - "autoload": { - "psr-0": { - "org\\bovigo\\vfs\\": "src/main/php" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Frank Kleine", - "homepage": "http://frankkleine.de/", - "role": "Developer" - } - ], - "description": "Virtual file system to mock the real file system in unit tests.", - "homepage": "http://vfs.bovigo.org/", - "support": { - "issues": "https://github.com/bovigo/vfsStream/issues", - "source": "https://github.com/bovigo/vfsStream/tree/master", - "wiki": "https://github.com/bovigo/vfsStream/wiki" - }, - "time": "2022-02-23T02:02:42+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.6.6", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/b8e0bb7d8c604046539c1115994632c74dcb361e", - "reference": "b8e0bb7d8c604046539c1115994632c74dcb361e", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": ">=7.3" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.6.10", - "psalm/plugin-phpunit": "^0.18.4", - "symplify/easy-coding-standard": "^11.5.0", - "vimeo/psalm": "^4.30" - }, - "type": "library", - "autoload": { - "files": [ - "library/helpers.php", - "library/Mockery.php" - ], - "psr-4": { - "Mockery\\": "library/Mockery" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "https://github.com/padraic", - "role": "Author" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "https://davedevelopment.co.uk", - "role": "Developer" - }, - { - "name": "Nathanael Esayeas", - "email": "nathanael.esayeas@protonmail.com", - "homepage": "https://github.com/ghostwriter", - "role": "Lead Developer" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "docs": "https://docs.mockery.io/", - "issues": "https://github.com/mockery/mockery/issues", - "rss": "https://github.com/mockery/mockery/releases.atom", - "security": "https://github.com/mockery/mockery/security/advisories", - "source": "https://github.com/mockery/mockery" - }, - "time": "2023-08-09T00:03:52+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.1", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2023-03-08T13:26:56+00:00" - }, - { - "name": "netresearch/jsonmapper", - "version": "v4.2.0", - "source": { - "type": "git", - "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", - "php": ">=7.1" - }, - "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", - "squizlabs/php_codesniffer": "~3.5" - }, - "type": "library", - "autoload": { - "psr-0": { - "JsonMapper": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "cweiske@cweiske.de", - "homepage": "http://github.com/cweiske/jsonmapper/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "cweiske@cweiske.de", - "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" - }, - "time": "2023-04-09T17:37:40+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.17.1", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" - }, - "time": "2023-08-13T19:53:39+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" - }, - "time": "2021-10-19T17:43:47+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" - }, - "time": "2023-08-12T11:01:26+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.24.2", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.2" - }, - "time": "2023-09-26T12:28:12+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.28", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", - "reference": "7134a5ccaaf0f1c92a4f5501a6c9f98ac4dcc0ef", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-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": "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.28" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-09-12T14:36:20+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-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": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-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": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.12", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a122c2ebd469b751d774aa0f613dc0d67697653f", - "reference": "a122c2ebd469b751d774aa0f613dc0d67697653f", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.12" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2023-09-12T14:39:31+00:00" - }, - { - "name": "psr/container", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" - }, - "time": "2021-11-05T16:50:12+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/log", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11", - "reference": "d49695b909c3b7628b6289db5479a1c204601f11", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "Psr/Log/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/1.1.4" - }, - "time": "2021-05-03T11:20:27+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-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": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-05-07T05:35:17+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T06:03:37+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.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" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-08-02T09:26:13+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "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", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-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": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-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": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "spatie/array-to-xml", - "version": "2.17.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/array-to-xml.git", - "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/array-to-xml/zipball/5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", - "reference": "5cbec9c6ab17e320c58a259f0cebe88bde4a7c46", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": "^7.4|^8.0" - }, - "require-dev": { - "mockery/mockery": "^1.2", - "pestphp/pest": "^1.21", - "phpunit/phpunit": "^9.0", - "spatie/pest-plugin-snapshots": "^1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\ArrayToXml\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://freek.dev", - "role": "Developer" - } - ], - "description": "Convert an array to xml", - "homepage": "https://github.com/spatie/array-to-xml", - "keywords": [ - "array", - "convert", - "xml" - ], - "support": { - "source": "https://github.com/spatie/array-to-xml/tree/2.17.1" - }, - "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2022-12-26T08:22:07+00:00" - }, - { - "name": "symfony/console", - "version": "v5.4.28", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "f4f71842f24c2023b91237c72a365306f3c58827" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/f4f71842f24c2023b91237c72a365306f3c58827", - "reference": "f4f71842f24c2023b91237c72a365306f3c58827", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" - }, - "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "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": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v5.4.28" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-08-07T06:12:30+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.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": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v5.4.26", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/5dcc00e03413f05c1e7900090927bb7247cb0aac", - "reference": "5dcc00e03413f05c1e7900090927bb7247cb0aac", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "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": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.26" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-06T06:34:20+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "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": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-01-02T09:53:40+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v5.4.25", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/0ce3a62c9579a53358d3a7eb6b3dfb79789a6364", - "reference": "0ce3a62c9579a53358d3a7eb6b3dfb79789a6364", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "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": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.25" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-05-31T13:04:02+00:00" - }, - { - "name": "symfony/finder", - "version": "v5.4.27", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ff4bce3c33451e7ec778070e45bd23f74214cd5d", - "reference": "ff4bce3c33451e7ec778070e45bd23f74214cd5d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "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": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.27" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-31T08:02:31+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v5.4.21", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", - "reference": "4fe5cf6ede71096839f0e4b4444d65dd3a7c1eb9", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php73": "~1.0", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "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": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v5.4.21" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-02-14T08:03:56+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "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 intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "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" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-07-28T09:04:16+00:00" - }, - { - "name": "symfony/polyfill-php73", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "reference": "fe2f306d1d9d346a7fee353d0d5012e401e984b5", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "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 backporting some PHP 7.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/7581cd600fa9fd681b797d00b02f068e2f13263b", - "reference": "7581cd600fa9fd681b797d00b02f068e2f13263b", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "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 backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.28.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-26T09:26:14+00:00" - }, - { - "name": "symfony/process", - "version": "v5.4.47", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5d1662fb32ebc94f17ddb8d635454a776066733d", - "reference": "5d1662fb32ebc94f17ddb8d635454a776066733d", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "type": "library", - "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": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v5.4.47" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-11-06T11:36:42+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v2.5.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - } - }, - "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": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-05-30T19:17:29+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v5.4.21", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f83692cd869a6f2391691d40a01e8acb89e76fee", - "reference": "f83692cd869a6f2391691d40a01e8acb89e76fee", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/service-contracts": "^1|^2|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "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": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v5.4.21" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-02-14T08:03:56+00:00" - }, - { - "name": "symfony/string", - "version": "v5.4.26", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "1181fe9270e373537475e826873b5867b863883c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/1181fe9270e373537475e826873b5867b863883c", - "reference": "1181fe9270e373537475e826873b5867b863883c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "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": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.4.26" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-06-28T12:46:07+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "vimeo/psalm", - "version": "5.15.0", - "source": { - "type": "git", - "url": "https://github.com/vimeo/psalm.git", - "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vimeo/psalm/zipball/5c774aca4746caf3d239d9c8cadb9f882ca29352", - "reference": "5c774aca4746caf3d239d9c8cadb9f882ca29352", - "shasum": "" - }, - "require": { - "amphp/amp": "^2.4.2", - "amphp/byte-stream": "^1.5", - "composer-runtime-api": "^2", - "composer/semver": "^1.4 || ^2.0 || ^3.0", - "composer/xdebug-handler": "^2.0 || ^3.0", - "dnoegel/php-xdg-base-dir": "^0.1.1", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-simplexml": "*", - "ext-tokenizer": "*", - "felixfbecker/advanced-json-rpc": "^3.1", - "felixfbecker/language-server-protocol": "^1.5.2", - "fidry/cpu-core-counter": "^0.4.1 || ^0.5.1", - "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0", - "nikic/php-parser": "^4.16", - "php": "^7.4 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0", - "sebastian/diff": "^4.0 || ^5.0", - "spatie/array-to-xml": "^2.17.0 || ^3.0", - "symfony/console": "^4.1.6 || ^5.0 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0" - }, - "conflict": { - "nikic/php-parser": "4.17.0" - }, - "provide": { - "psalm/psalm": "self.version" - }, - "require-dev": { - "amphp/phpunit-util": "^2.0", - "bamarni/composer-bin-plugin": "^1.4", - "brianium/paratest": "^6.9", - "ext-curl": "*", - "mockery/mockery": "^1.5", - "nunomaduro/mock-final-classes": "^1.1", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpdoc-parser": "^1.6", - "phpunit/phpunit": "^9.6", - "psalm/plugin-mockery": "^1.1", - "psalm/plugin-phpunit": "^0.18", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.6", - "symfony/process": "^4.4 || ^5.0 || ^6.0" - }, - "suggest": { - "ext-curl": "In order to send data to shepherd", - "ext-igbinary": "^2.0.5 is required, used to serialize caching data" - }, - "bin": [ - "psalm", - "psalm-language-server", - "psalm-plugin", - "psalm-refactor", - "psalter" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev", - "dev-4.x": "4.x-dev", - "dev-3.x": "3.x-dev", - "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matthew Brown" - } - ], - "description": "A static analysis tool for finding errors in PHP applications", - "keywords": [ - "code", - "inspection", - "php", - "static analysis" - ], - "support": { - "issues": "https://github.com/vimeo/psalm/issues", - "source": "https://github.com/vimeo/psalm/tree/5.15.0" - }, - "time": "2023-08-20T23:07:30+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - } - ], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^7.4||^8.0" - }, - "platform-dev": [], - "platform-overrides": { - "php": "7.4" - }, - "plugin-api-version": "2.6.0" -} diff --git a/generators/app/generate.php b/generators/app/generate.php deleted file mode 100644 index b264f470..00000000 --- a/generators/app/generate.php +++ /dev/null @@ -1,85 +0,0 @@ -options = $options; - - if(isset($this->options->directory)) { - $this->target_dir = $this->options->directory; - } - else { - $this->target_dir = getcwd() . "/whippet-app"; - } - } - - - function generate() { - echo "Creating a new whippet application in {$this->target_dir}\n"; - - if(!file_exists($this->target_dir)) { - mkdir($this->target_dir); - } - - // Make the target dir a git repo, if it isn't already - $target_repo = new \Dxw\Whippet\Git\Git($this->target_dir); - if(!$target_repo->is_repo()) { - \Dxw\Whippet\Git\Git::init($this->target_dir); - } - - echo "Downloading and unzipping template file \n"; - - $this->downloadTemplateZip(); - - $this->unzipAndRemoveTemplateZip(); - - if(isset($this->options->repository)) { - $this->setWPRepository(); - } - - /* zip archives don't preserve permissions, so fix those */ - exec("chmod 0755 " . $this->target_dir . "/setup/*"); - exec("chmod 0755 " . $this->target_dir . "/script/*"); - exec("chmod 0755 " . $this->target_dir . "/bin/*"); - - // Whippet deploy requires at least one commit in the repo. - if (!$target_repo->current_commit()) { - $target_repo->add("--all"); - $target_repo->commit("Initial commit from Whippet"); - } - - echo "New whippet app successfully generated at {$this->target_dir} \n"; - } - - private function setWpRepository() - { - $appConfig = $this->target_dir . '/config/application.json'; - $data = json_decode(file_get_contents($appConfig), JSON_OBJECT_AS_ARRAY); - $data['wordpress']['repository'] = $this->options->repository; - file_put_contents($appConfig, json_encode($data, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES)."\n"); - } - - private function getLatest() - { - $versionCheck = json_decode(file_get_contents('https://api.wordpress.org/core/version-check/1.7/'), JSON_OBJECT_AS_ARRAY); - return $versionCheck['offers'][0]['version']; - } - - private function downloadTemplateZip() - { - $this->download_url_to_file($this->wordpress_template_zip, $this->target_dir . "/wordpress_template.zip"); - } - - private function unzipAndRemoveTemplateZip() - { - $this->unzip_to_folder($this->target_dir . "/wordpress_template.zip", $this->target_dir); - // Move the unzipped contents out of the containing zip folder - $this->recurse_copy($this->target_dir . '/wordpress-template-main', $this->target_dir); - $this->recurse_rm($this->target_dir . '/wordpress-template-main'); - } -}; diff --git a/generators/plugin/generate.php b/generators/plugin/generate.php deleted file mode 100644 index 3e2ba45f..00000000 --- a/generators/plugin/generate.php +++ /dev/null @@ -1,53 +0,0 @@ -options = $options; - - if(isset($this->options->directory)) { - $this->target_dir = getcwd() . '/' . $this->options->directory; - } - else { - $this->target_dir = getcwd() . "/whippet-plugin"; - } - - $this->unique_temp_id = uniqid(); - } - - function generate() { - echo "Creating a new whippet plugin in {$this->target_dir}\n"; - - if(!file_exists($this->target_dir)) { - mkdir($this->target_dir); - } - - $this->downloadAndUnzipTemplate(); - $this->copyThemeAndRemoveTemplate(); - } - - private function downloadAndUnzipTemplate() - { - $this->download_url_to_file($this->plugin_template_zip, '/tmp/plugin_template_' . $this->unique_temp_id . '.zip'); - $this->unzip_to_folder('/tmp/plugin_template_' . $this->unique_temp_id . '.zip', '/tmp/plugin_template_' . $this->unique_temp_id); - } - - private function copyThemeAndRemoveTemplate() - { - $this->recurse_copy('/tmp/plugin_template_' . $this->unique_temp_id . '/wordpress-plugin-template-main', $this->target_dir); - copy('/tmp/plugin_template_' . $this->unique_temp_id . '/wordpress-plugin-template-main/.gitignore', $this->target_dir . '/.gitignore'); - if(isset($this->options->nogitignore)) { - unlink($this->target_dir . '/.gitignore'); - } - $this->recurse_rm('/tmp/plugin_template_' . $this->unique_temp_id); - } -}; diff --git a/generators/theme/generate.php b/generators/theme/generate.php deleted file mode 100644 index d87cc127..00000000 --- a/generators/theme/generate.php +++ /dev/null @@ -1,53 +0,0 @@ -options = $options; - - if(isset($this->options->directory)) { - $this->target_dir = getcwd() . '/' . $this->options->directory; - } - else { - $this->target_dir = getcwd() . "/whippet-theme"; - } - - $this->unique_temp_id = uniqid(); - } - - function generate() { - echo "Creating a new whippet theme in {$this->target_dir}\n"; - - if(!file_exists($this->target_dir)) { - mkdir($this->target_dir); - } - - $this->downloadAndUnzipTemplate(); - $this->copyThemeAndRemoveTemplate(); - } - - private function downloadAndUnzipTemplate() - { - $this->download_url_to_file($this->wordpress_template_zip, '/tmp/wordpress_template_' . $this->unique_temp_id . '.zip'); - $this->unzip_to_folder('/tmp/wordpress_template_' . $this->unique_temp_id . '.zip', '/tmp/wordpress_template_' . $this->unique_temp_id); - } - - private function copyThemeAndRemoveTemplate() - { - $this->recurse_copy('/tmp/wordpress_template_' . $this->unique_temp_id . '/wordpress-template-main/wp-content/themes/theme', $this->target_dir); - copy('/tmp/wordpress_template_' . $this->unique_temp_id . '/wordpress-template-main/.gitignore', $this->target_dir . '/.gitignore'); - if(isset($this->options->nogitignore)) { - unlink($this->target_dir . '/.gitignore'); - } - $this->recurse_rm('/tmp/wordpress_template_' . $this->unique_temp_id); - } -}; diff --git a/phpunit.xml b/phpunit.xml deleted file mode 100644 index 1e261426..00000000 --- a/phpunit.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - src - - - - - tests - - - diff --git a/psalm.xml b/psalm.xml deleted file mode 100644 index d72d164c..00000000 --- a/psalm.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - diff --git a/spec/dependencies/dependency_types.spec.php b/spec/dependencies/dependency_types.spec.php deleted file mode 100644 index 1aae91d7..00000000 --- a/spec/dependencies/dependency_types.spec.php +++ /dev/null @@ -1,9 +0,0 @@ -toBe(['themes', 'plugins']); - }); - }); -}); diff --git a/spec/dependencies/describer.spec.php b/spec/dependencies/describer.spec.php deleted file mode 100644 index b715075e..00000000 --- a/spec/dependencies/describer.spec.php +++ /dev/null @@ -1,101 +0,0 @@ -factory = Double::instance(['extends' => '\Dxw\Whippet\Factory']); - $this->projectDirectory = Double::instance([ - 'extends' => 'Dxw\Whippet\ProjectDirectory', - 'magicMethods' => true - ]); - $this->describer = new \Dxw\Whippet\Dependencies\Describer( - $this->factory, - $this->projectDirectory - ); - }); - - describe('->describe()', function () { - context('whippet.lock file not loaded successfully', function () { - it('returns an error result', function () { - allow($this->factory)->toReceive('callStatic')->andReturn(\Result\Result::err('Error loading whippet.lock')); - - $result = $this->describer->describe(); - - expect($result->isErr())->toEqual(true); - expect($result->getErr())->toEqual('Error loading whippet.lock'); - }); - }); - - context('Error getting the references for one of the git repos', function () { - it('returns an error result', function () { - $whippetLock = Double::instance([ - 'extends' => '\Dxw\Whippet\Files\WhippetLock', - 'magicMethods' => true - ]); - allow($whippetLock)->toReceive('getDependencies')->andReturn([ - [ - 'name' => 'plugin-one', - 'src' => 'plugin-one-src', - 'revision' => 'commit-hash' - ] - ]); - allow($this->factory)->toReceive('callStatic')->andReturn(\Result\Result::ok($whippetLock)); - $git = Double::instance([ - 'extends' => '\Dxw\Whippet\Git\Git', - 'magicMethods' => true - ]); - allow(\Dxw\Whippet\Git\Git::class)->toBe($git); - allow($git)->toReceive('::tag_for_commit')->andReturn(\Result\Result::err('Error getting tag')); - - $result = $this->describer->describe(); - - expect($result->isErr())->toEqual(true); - expect($result->getErr())->toEqual('Error getting tag'); - }); - }); - - it('outputs a JSON report and returns an OK result', function () { - $whippetLock = Double::instance([ - 'extends' => '\Dxw\Whippet\Files\WhippetLock', - 'magicMethods' => true - ]); - allow($whippetLock)->toReceive('getDependencies')->andReturn([ - [ - 'name' => 'theme-one', - 'src' => 'theme-one-src', - 'revision' => 'commit-hash' - ] - ], [ - [ - 'name' => 'plugin-one', - 'src' => 'plugin-one-src', - 'revision' => 'commit-hash' - ], - ]); - allow($this->factory)->toReceive('callStatic')->andReturn(\Result\Result::ok($whippetLock)); - $git = Double::instance([ - 'extends' => '\Dxw\Whippet\Git\Git', - 'magicMethods' => true - ]); - allow(\Dxw\Whippet\Git\Git::class)->toBe($git); - allow($git)->toReceive('::tag_for_commit')->andReturn(\Result\Result::ok('v1.0.1'), \Result\Result::ok('v3.0')); - - ob_start(); - - $result = $this->describer->describe(); - - $output = ob_get_clean(); - - expect(json_decode($output, null, 5, JSON_OBJECT_AS_ARRAY))->toEqual([ - 'themes' => [ - 'theme-one' => 'v1.0.1' - ], - 'plugins' => [ - 'plugin-one' => 'v3.0' - ] - ]); - expect($result->isErr())->toBe(false); - }); - }); -}); diff --git a/spec/dependencies/validator.spec.php b/spec/dependencies/validator.spec.php deleted file mode 100644 index da838bf3..00000000 --- a/spec/dependencies/validator.spec.php +++ /dev/null @@ -1,317 +0,0 @@ -factory = Double::instance(['extends' => '\Dxw\Whippet\Factory']); - $this->projectDirectory = Double::instance([ - 'extends' => 'Dxw\Whippet\ProjectDirectory', - 'magicMethods' => true - ]); - $this->validator = new \Dxw\Whippet\Dependencies\Validator( - $this->factory, - $this->projectDirectory - ); - }); - - describe('->validate()', function () { - context('whippet.lock cannot be found, or is invalid JSON', function () { - it('returns an error', function () { - allow($this->factory)->toReceive('callStatic')->andReturn(\Result\Result::err('An error')); - $result = $this->validator->validate(); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->getErr())->toEqual('whippet.lock error: An error'); - }); - }); - - context('whippet.json cannot be found, or is invalid JSON', function () { - it('returns an error', function () { - $this->whippetLock = Double::instance(); - allow($this->whippetLock)->toReceive('isErr')->andReturn(false); - allow($this->whippetLock)->toReceive('unwrap')->andReturn($this->whippetLock); - allow($this->factory)->toReceive('callStatic')->andReturn( - $this->whippetLock, - \Result\Result::err('Whippet Json error') - ); - $result = $this->validator->validate(); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->getErr())->toEqual('whippet.json error: Whippet Json error'); - }); - }); - - context('both whippet.json and whippet.lock are present and valid', function () { - beforeEach(function () { - $this->whippetLock = Double::instance(); - allow($this->whippetLock)->toReceive('isErr')->andReturn(false); - allow($this->whippetLock)->toReceive('unwrap')->andReturn($this->whippetLock); - $this->whippetJson = Double::instance(); - allow($this->whippetJson)->toReceive('isErr')->andReturn(false); - allow($this->whippetJson)->toReceive('unwrap')->andReturn($this->whippetJson); - allow($this->factory)->toReceive('callStatic')->andReturn( - $this->whippetLock, - $this->whippetJson - ); - }); - context('but the hash is mismatched', function () { - it('returns an error', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_different_sha'); - $result = $this->validator->validate(); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->getErr())->toEqual('hash mismatch between whippet.json and whippet.lock'); - }); - }); - context('but there are different numbers of dependencies in the .json and .lock', function () { - it('returns an error', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); - allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet' - ], - [ - 'name' => 'advanced-custom-fields-pro' - ] - ]); - allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet' - ] - ]); - $result = $this->validator->validate(); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->getErr())->toEqual('Mismatched dependencies count for type plugins'); - }); - }); - context('but entries in .json and .lock do not match', function () { - it('returns an error', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); - allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet' - ], - [ - 'name' => 'advanced-custom-fields-pro' - ] - ]); - allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet' - ], - [ - 'name' => 'some-other-plugin' - ] - ]); - $result = $this->validator->validate(); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->getErr())->toEqual('No entry found in whippet.lock for plugins: advanced-custom-fields-pro'); - }); - }); - context('but an entry in .lock is malformed', function () { - it('returns an error', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); - allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet' - ], - [ - 'name' => 'advanced-custom-fields-pro' - ] - ]); - allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet', - 'src' => 'a_src_1', - 'revision' => 'a_revision_1' - ], - [ - 'name' => 'advanced-custom-fields-pro', - 'src' => 'a_src_2', - ] - ]); - $result = $this->validator->validate(); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->getErr())->toEqual('Missing revision property in whippet.lock for plugins: advanced-custom-fields-pro'); - }); - }); - context('but an entry in .json is missing a ref when --enforce-refs is set', function () { - it('returns an error', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet", "ref": "v1"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); - allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet', - 'ref' => 'v1' - ], - [ - 'name' => 'advanced-custom-fields-pro' - ] - ]); - allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet', - 'src' => 'a_src_1', - 'revision' => 'a_revision_1' - ], - [ - 'name' => 'advanced-custom-fields-pro', - 'src' => 'a_src_2', - 'revision' => 'a_revision_2' - ] - ]); - ob_start(); - $result = $this->validator->validate(true); - $output = ob_get_clean(); - expect($result->getErr())->toEqual("Missing reference in whippet.json for plugins: advanced-custom-fields-pro"); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->isErr())->toEqual(true); - }); - }); - context('but an entry in whippet.json is missing a ref when --enforce-refs is not set', function () { - it('returns an ok result', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet", "ref": "v1"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); - allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet', - 'ref' => 'v1' - ], - [ - 'name' => 'advanced-custom-fields-pro' - ] - ]); - allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet', - 'src' => 'a_src_1', - 'revision' => 'a_revision_1' - ], - [ - 'name' => 'advanced-custom-fields-pro', - 'src' => 'a_src_2', - 'revision' => 'a_revision_2' - ] - ]); - ob_start(); - $result = $this->validator->validate(); - $output = ob_get_clean(); - expect($output)->toEqual("Valid whippet.json and whippet.lock \n"); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->isErr())->toEqual(false); - }); - }); - context('and everything is good', function () { - it('returns an ok result', function () { - $whippetContents = '{ - "src": { - "plugins": "git@github.com:dxw-wordpress-plugins/" - }, - "plugins": [ - {"name": "akismet"}, - {"name": "advanced-custom-fields-pro"} - ] - }'; - allow('file_get_contents')->toBeCalled()->andReturn($whippetContents); - allow('sha1')->toBeCalled()->andReturn('a_matching_sha'); - expect('sha1')->toBeCalled()->once()->with($whippetContents); - allow($this->whippetLock)->toReceive('getHash')->andReturn('a_matching_sha'); - allow($this->whippetJson)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet' - ], - [ - 'name' => 'advanced-custom-fields-pro' - ] - ]); - allow($this->whippetLock)->toReceive('getDependencies')->andReturn([], [ - [ - 'name' => 'akismet', - 'src' => 'a_src_1', - 'revision' => 'a_revision_1' - ], - [ - 'name' => 'advanced-custom-fields-pro', - 'src' => 'a_src_2', - 'revision' => 'a_revision_2' - ] - ]); - ob_start(); - $result = $this->validator->validate(); - $output = ob_get_clean(); - expect($output)->toEqual("Valid whippet.json and whippet.lock \n"); - expect($result)->toBeAnInstanceOf(\Result\Result::class); - expect($result->isErr())->toEqual(false); - }); - }); - }); - }); -}); diff --git a/src/Dependencies/DependencyTypes.php b/src/Dependencies/DependencyTypes.php deleted file mode 100644 index e3de5afd..00000000 --- a/src/Dependencies/DependencyTypes.php +++ /dev/null @@ -1,16 +0,0 @@ -factory = $factory; - $this->dir = $dir; - } - - public function describe() - { - $resultLoad = $this->loadWhippetLock(); - if ($resultLoad->isErr()) { - return $resultLoad; - } - $git = new \Dxw\Whippet\Git\Git($this->dir); - $results = []; - foreach (DependencyTypes::getDependencyTypes() as $type) { - foreach ($this->lockFile->getDependencies($type) as $dep) { - $result = $git::tag_for_commit($dep['src'], $dep['revision']); - if ($result->isErr()) { - return $result; - } - $results[$type][$dep["name"]] = $result->unwrap(); - } - } - $pretty_results = json_encode($results, JSON_PRETTY_PRINT); - printf($pretty_results); - - return \Result\Result::ok(); - } - - private function loadWhippetLock() - { - $result = $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $this->dir.'/whippet.lock'); - if ($result->isErr()) { - return $result; - } else { - $this->lockFile = $result->unwrap(); - } - - return \Result\Result::ok(); - } -} diff --git a/src/Dependencies/Installer.php b/src/Dependencies/Installer.php deleted file mode 100644 index e76475c0..00000000 --- a/src/Dependencies/Installer.php +++ /dev/null @@ -1,149 +0,0 @@ -factory = $factory; - $this->dir = $dir; - $this->inspectionChecker = $inspection_checker; - } - - public function installAll() - { - $result = $this->loadWhippetFiles(); - if ($result->isErr()) { - return $result; - } - - $dependencies = []; - - foreach (DependencyTypes::getDependencyTypes() as $type) { - $dependencies[$type] = $this->lockFile->getDependencies($type); - } - - return $this->install($dependencies); - } - - public function installSingle($dep) - { - //Will only get here if $dep is valid format and matches an entry in whippet.json - - $result = $this->loadWhippetFiles(); - if ($result->isErr()) { - return $result; - } - - $type = explode('/', $dep)[0]; - $name = explode('/', $dep)[1]; - - foreach ($this->lockFile->getDependencies($type) as $dep) { - if ($dep['name'] === $name) { - return $this->install([$type => [$dep]]); - } - } - } - - private function install(array $dependencies) - { - $count = 0; - - foreach ($dependencies as $type => $typeDependencies) { - foreach ($typeDependencies as $dependency) { - $result = $this->installDependency($type, $dependency); - if ($result->isErr()) { - return $result; - } - - echo $this->inspectionDetailsMessage($type, $dependency); - echo "\n"; - - ++$count; - } - } - - if ($count === 0) { - echo "whippet.lock contains nothing to install\n"; - } - - return \Result\Result::ok(); - } - - private function loadWhippetFiles() - { - if (!is_file($this->dir.'/whippet.json')) { - return \Result\Result::err('whippet.json not found'); - } - - $result = $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $this->dir.'/whippet.lock'); - if ($result->isErr()) { - return \Result\Result::err(sprintf('whippet.lock: %s', $result->getErr())); - } - $this->lockFile = $result->unwrap(); - - $contents = file_get_contents($this->dir.'/whippet.json'); - - // Strip CR for git/Windows compatibility - $contents = strtr($contents, ["\r" => '']); - - $hash = sha1($contents); - if ($this->lockFile->getHash() !== $hash) { - return \Result\Result::err('mismatched hash - run `whippet dependencies update` first'); - } - - return \Result\Result::ok(); - } - - private function installDependency($type, $dep) - { - $path = $this->dir.'/wp-content/'.$type.'/'.$dep['name']; - - $git = $this->factory->newInstance('\\Dxw\\Whippet\\Git\\Git', $path); - - if (!$git->is_repo()) { - echo sprintf("[Adding %s/%s]\n", $type, $dep['name']); - $result = $git->clone_repo($dep['src']); - - if ($result === false) { - return \Result\Result::err('could not clone repository'); - } - } else { - echo sprintf("[Checking %s/%s]\n", $type, $dep['name']); - } - - $result = $git->checkout($dep['revision']); - if ($result === false) { - return \Result\Result::err('could not checkout revision'); - } - - return \Result\Result::ok(); - } - - private function inspectionDetailsMessage($type, $dep) - { - $result = $this->inspectionChecker->check($type, $dep); - - if (!$result->isErr()) { - $inspectionDetails = $result->unwrap(); - if (!empty($inspectionDetails)) { - $message = sprintf("%s\n", $inspectionDetails); - } else { - $message = null; - } - } else { - $error = $result->getErr(); - $message = sprintf("[ERROR] %s\n", $error); - } - return $message; - } -} diff --git a/src/Dependencies/Updater.php b/src/Dependencies/Updater.php deleted file mode 100644 index d7977dc1..00000000 --- a/src/Dependencies/Updater.php +++ /dev/null @@ -1,220 +0,0 @@ -factory = $factory; - $this->dir = $dir; - } - - public function updateSingle($dep) - { - $result = $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $this->dir.'/whippet.lock'); - if ($result->isErr()) { - echo "No whippet.lock file exists, you need to run `whippet deps update` to generate one before you can update a specific dependency. \n"; - return \Result\Result::err(sprintf('whippet.lock: %s', $result->getErr())); - } - - if (strpos($dep, '/') === false) { - echo "Dependency should be in format [type]/[name]. \n"; - return \Result\Result::err('Incorrect dependency format'); - } - - $type = explode('/', $dep)[0]; - $name = explode('/', $dep)[1]; - - $result = $this->prepareForUpdate(); - if ($result->isErr()) { - return $result; - } - - $dep = $this->jsonFile->getDependency($type, $name); - if ($dep === []) { - return \Result\Result::err('No matching dependency in whippet.json'); - } - - return $this->update([$type => [$dep]]); - } - - public function updateAll() - { - $result = $this->prepareForUpdate(); - if ($result->isErr()) { - return $result; - } - - $allDependencies = []; - - foreach (DependencyTypes::getDependencyTypes() as $type) { - $allDependencies[$type] = $this->jsonFile->getDependencies($type); - } - - return $this->update($allDependencies); - } - - private function update(array $dependencies) - { - $this->updateHash(); - $this->loadGitignore(); - $count = 0; - foreach ($dependencies as $type => $typeDependencies) { - foreach ($typeDependencies as $dep) { - echo sprintf("[Updating %s/%s]\n", $type, $dep['name']); - $result = $this->addDependencyToLockfile($type, $dep); - if ($result->isErr()) { - return $result; - } - ++$count; - } - } - $this->saveChanges(); - - if ($count === 0) { - echo "whippet.json contains no dependencies\n"; - } - return \Result\Result::ok(); - } - - private function prepareForUpdate() - { - $result = $this->loadWhippetFiles(); - if ($result->isErr()) { - return $result; - } - return \Result\Result::ok(); - } - - private function saveChanges() - { - $this->lockFile->saveToPath($this->dir.'/whippet.lock'); - $this->createGitIgnore(); - } - - private function loadWhippetFiles() - { - $result = $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $this->dir.'/whippet.json'); - if ($result->isErr()) { - return \Result\Result::err(sprintf('whippet.json: %s', $result->getErr())); - } - $this->jsonFile = $result->unwrap(); - - $result = $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $this->dir.'/whippet.lock'); - if ($result->isErr()) { - $this->lockFile = $this->factory->newInstance('\\Dxw\\Whippet\\Files\\WhippetLock', []); - } else { - $this->lockFile = $result->unwrap(); - } - - return \Result\Result::ok(); - } - - private function updateHash() - { - $contents = file_get_contents($this->dir.'/whippet.json'); - - // Strip CR for git/Windows compatibility - $contents = strtr($contents, ["\r" => '']); - - $jsonHash = sha1($contents); - $this->lockFile->setHash($jsonHash); - } - - private function createGitIgnore() - { - foreach (DependencyTypes::getDependencyTypes() as $type) { - foreach ($this->jsonFile->getDependencies($type) as $dep) { - $this->addDependencyToIgnoresArray($type, $dep['name']); - } - } - $this->gitignore->save_ignores(array_unique($this->ignores)); - } - - private function loadGitignore() - { - $this->gitignore = $this->factory->newInstance('\\Dxw\\Whippet\\Git\\Gitignore', (string) $this->dir); - - $this->ignores = []; - if (is_file($this->dir.'/.gitignore')) { - $this->ignores = $this->gitignore->get_ignores(); - } - - // Iterate through locked dependencies and remove from gitignore - foreach (DependencyTypes::getDependencyTypes() as $type) { - foreach ($this->lockFile->getDependencies($type) as $dep) { - $line = $this->getGitignoreDependencyLine($type, $dep['name']); - $index = array_search($line, $this->ignores); - if ($index !== false) { - unset($this->ignores[$index]); - } - } - } - } - - private function addDependencyToIgnoresArray($type, $name) - { - $this->ignores[] = $this->getGitignoreDependencyLine($type, $name); - } - - private function getGitignoreDependencyLine($type, $name) - { - return '/wp-content/'.$type.'/'.$name."\n"; - } - - private function addDependencyToLockfile($type, array $dep) - { - if (isset($dep['src'])) { - $src = $dep['src']; - } else { - $sources = $this->jsonFile->getSources(); - if (!isset($sources[$type])) { - return \Result\Result::err('missing sources'); - } - $src = $sources[$type].$dep['name']; - } - - if (isset($dep['ref'])) { - $ref = $dep['ref']; - $commitResult = $this->fetchRef($src, $ref); - } else { - $commitResult = $this->fetchDefault($src); - } - - if ($commitResult->isErr()) { - return \Result\Result::err(sprintf('git command failed: %s', $commitResult->getErr())); - } - - $this->lockFile->addDependency($type, $dep['name'], $src, $commitResult->unwrap()); - - return \Result\Result::ok(); - } - - private function fetchRef(string $src, string $ref): \Result\Result - { - return $this->factory->callStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', $src, $ref); - } - - // Fetch the default branch - // That may be `main` or `master` - private function fetchDefault(string $src): \Result\Result - { - $main = $this->fetchRef($src, 'main'); - - if (!$main->isErr()) { - return $main; - } - - return $this->fetchRef($src, 'master'); - } -} diff --git a/src/Dependencies/Validator.php b/src/Dependencies/Validator.php deleted file mode 100644 index 209638ec..00000000 --- a/src/Dependencies/Validator.php +++ /dev/null @@ -1,111 +0,0 @@ -factory = $factory; - $this->dir = $dir; - } - - public function validate(bool $enforceRefs = false) - { - $whippetLock = $this->loadWhippetLock(); - if ($whippetLock->isErr()) { - return \Result\Result::err(sprintf( - 'whippet.lock error: %s', - $whippetLock->getErr() - )); - } else { - $whippetLock = $whippetLock->unwrap(); - } - - $whippetJson = $this->loadWhippetJson(); - if ($whippetJson->isErr()) { - return \Result\Result::err(sprintf( - 'whippet.json error: %s', - $whippetJson->getErr() - )); - } else { - $whippetJson = $whippetJson->unwrap(); - } - - // Check hashes - if ($this->whippetJsonHash() !== $whippetLock->getHash()) { - return \Result\Result::err( - 'hash mismatch between whippet.json and whippet.lock' - ); - }; - - // Check that entries in whippet.json - // match entries in whippet.lock - foreach (DependencyTypes::getDependencyTypes() as $type) { - $whippetJsonDependencies = $whippetJson->getDependencies($type); - $whippetLockDependencies = $whippetLock->getDependencies($type); - if (count($whippetJsonDependencies) !== count($whippetLockDependencies)) { - return \Result\Result::err(sprintf('Mismatched dependencies count for type %s', $type)); - } - - foreach ($whippetJsonDependencies as $whippetJsonDependency) { - if (!$this->lockMatchFoundForDependency($whippetJsonDependency, $whippetLockDependencies)) { - return \Result\Result::err(sprintf('No entry found in whippet.lock for %s: %s', $type, $whippetJsonDependency["name"])); - } - if ($enforceRefs) { - if (!array_key_exists('ref', $whippetJsonDependency)) { - return \Result\Result::err(sprintf("Missing reference in whippet.json for %s: %s", $type, $whippetJsonDependency["name"])); - } - } - } - - foreach ($whippetLockDependencies as $whippetLockDependency) { - foreach (['revision', 'src'] as $property) { - if (!array_key_exists($property, $whippetLockDependency)) { - return \Result\Result::err(sprintf("Missing %s property in whippet.lock for %s: %s", $property, $type, $whippetLockDependency["name"])); - } - } - } - } - - echo "Valid whippet.json and whippet.lock \n"; - - return \Result\Result::ok(); - } - - private function loadWhippetLock() - { - return $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $this->dir.'/whippet.lock'); - } - - private function loadWhippetJson() - { - return $this->factory->callStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $this->dir.'/whippet.json'); - } - - private function whippetJsonHash() - { - $contents = file_get_contents($this->dir.'/whippet.json'); - - // Strip CR for git/Windows compatibility - $contents = strtr($contents, ["\r" => '']); - - return sha1($contents); - } - - private function lockMatchFoundForDependency($whippetJsonDependency, $whippetLockDependencies) - { - $matchFound = false; - foreach ($whippetLockDependencies as $whippetLockDependency) { - if ($whippetJsonDependency["name"] == $whippetLockDependency["name"]) { - $matchFound = true; - } - } - return $matchFound; - } -} diff --git a/src/Factory.php b/src/Factory.php deleted file mode 100644 index 5c0ccc8b..00000000 --- a/src/Factory.php +++ /dev/null @@ -1,25 +0,0 @@ -newInstanceArgs($args); - } - - public function callStatic() - { - $args = func_get_args(); - $className = array_shift($args); - $methodName = array_shift($args); - - return call_user_func_array([$className, $methodName], $args); - } -} diff --git a/src/Files/Base.php b/src/Files/Base.php deleted file mode 100644 index 53492f0a..00000000 --- a/src/Files/Base.php +++ /dev/null @@ -1,37 +0,0 @@ -data = $data; - } - - public function saveToPath(/* string */ $path) - { - file_put_contents($path, json_encode($this->data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)."\n"); - } -} diff --git a/src/Files/WhippetJson.php b/src/Files/WhippetJson.php deleted file mode 100644 index 396ff435..00000000 --- a/src/Files/WhippetJson.php +++ /dev/null @@ -1,35 +0,0 @@ -data[$type])) { - return $this->data[$type]; - } else { - return []; - } - } - - public function getDependency(/* string */ $type, /* string */ $name) - { - if (isset($this->data[$type])) { - foreach ($this->getDependencies($type) as $dep) { - if ($dep['name'] === $name) { - return $dep; - } - } - } - return []; - } - - public function getSources() - { - return $this->data['src']; - } -} diff --git a/src/Files/WhippetLock.php b/src/Files/WhippetLock.php deleted file mode 100644 index bbcae3af..00000000 --- a/src/Files/WhippetLock.php +++ /dev/null @@ -1,45 +0,0 @@ -data[$type])) { - return []; - } - - return $this->data[$type]; - } - - public function getHash() - { - return $this->data['hash']; - } - - public function setHash(/* string */ $hash) - { - $this->data['hash'] = $hash; - } - - public function addDependency(/* string */ $type, /* string */ $name, /* string */ $src, /* string */ $revision) - { - if (isset($this->data[$type])) { - foreach ($this->data[$type] as $key => $dependency) { - if ($name === $dependency['name']) { - array_splice($this->data[$type], $key, 1); - } - } - } - - $this->data[$type][] = [ - 'name' => $name, - 'src' => $src, - 'revision' => $revision, - ]; - } -} diff --git a/src/Git/Git.php b/src/Git/Git.php deleted file mode 100644 index c7482487..00000000 --- a/src/Git/Git.php +++ /dev/null @@ -1,451 +0,0 @@ -repo_path = $repo_path; - } - - public static function init($dir) - { - $output = []; - $return = ''; - - exec(sprintf('git init %s', escapeshellarg($dir)), $output, $return); - - return [$output, $return]; - } - - public function is_repo() - { - return file_exists("{$this->repo_path}/.git"); - } - - private function is_github_repository($repository) - { - $pos = strpos($repository, 'github.com'); - return $pos !== false; - } - - /** Issue a warning to the user if a GitHub repository is archived. - * - * Note that we specifically ignore any non-GitHub repository for now, - * which is why we have not factored this code into its own class structure. - * - * See: https://docs.github.com/en/rest/repos/repos?get-a-repository - */ - public function check_is_archived_github_repository($repository) - { - if (!$this->is_github_repository($repository)) { - return; - } - $baseurl = 'https://api.github.com/repos'; # Must not have a trailing slash. - $substrings = explode('/', $repository); - $num_substrings = count($substrings); - # If the URL is http formatted: ['https', 'github.com', 'org', 'repo'] - # If the URL is ssh formatted: ['git@git.github.com:org', 'repo'] - if ($num_substrings < 2) { - return false; - } - $repo = $substrings[$num_substrings - 1]; - if (false !== strpos($repo, '.git')) { # repo.git - $repo = str_replace('.git', '', $repo); - } - - if (false !== strpos($repository, '@')) { - # ssh formatted... - $org = explode(':', $substrings[$num_substrings - 2])[1]; - } else { - # http formatted... - $org = $substrings[$num_substrings - 2]; - } - $api_url = join('/', [$baseurl, $org, $repo]); - - $curl = curl_init(); - curl_setopt($curl, CURLOPT_URL, $api_url); - curl_setopt($curl, CURLOPT_USERAGENT, 'Whippet'); - curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); - $raw_json = curl_exec($curl); - $json = json_decode($raw_json); - curl_close($curl); - if (!is_null($json) && property_exists($json, 'archived') && $json->archived) { - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; - echo "!! WARNING: GitHub repo is archived. This dependency !!\n"; - echo "!! should be replaced before the repo is removed. !!\n"; - echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; - } - } - - public function checkout($revision) - { - list($output, $return) = $this->run_command(['git', 'remote', 'get-url', 'origin']); - if ($return === 0) { - $this->check_is_archived_github_repository($output[0]); - } - - list($output, $return) = $this->run_command(['git', 'fetch', '-a', '--force', '&&', 'git', 'checkout', $revision]); - - return $this->check_git_return('Checkout failed', $return, $output); - } - - public function hard_reset($revision = 'HEAD') - { - list($output, $return) = $this->run_command(['git', 'reset', '--hard', $revision]); - - return $this->check_git_return('Reset --hard failed', $return, $output); - } - - public function mixed_reset($revision = 'HEAD') - { - list($output, $return) = $this->run_command(['git', 'reset', '--mixed', $revision]); - - return $this->check_git_return('Reset --mixed failed', $return, $output); - } - - public function clone_repo($repository) - { - $this->check_is_archived_github_repository($repository); - - list($output, $return) = $this->run_command(['git', 'clone', $repository, $this->repo_path], false); - - if (!$this->check_git_return('Clone failed', $return, $output)) { - return false; - } - - return true; - } - - public function clone_no_checkout($repository) - { - $this->check_is_archived_github_repository($repository); - - $tmpdir = $this->get_tmpdir(); - - list($output, $return) = $this->run_command(['git', 'clone', '--no-checkout', $repository, $tmpdir], false); - - if (!$this->check_git_return('No-checkout clone failed', $return, $output)) { - return false; - } - - $this->run_command(['mv', $tmpdir . '/.git', $this->repo_path]); - - return true; - } - - public function submodule_update() - { - list($output, $return) = $this->run_command(['git', 'submodule', 'update', '--init', '--recursive']); - - if (!$this->check_git_return('submodule update failed', $return, $output)) { - return false; - } - - return true; - } - - public function submodule_status() - { - list($output, $return) = $this->run_command(['git', 'submodule', 'status']); - - if (!$this->check_git_return('submodule status failed', $return, $output)) { - return false; - } - - $submodules = []; - - foreach ($output as $line) { - if (preg_match('/(\+?U?-?)([a-z0-9]{40}) ([^\(]+)([^\)]*)/', trim($line), $matches)) { - $submodule = new \stdClass(); - $submodule->status = trim($matches[1]); - $submodule->commit = trim($matches[2]); - $submodule->dir = trim($matches[3]); - $submodule->description = preg_replace('/^[\s\(]*/', '', $matches[4]); - $submodule->remotes = (new self("{$this->repo_path}/{$submodule->dir}"))->get_remotes(); - - $submodules[$submodule->dir] = $submodule; - } else { - echo "Failed to parse: {$line}\n"; - - return false; - } - } - - return $submodules; - } - - public function submodule_add($repo, $path) - { - list($output, $return) = $this->run_command(['git', 'submodule', 'add', $repo, $path]); - - if (!$this->check_git_return('submodule status failed', $return, $output)) { - return false; - } - - return true; - } - - public function delete_repo() - { - $this->run_command(['rm', '-rf', $this->repo_path], false); - } - - public function current_commit() - { - list($output, $return) = $this->run_command(['git', 'rev-parse', 'HEAD']); - - if (!$this->check_git_return('Checkout failed', $return, $output)) { - return false; - } - - return $output[0]; - } - - public function local_revision_commit($revision) - { - list($output, $return) = $this->run_command(['git', 'show-ref']); - - if (!$this->check_git_return('show-ref failed', $return, $output)) { - return false; - } - - foreach ($this->parse_ref_list($output) as $ref) { - if ($ref->name == $revision) { - return $ref->commit; - } - } - - return false; - } - - public function get_remotes() - { - list($output, $return) = $this->run_command(['git', 'remote', '-v']); - - if (!$this->check_git_return('git remote failed', $return, $output)) { - return false; - } - - $remotes = []; - - foreach ($output as $line) { - if (preg_match('/^([^\s]+)\s+([^\s]+)/', trim($line), $matches)) { - $remotes[$matches[1]] = $matches[2]; - } else { - echo "Failed to parse: {$line}\n"; - - return false; - } - } - - return $remotes; - } - - public function remote_revision_commit($revision) - { - list($output, $return) = $this->run_command(['git', 'ls-remote']); - - if (!$this->check_git_return('ls-remote failed', $return, $output)) { - return false; - } - - foreach ($this->parse_ref_list($output) as $ref) { - if ($ref->name == $revision) { - return $ref->commit; - } - } - - return $this->parse_ref_list($output); - } - - public function fetch() - { - list($output, $return) = $this->run_command(['git', 'fetch', '-a', '--force']); - - return $this->check_git_return('Checkout failed', $return, $output); - } - - public function rm($path, $rf = false) - { - list($output, $return) = $this->run_command(['git', 'rm', $rf ? '-rf' : '', $path]); - - return $this->check_git_return('rm failed', $return, $output); - } - - public function add($path) - { - list($output, $return) = $this->run_command(['git', 'add', $path]); - - return $this->check_git_return('Add failed', $return, $output); - } - - public function commit($message) - { - list($output, $return) = $this->run_command(['git', 'commit', '-m', $message]); - - return $this->check_git_return('Checkout failed', $return, $output); - } - - protected function parse_ref_list($reflist) - { - $refs = []; - foreach ($reflist as $line) { - if (preg_match("/^([a-z0-9]{40})\s+(.+)$/", $line, $matches)) { - $ref = new \stdClass(); - - $ref->commit = $matches[1]; - - if (preg_match('#^refs/(tags|heads)/(.+)$#', $matches[2], $matches)) { - $ref->tag = $matches[1] == 'tags'; - $ref->branch = $matches[1] == 'branch'; - $ref->name = $matches[2]; - - $refs[] = $ref; - } - } - } - - return $refs; - } - - /** - * This function checks to see whether git successfully ran. If so, - * it returns true. If not, it prints the supplied message along with - * git's output and returns false. - * - * $message An error message to display on failure - * $return Git's return code, as set by exec() - * $output Git's output code, as set by exec() - */ - protected function check_git_return($message, $return, $output) - { - if ($return !== 0) { - echo "{$message}:\n\n".implode("\n", $output); - - return false; - } - - return true; - } - - /** - * Runs the specified git command, with some basic sanity checking to - * ensure that required repos and directories exist. - * - * $command The command to be run - * $cd If true, Whippet will change its working directory to repo_path before executing $command - * - * See also: this::__construct. - * @param array $cmd - * @param bool $cd - * @return array - */ - protected function run_command(array $cmd, $cd = true) - { - $output = []; - $return = 0; - $command = ''; - - foreach ($cmd as $value) { - $command .= !in_array($value, $this->command_separators, true) ? escapeshellarg($value) : $value; - $command .= ' '; - } - - if ($cd && !file_exists($this->repo_path)) { - echo "Error: directory does not exist ({$this->repo_path})\n"; - exit(1); - } - - if ($cd) { - $cd = sprintf("cd %s && ", escapeshellarg($this->repo_path)); - } else { - $cd = ''; - } - - exec("{$cd}{$command}", $output, $return); - //echo ("{$cd}{$command}\n"); - - return [$output, $return]; - } - - /** - * Obtains a valid directory for temporary files on the current system, or in a specified location. - * - * $in_dir If supplied, the temporary directory will be created as a subdirectory of this path. If false or missing, the system's default temporary file location will be used. - */ - public function get_tmpdir($in_dir = false) - { - if (!$in_dir) { - $in_dir = sys_get_temp_dir(); - } - - do { - $tmp_dir = $in_dir.'/'.md5(microtime()); - } while (file_exists($tmp_dir)); - - return $tmp_dir; - } - - public static function ls_remote($repo, $ref) - { - exec(sprintf('git ls-remote %s %s', escapeshellarg($repo), escapeshellarg($ref)), $output, $return); - - if ($return !== 0) { - return \Result\Result::err('git error'); - } - - if (count($output) === 0) { - return \Result\Result::err('ref not found'); - } - - return \Result\Result::ok(explode("\t", $output[0])[0]); - } - - public static function tag_for_commit($repo, $commit_hash) - { - exec(sprintf('git ls-remote %s', escapeshellarg($repo)), $output, $return); - - if ($return !== 0) { - return \Result\Result::err('git error when attempting to access ' . $repo); - } - - if (count($output) === 0) { - return \Result\Result::err('no references found for repo ' . $repo); - } - - $tags_array = array_values(array_filter($output, function ($ref) use ($commit_hash) { - return strpos($ref, $commit_hash) === 0 && strpos($ref, 'refs/tags') !== false; - })); - - if (empty($tags_array)) { - return \Result\Result::ok('No tags for commit ' . $commit_hash); - } - - usort($tags_array, function ($a, $b) { - return strlen($b) <=> strlen($a); - }); - - $resultArray = explode('/', $tags_array[0]); - $result = str_replace("^{}", "", end($resultArray)); - - return \Result\Result::ok($result); - } -}; diff --git a/src/Git/Gitignore.php b/src/Git/Gitignore.php deleted file mode 100644 index b37fffb9..00000000 --- a/src/Git/Gitignore.php +++ /dev/null @@ -1,57 +0,0 @@ -ignore_file = "{$repo_path}/.gitignore"; - } - - /** - * Loads a .gitignore file into an array, with consistent line endings. - */ - public function get_ignores() - { - return $this->ensure_closing_newline(file($this->ignore_file)); - } - - /** - * Saves the supplied .gitignore lines back to the file. - */ - public function save_ignores($ignores) - { - return file_put_contents($this->ignore_file, $ignores); - } - - /** - * Ensures that the last line in the ignores has a line return. - * - * TODO: This class, and its callers, should be refactored to remove the line - * ending on each element in this array - */ - private function ensure_closing_newline($ignores) - { - $index_of_last_line = count($ignores) - 1; - $last_line = $index_of_last_line >= 0 ? $ignores[$index_of_last_line] : 0; - $last_character = substr($last_line, -1); - - if ($last_character != "\n") { - $ignores[$index_of_last_line] = $last_line."\n"; - } - - return $ignores; - } -} diff --git a/src/Models/Inspection.php b/src/Models/Inspection.php deleted file mode 100644 index 87078c53..00000000 --- a/src/Models/Inspection.php +++ /dev/null @@ -1,32 +0,0 @@ -date = date_create($date_string); - $this->versions = $versions; - $this->result = $result; - $this->url = $url; - } -} diff --git a/src/Modules/Dependencies.php b/src/Modules/Dependencies.php deleted file mode 100644 index 7a0f5d5f..00000000 --- a/src/Modules/Dependencies.php +++ /dev/null @@ -1,102 +0,0 @@ -factory = new \Dxw\Whippet\Factory(); - $this->projectDirectory = \Dxw\Whippet\ProjectDirectory::find(getcwd()); - $base_api = new \Dxw\Whippet\Services\BaseApi(); - $json_api = new \Dxw\Whippet\Services\JsonApi($base_api); - if (isset($_SERVER['INSPECTIONS_API_HOST'])) { - $inspections_api_host = $_SERVER['INSPECTIONS_API_HOST']; - } else { - $inspections_api_host = 'https://advisories.dxw.com'; - } - $inspections_api_path = '/wp-json/v1/inspections/'; - $this->inspections_api = new \Dxw\Whippet\Services\InspectionsApi($inspections_api_host, $inspections_api_path, $json_api); - } - - public function commands() - { - $inspections_host_option = function ($option_parser) { - $option_parser->addRule('c|disable-inspections-check', 'Disables the calls to the dxw Security API which check for security inspections of plugins'); - }; - $this->command('install', 'Installs dependencies', $inspections_host_option); - $this->command('update', 'Updates dependencies to their latest versions. Use deps update [type]/[name] to update a specific dependency', $inspections_host_option); - $this->command('validate', 'Validate whippet.json and whippet.lock files', function ($option_parser) { - $option_parser->addRule('r|enforce-refs', "Enforce refs for all whippet dependencies"); - }); - $this->command('describe', 'List dependencies and their versions'); - } - - private function exitIfError(\Result\Result $result) - { - if ($result->isErr()) { - echo sprintf("ERROR: %s\n", $result->getErr()); - exit(1); - } - } - - private function getDirectory() - { - $this->exitIfError($this->projectDirectory); - - return $this->projectDirectory->unwrap(); - } - - public function install() - { - $dir = $this->getDirectory(); - $installer = new \Dxw\Whippet\Dependencies\Installer($this->factory, $dir, $this->inspectionChecker()); - - $this->exitIfError($installer->installAll()); - } - - public function update($dep = null) - { - $dir = $this->getDirectory(); - $updater = new \Dxw\Whippet\Dependencies\Updater($this->factory, $dir); - $installer = new \Dxw\Whippet\Dependencies\Installer($this->factory, $dir, $this->inspectionChecker()); - - if (is_null($dep)) { - $this->exitIfError($updater->updateAll()); - $this->exitIfError($installer->installAll()); - } else { - $this->exitIfError($updater->updateSingle($dep)); - $this->exitIfError($installer->installSingle($dep)); - } - } - - public function validate() - { - $dir = $this->getDirectory(); - $validator = new \Dxw\Whippet\Dependencies\Validator($this->factory, $dir); - $enforceRefs = isset($this->options->{'enforce-refs'}) ? true : false; - $this->exitIfError(($validator->validate($enforceRefs))); - } - - public function describe() - { - $dir = $this->getDirectory(); - $describer = new \Dxw\Whippet\Dependencies\Describer($this->factory, $dir); - $this->exitIfError(($describer->describe())); - } - - private function inspectionChecker() - { - if (isset($this->options->{'disable-inspections-check'})) { - return new \Dxw\Whippet\Services\NullInspectionChecker(); - } else { - return new \Dxw\Whippet\Services\InspectionChecker($this->inspections_api); - } - } -} diff --git a/src/Modules/Deploy.php b/src/Modules/Deploy.php deleted file mode 100644 index 042384b5..00000000 --- a/src/Modules/Deploy.php +++ /dev/null @@ -1,206 +0,0 @@ -deploy_dir = $dir; - $this->releases_dir = "{$this->deploy_dir}/releases"; - $this->shared_dir = "{$this->deploy_dir}/shared"; - $this->public_dir = ""; - $this->releases_manifest = []; - } - - public function deploy($force, $keep, $public) - { - try { - // - // 1. Make sure the target directory does not exist (or exists and is empty) - // 2. Load or create the releases manifest - // 3. Deploy the app into the releases directory - // 4. Validate the deploy - // 5. Create or update the "current" symlink - // - - // - // Make sure the environment is sane - // - - // Got all the deploy directories? - - $this->check_and_create_dir($this->deploy_dir); - $this->check_and_create_dir($this->releases_dir); - $this->check_and_create_dir($this->shared_dir); - if (!empty($public)) { - $this->public_dir = $public; - $this->check_and_create_dir($this->public_dir); - } - - // - // Load up the manifest and create the new release - // - - $this->load_releases_manifest(); - - // TODO: add support for a release message - if (count($this->releases_manifest)) { - $release_number = $this->releases_manifest[count($this->releases_manifest) - 1]->number + 1; - } else { - $release_number = 0; - } - - $new_release = new Release($this->releases_dir, $release_number, $this->public_dir); - - // Make it. - $new_release->create($force, $public); - - // - // Did everything work? - // - - $checks = [ - // - // Is WP there? - // - - 'wp-login.php is missing; is WordPress properly deployed?' => !file_exists("{$new_release->release_dir}/wp-login.php"), - 'wp-includes/wp-db.php is missing; is WordPress properly deployed?' => !file_exists("{$new_release->release_dir}/wp-includes/wp-db.php"), - 'wp-admin/edit.php is missing; is WordPress properly deployed?' => !file_exists("{$new_release->release_dir}/wp-admin/edit.php"), - - // - // Is the app there? - // - - 'wp-content/themes is missing; is the app properly deployed?' => !file_exists("{$new_release->release_dir}/wp-content/themes"), - 'wp-content/plugins is missing; is the app properly deployed?' => !file_exists("{$new_release->release_dir}/wp-content/plugins"), - - // Is there stuff in shared? Does it look right? - 'wp-config.php is not in the shared directory.' => !file_exists("{$new_release->release_dir}/../../shared/wp-config.php"), - 'uploads directory is not in the shared directory.' => (!file_exists("{$new_release->release_dir}/../../shared/uploads") && !is_link("{$new_release->release_dir}/../../shared/uploads")), - "wp-config.php doesn't contain DB_NAME; is it valid?" => !strpos(file_get_contents("{$new_release->release_dir}/../../shared/wp-config.php"), 'DB_NAME'), - - // - // Did the symlinking work? - // - - 'wp-config.php is missing; did the symlinking fail?' => !file_exists("{$new_release->release_dir}/wp-config.php"), - 'wp-content/uploads is missing; did the symlinking fail?' => (!file_exists("{$new_release->release_dir}/wp-content/uploads") && !is_link("{$new_release->release_dir}/../../shared/uploads")), - ]; - - $release_ok = true; - $messages = []; - - foreach ($checks as $message => $failed) { - if ($failed) { - $release_ok = false; - $messages[] = "\t{$message}"; - } - } - - // - // If it was all ok: - // - - if (!$release_ok) { - $broken_release = $broken_release_prefix = "{$new_release->release_dir}.broken"; - $count = 1; - - while (file_exists($broken_release)) { - $broken_release = $broken_release_prefix."_{$count}"; - ++$count; - } - - rename("{$new_release->release_dir}", "{$broken_release}"); - - echo "Problems:\n"; - echo implode("\n", $messages); - echo "\n\nRelease did not validate; it has been moved to: $broken_release"; - - exit(1); - } else { - // If we are forcing, rejig some directories - if ($force) { - rename("{$this->releases_dir}/{$new_release->deployed_commit}", "{$this->releases_dir}/{$new_release->deployed_commit}_".($new_release->number - 1)); - rename("{$new_release->release_dir}", "{$this->releases_dir}/{$new_release->deployed_commit}"); - - $new_release->release_dir = "{$this->releases_dir}/{$new_release->deployed_commit}"; - } - - $current = "{$new_release->release_dir}/../../current"; - - // If we are not forcing, check to see if the release being deployed is the currently deployed release - if so, do nothing - if (!$force && file_exists($current) && readlink($current) == realpath($new_release->release_dir)) { - return; - } - - if (file_exists($current)) { - unlink("{$current}"); - } - - symlink(realpath("{$new_release->release_dir}"), "{$current}"); - - // Update manifest - $release = new \stdClass(); - $release->time = $new_release->time; - $release->number = $new_release->number; - $release->deployed_commit = $new_release->deployed_commit; - - $this->releases_manifest[] = $release; - $this->save_releases_manifest(); - } - } catch (\Exception $e) { - echo $e->getMessage(); - - exit(1); - } - - // - // Delete old deploys - // - // This is a bit hacky. I would like to use the data from the releases manifest for this, but the moving around - // of directories on -f kinda screws that up. It needs to be made better, and then we can do this properly. - // - - $releases = glob(realpath("{$this->releases_dir}").'/*', GLOB_ONLYDIR); - uasort($releases, function ($a, $b) { - return filemtime($b) - filemtime($a); - }); - - foreach (array_slice($releases, $keep) as $dir) { - $this->recurse_rmdir($dir); - } - } - - protected function load_releases_manifest() - { - $releases_manifest_file = "{$this->deploy_dir}/releases/manifest.json"; - - if (!file_exists($releases_manifest_file)) { - $this->releases_manifest = []; - } else { - $this->releases_manifest = json_decode(file_get_contents($releases_manifest_file)); - } - - // TODO: handle invalid json properly - // http://www.php.net/manual/en/function.json-last-error.php - if (!is_array($this->releases_manifest)) { - echo 'Unable to parse releases manifest'; - exit(1); - } - } - - protected function save_releases_manifest() - { - return file_put_contents("{$this->deploy_dir}/releases/manifest.json", json_encode($this->releases_manifest, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); - } -}; diff --git a/src/Modules/Generate.php b/src/Modules/Generate.php deleted file mode 100644 index 624918fb..00000000 --- a/src/Modules/Generate.php +++ /dev/null @@ -1,71 +0,0 @@ -generators_dir = WHIPPET_ROOT.'/generators'; - } - - public function start($thing, $options) - { - if ($thing) { - $this->generate($thing, $options); - } else { - if (isset($options->list)) { - $this->list_generators(); - } - } - } - - public function generate($thing, $options) - { - $generator_file = "{$this->generators_dir}/{$thing}/generate.php"; - - if (!file_exists($generator_file)) { - echo "Could not find a generator for {$thing}\n"; - exit(1); - } - - require $generator_file; - $generator_class = ucfirst($thing).'Generator'; - - return (new $generator_class($options))->generate(); - } - - public function list_generators() - { - echo "Available generators:\n\n"; - foreach (array_keys($this->get_generators()) as $generator) { - echo strval($generator) . "\n"; - } - } - - public function get_generators() - { - $generators = []; - - foreach (new \DirectoryIterator($this->generators_dir) as $file) { - if ($file->isDot()) { - continue; - } - - if ($file->isDir()) { - $generator_file = $this->generators_dir.'/'.$file->getFilename().'/generate.php'; - - if (file_exists($generator_file)) { - $generators[ucfirst($file->getFilename())] = $generator_file; - } - } - } - - return $generators; - } -}; diff --git a/src/Modules/Helpers/ManifestIo.php b/src/Modules/Helpers/ManifestIo.php deleted file mode 100644 index eb0fc84a..00000000 --- a/src/Modules/Helpers/ManifestIo.php +++ /dev/null @@ -1,148 +0,0 @@ -plugins_manifest. - */ - protected function load_plugins_manifest() - { - // Check for #-comments - $raw_file = file_get_contents($this->plugins_manifest_file); - $lines = explode("\n", $raw_file); - foreach ($lines as $line) { - if (preg_match('/^\s*#/', $line)) { - echo "Comments beginning with # are not permitted\n"; - exit(1); - } - } - - $plugins = parse_ini_file($this->plugins_manifest_file); - - if (!is_array($plugins)) { - echo 'Unable to parse Plugins file'; - exit(1); - } - - // Got plugins - turn names to sources - $source = $append = ''; - $this->plugins_manifest = new \stdClass(); - - foreach ($plugins as $plugin => $data) { - // - // Special lines - // - - if ($plugin == 'source') { - if (empty($data)) { - echo "Source is empty. It should just specify a repo root:\n\n source = 'git@github.com:dxw-wordpress-plugins/'\n\nWhippet will attempt to find a source for your plugins by appending the plugin name to this URL."; - exit(1); - } - - $source = $data; - continue; - } - - if ($plugin == 'append') { - $append = $data; - continue; - } - - $repository = $revision = ''; - - // - // Everything else should be a plugin - // - - // First see if there is data. - if (!empty($data)) { - // Format: LABEL[, REPO] - if (strpos($data, ',') !== false) { - list($revision, $repository) = explode(',', $data); - } else { - $revision = $data; - } - } - - if (empty($repository)) { - $repository = "{$source}{$plugin}{$append}"; - } - - if (empty($revision)) { - $revision = 'master'; - } - - // We should now have repo and revision - $this->plugins_manifest->$plugin = new \stdClass(); - $this->plugins_manifest->$plugin->repository = $repository; - $this->plugins_manifest->$plugin->revision = $revision; - } - } - - /** - * Loads the current app's plugins.lock into $this->plugins_locked. - */ - protected function load_plugins_lock() - { - if (!$this->plugins_lock_file) { - return false; - } - - $this->plugins_locked = json_decode(file_get_contents($this->plugins_lock_file)); - - // TODO: handle invalid json properly - // http://www.php.net/manual/en/function.json-last-error.php - if (!is_object($this->plugins_locked)) { - echo 'Unable to parse plugins.lock'; - exit(1); - } - } - - /** - * Updates plugins.lock based on the contents of the current plugins manifest. - * - * This method works because $this->plugins_manifest is updated as Whippet carries out plugin installations, updates and deletions. - */ - private function update_plugins_lock() - { - if (!empty($this->plugins_locked)) { - $this->old_plugins_locked = $this->plugins_locked; - } - - $this->plugins_lock_file = "{$this->project_dir}/plugins.lock"; - - $this->plugins_locked = new \stdClass(); - - /** - * @psalm-suppress UndefinedThisPropertyFetch - */ - foreach (scandir($this->plugin_dir) as $dir) { - if ($dir[0] == '.') { - continue; - } - - if (!isset($this->plugins_manifest->$dir)) { - continue; - } - - $git = new \Dxw\Whippet\Git\Git("{$this->plugin_dir}/{$dir}"); - - if (!$commit = $git->current_commit()) { - echo "Unable to determine current commit; aborting\n"; - exit(1); - } - - $this->plugins_locked->$dir = new \stdClass(); - $this->plugins_locked->$dir->repository = $this->plugins_manifest->$dir->repository; - $this->plugins_locked->$dir->revision = $this->plugins_manifest->$dir->revision; - $this->plugins_locked->$dir->commit = $commit; - } - - return file_put_contents($this->plugins_lock_file, json_encode($this->plugins_locked, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES)); - } -}; diff --git a/src/Modules/Helpers/WhippetHelpers.php b/src/Modules/Helpers/WhippetHelpers.php deleted file mode 100644 index e27a14ef..00000000 --- a/src/Modules/Helpers/WhippetHelpers.php +++ /dev/null @@ -1,223 +0,0 @@ -valid()) { - throw new \Exception("Directory exists but is not empty: {$dir}"); - } - } - } - - public function whippet_init() - { - if (!$this->plugins_manifest_file = $this->find_file('plugins')) { - if (!$this->plugins_manifest_file = $this->find_file('Plugins')) { - if (!$this->plugins_manifest_file = $this->find_file('whippet.json')) { - echo "Unable to find whippet.json or plugins manifest file\n"; - exit(1); - } - } - } - $this->project_dir = dirname($this->plugins_manifest_file); - - $this->check_for_missing_whippet_files($this->project_dir); - - $this->plugins_lock_file = $this->find_file('plugins.lock'); - $this->plugin_dir = "{$this->project_dir}/wp-content/plugins"; - - $this->load_application_config(); - } - - public function load_application_config() - { - $application_config_file = "{$this->project_dir}/config/application.json"; - - if (file_exists($application_config_file)) { - $this->application_config = json_decode(file_get_contents($application_config_file)); - - if (!is_object($this->application_config)) { - echo 'Unable to parse application config'; - exit(1); - } - } else { - $this->application_config = json_decode(' - { - "wordpress": { - "repository": "git@github.com:dxw/wordpress-snapshot", - "revision": "master" - } - } - '); - - if (file_put_contents($application_config_file, json_encode($this->application_config, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES))) { - echo "A default application.json was created\n"; - } else { - echo "No config/application.json was found, and no default could be created. Quitting.\n"; - exit(1); - } - } - } - - public function find_file($file, $include_dir = false) - { - // Starting in the current dir, walk up until we find the file - $path = getcwd(); - - do { - $file_path = $path.'/'.$file; - - if (file_exists($file_path) && ($include_dir || is_file($file_path))) { - return $file_path; - } - - $path = dirname($path); - } while ($path !== '.' && $path !== '/'); // dirname returns . or / if you call it on /, depending on platform - - return false; - } - - // 77.079482% credit: - // gimmicklessgpt@gmail.com - // http://php.net/manual/en/function.copy.php - // Modified to copy symlinks - public function recurse_copy($src, $dst) - { - $dir = opendir($src); - if (!is_dir($dst) && !is_link($dst)) { - mkdir($dst); - } - while (false !== ($file = readdir($dir))) { - if (($file != '.') && ($file != '..')) { - if (is_link($src.'/'.$file)) { - symlink(readlink($src.'/'.$file), $dst.'/'.$file); - } elseif (is_dir($src.'/'.$file)) { - $this->recurse_copy($src.'/'.$file, $dst.'/'.$file); - } else { - copy($src.'/'.$file, $dst.'/'.$file); - } - } - } - closedir($dir); - } - - // 100% credit: - // The suckiness of PHP - public function recurse_rmdir($dir) - { - $dir_handle = opendir($dir); - while (false !== ($file = readdir($dir_handle))) { - if (($file != '.') && ($file != '..')) { - if (is_link($dir.'/'.$file)) { - unlink($dir.'/'.$file); - } elseif (is_dir($dir.'/'.$file)) { - $this->recurse_rmdir($dir.'/'.$file); - } else { - unlink($dir.'/'.$file); - } - } - } - rmdir($dir); - } - - public function recurse_rm($path) - { - if (!file_exists($path)) { - return; - } - - if (is_dir($path)) { - $this->recurse_rmdir($path); - } else { - unlink($path); - } - } - - private function check_for_missing_whippet_files($project_dir) - { - $whippet_files = [ - 'config/', - 'wp-content/', - 'wp-content/plugins/', - '.gitignore', - ]; - - $missing = []; - foreach ($whippet_files as $file) { - if (!file_exists("{$project_dir}/{$file}")) { - $missing[] = $file; - } - } - - if (count($missing) > 0) { - echo "The following files and directories are required but could not be found:\n"; - foreach ($missing as $file) { - echo " {$file}\n"; - } - exit(1); - } - } - - public function find_and_replace($dir, $find, $replaceWith) - { - $files = $this->recurse_file_search($dir); - foreach ($files as $filename) { - if (is_file($filename) && is_writable($filename)) { - $file = file_get_contents($filename); - file_put_contents($filename, str_replace($find, $replaceWith, $file)); - } - } - } - - public function recurse_file_search($dir) - { - $recursive_iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($dir)); - $files = []; - foreach ($recursive_iterator as $file) { - if ($file->isDir()) { - continue; - } - $files[] = $file->getPathname(); - } - return $files; - } - - public function download_url_to_file($url, $dest) - { - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - $data = curl_exec($ch); - curl_close($ch); - $file = fopen($dest, "w+"); - fputs($file, $data); - fclose($file); - } - - public function unzip_to_folder($zip_file, $dest) - { - $zip = new \ZipArchive(); - $res = $zip->open($zip_file); - if ($res === true) { - $zip->extractTo($dest); // directory to extract contents to - $zip->close(); - unlink($zip_file); - } else { - echo "Unzip failed \n, error code: " . $res; - } - } -}; diff --git a/src/Modules/Plugin.php b/src/Modules/Plugin.php deleted file mode 100644 index bf3df6d5..00000000 --- a/src/Modules/Plugin.php +++ /dev/null @@ -1,304 +0,0 @@ -command('install', 'Deploys the current set of plugins into your project'); - $this->command('upgrade [PLUGIN]', 'Upgrades PLUGIN to the most recent available version, or to the version specified in your Plugin file.'); - } - - private function deprecationNotice($internal) - { - if ($internal) { - $this->warningText([ - 'Notice: Using a deprecated `plugins` file.', - ]); - } else { - $this->warningText([ - 'The plugins subcommand is deprecated and will be removed in a future release.', - '', - 'Once you have a `whippet.json` file, you can run the following instead of `whippet plugins upgrade`:', - ' $ whippet deps update', - '', - 'And the following instead of `whippet plugins install`:', - ' $ whippet deps install', - '', - '', - ]); - } - } - - private function warningText($lines) - { - $c = new \Colors\Color(); - echo $c(implode("\n", $lines))->bg('red')->fg('white')."\n"; - } - - /* - * Commands - */ - - /* - * Adds new plugins that are missing, removes old plugins that have been removed, and - * checks that plugins are on the revision referred to in the Plugins file. - * - * This command will not change an installed commit unless the revision has changed. It - * just makes sure that what's in the project is what's in the file. - */ - public function install($internal = false) - { - $this->deprecationNotice($internal); - $this->whippet_init(); - $this->load_plugins_manifest(); - $this->load_plugins_lock(); - - if (count(get_object_vars($this->plugins_manifest)) == 0) { - echo "The plugin manifest file is empty\n"; - } - - // - // If there is no lock file: - // - // 1. Install everything from the manifest - // 2. Update the lockfile - // - - if (!$this->plugins_lock_file) { - foreach ($this->plugins_manifest as $dir => $plugin) { - $git = new \Dxw\Whippet\Git\Git("{$this->plugin_dir}/{$dir}"); - - // Is the repo there already? - if (!$git->is_repo()) { - echo "[Adding {$dir}] "; - // We don't have the repo. Clone it. - if (!$git->clone_repo($plugin->repository)) { - echo "Aborting...\n"; - die(); - } - } - - // Make sure repo is up to date. - echo "[Checking {$dir}] "; - if (!$git->checkout($plugin->revision)) { - echo "Aborting...\n"; - die(); - } - - $git->checkout($git->current_commit()); - if (!$git->submodule_update()) { - echo "Aborting...\n"; - die(); - } - } - } else { - - // - // If there is a lock file: - // - // 1. Compare the lockfile to the manifest. Delete any plugins that have been removed. - // 2. Check that the installed plugins are on the lockfile commit. Checkout the correct commit if not. - // 3. Compare the lockfile to the manifest. Clone any plugins that have been added. - // 4. Update the lockfile with the new list of commits. - - // - // 1. Compare the lockfile to the manifest. Delete any plugins that have been removed. - // - - // Make sure every entry in the lockfile also appears in the manifest - $plugins_to_delete = array_keys((array) $this->plugins_locked); - - foreach (array_keys($this->plugins_locked) as $lock_dir) { - foreach (array_keys($this->plugins_manifest) as $manifest_dir) { - if ($lock_dir == $manifest_dir) { - unset($plugins_to_delete[array_search($lock_dir, $plugins_to_delete)]); - } - } - } - - // Delete the ones that don't: - $gitignore = new \Dxw\Whippet\Git\Gitignore($this->project_dir); - $ignores = $gitignore->get_ignores(); - - foreach ($plugins_to_delete as $dir) { - echo "[Removing {$dir}]\n"; - $git = new \Dxw\Whippet\Git\Git("{$this->plugin_dir}/{$dir}"); - $git->delete_repo(); - - // remove from ignores: - $plugin_dir = "/wp-content/plugins/{$dir}\n"; - - if (($index = array_search($plugin_dir, $ignores)) !== false) { - unset($ignores[$index]); - } - - // Remove from the lockfile - unset($this->plugins_locked->$dir); - } - - $gitignore->save_ignores($ignores); - - // - // 2. Check that the installed plugins are on the lockfile commit. Checkout the correct commit if not. - // - - foreach ($this->plugins_locked as $dir => $plugin) { - $git = new \Dxw\Whippet\Git\Git("{$this->plugin_dir}/{$dir}"); - - if (!$git->is_repo()) { - // The repo has gone missing. Let's add it back. - echo "[Adding {$dir}] "; - $git->clone_repo($plugin->repository); - } - - if ($this->plugins_manifest->$dir->repository != $plugin->repository) { - // The remote has changed. Zap the plugin and add it again. - $git->delete_repo(); - - // The repo should be re-added below when we add new plugins - continue; - } - - // Check out a new revision, or if no new revision, check the existing one out again (in case of naughty changes) - if ($this->plugins_manifest->$dir->revision == $plugin->revision) { - echo "[Checking {$dir}] "; - $git->checkout($plugin->commit); - } else { - echo "[Updating {$dir}] "; - $git->checkout($this->plugins_manifest->$dir->revision); - } - - if (!$git->submodule_update()) { - echo "Aborting...\n"; - die(); - } - } - - // - // 3. Compare the lockfile to the manifest. Clone any plugins that have been added. - // - - // Make sure every entry in the lockfile also appears in the manifest - $plugins_to_clone = array_keys((array) $this->plugins_manifest); - - foreach ($this->plugins_manifest as $manifest_dir => $manifest_plugin) { - foreach ($this->plugins_locked as $lock_dir => $lock_plugin) { - if ($lock_dir == $manifest_dir && $manifest_plugin->repository == $lock_plugin->repository) { - unset($plugins_to_clone[array_search($manifest_dir, $plugins_to_clone)]); - } - } - } - - foreach ($plugins_to_clone as $dir) { - $plugin = $this->plugins_manifest->$dir; - - echo "[Adding {$dir}] "; - - $git = new \Dxw\Whippet\Git\Git("{$this->plugin_dir}/{$dir}"); - - // Is the repo there already? - if (!$git->is_repo()) { - // We don't have the repo. Clone it. - if (!$git->clone_repo($plugin->repository)) { - echo "Aborting...\n"; - die(); - } - } - - // Make sure repo is up to date. - if (!$git->checkout($plugin->revision)) { - echo "Aborting...\n"; - die(); - } - - if (!$git->submodule_update()) { - echo "Aborting...\n"; - die(); - } - } - } - - // - // Update the lockfile - // - - $this->update_plugins_lock(); - - // - // Make sure that Whippet-managed plugins are gitignored - // - $gitignore = new \Dxw\Whippet\Git\Gitignore($this->project_dir); - $ignores = $gitignore->get_ignores(); - - foreach (array_keys(get_object_vars($this->plugins_locked)) as $dir) { - $plugin_dir = "/wp-content/plugins/" . strval($dir) . "\n"; - - if (array_search($plugin_dir, $ignores) === false) { - $ignores[] = $plugin_dir; - } - } - - $gitignore->save_ignores($ignores); - - echo "Completed successfully\n"; - - return \Result\Result::ok(); - } - - /* - * Checks the named plugin against the remote to see if the remote is on - * a newer commit, and checks out the newer commit if so. - */ - public function upgrade($upgrade_plugin = '') - { - $this->deprecationNotice(true); - $this->whippet_init(); - $this->load_plugins_manifest(); - $this->load_plugins_lock(); - - // - // 1. Find the plugin we're going to update. - // 2. Check it out - // 3. Update the lockfile - // - - foreach ($this->plugins_manifest as $dir => $plugin) { - - // Upgrade the plugin if: - // - It is the plugin they asked for - // - They didn't specify a plugin, and this plugin is in the manifest. - if ($dir == $upgrade_plugin || ($upgrade_plugin == '' && isset($this->plugins_manifest->$dir))) { - $git = new \Dxw\Whippet\Git\Git("{$this->plugin_dir}/{$dir}"); - - // Find the specified revision. - echo "[Checking {$dir}] "; - $git->fetch(); - - // Check it out - if (!$git->checkout($git->remote_revision_commit($plugin->revision))) { - die(); - } - - if (!$git->submodule_update()) { - die(); - } - - // If we were upgrading a specific plugin, bail now - if ($upgrade_plugin != '') { - break; - } - } - } - - $this->update_plugins_lock(); - } -}; diff --git a/src/Modules/Release.php b/src/Modules/Release.php deleted file mode 100644 index 1b78c2aa..00000000 --- a/src/Modules/Release.php +++ /dev/null @@ -1,165 +0,0 @@ -whippet_init(); - $this->load_plugins_lock(); - - $git = new \Dxw\Whippet\Git\Git($this->project_dir); - - $this->number = $number; - $this->time = date('r'); - $this->deployed_commit = $git->current_commit(); - $this->release_dir = "{$releases_dir}/{$this->deployed_commit}"; - $this->public_dir = $public_dir; - } - - public function create(&$force, &$deploy_public) - { - // - // Does this commit have a release directory already? If so, do nothing - // - - if (!$force && file_exists($this->release_dir)) { - return false; - } - - // there's no point in forcing a non-existant release - if ($force && !file_exists($this->release_dir)) { - $force = false; - } - - // Got whippet.{json,lock} or plugins.lock? - if (is_file($this->project_dir.'/whippet.json') && is_file($this->project_dir.'/whippet.lock')) { - $factory = new \Dxw\Whippet\Factory(); - $installer = new \Dxw\Whippet\Dependencies\Installer( - $factory, - new \Dxw\Whippet\ProjectDirectory($this->project_dir), - new \Dxw\Whippet\Services\NullInspectionChecker() - ); - } elseif ($this->plugins_lock_file && file_exists($this->plugins_lock_file)) { - $installer = new Plugin(); - } else { - echo "Couldn't find plugins.lock in the project directory. (Did you run whippet plugins install?)\n"; - die(1); - } - - // - // If we're here, we must deploy - // - - // 1. Clone WP - // 2. Delete wp-content etc - // 3. Make sure wp-content is up to date - // 4. Copy our wp-content, omitting gitfoo - // 5. ?? Theme/plugin build steps ?? (Makefile-esque thing?) - // 6. Symlink required files from shared dir - - // Assuming we're not forcing, create a new directory for this release, or use only an empty existing dir - if (!$force) { - $this->check_and_create_dir($this->release_dir, true); - } else { - $this->release_dir = dirname($this->release_dir).'/forced_release_tmp_'.sha1(microtime()); - } - - // Clone WP and remove things we don't want - $wp = new \Dxw\Whippet\Git\Git($this->release_dir); - $wp->clone_repo($this->application_config->wordpress->repository); - $wp->checkout($this->application_config->wordpress->revision); - - foreach (['wp-content', '.git'] as $delete) { - if (is_dir("{$this->release_dir}/$delete")) { - $this->recurse_rmdir("{$this->release_dir}/$delete"); - } else { - unlink("{$this->release_dir}/$delete"); - } - } - - // Make sure wp-content is up to date - $result = $installer->installAll(); - if ($result->isErr()) { - echo sprintf("ERROR: %s\n", $result->getErr()); - exit(1); - } - - // Copy over wp-content - $this->recurse_copy("{$this->project_dir}/wp-content", "{$this->release_dir}/wp-content"); - - if (file_exists("{$this->release_dir}/wp-content/uploads")) { - $this->recurse_rm("{$this->release_dir}/wp-content/uploads"); - } - - // - // Remove unwanted git/test foo - // - - $plugins = scandir("{$this->release_dir}/wp-content/plugins"); - foreach ($plugins as $dir) { - $path = "{$this->release_dir}/wp-content/plugins/{$dir}"; - if ($dir === '.' || $dir === '..' || !is_dir($path)) { - continue; - } - - // Remove git files from all plugins - - foreach (['.git', '.gitmodules', '.gitignore'] as $delete) { - $this->recurse_rm("{$this->release_dir}/wp-content/plugins/$dir/{$delete}"); - } - - // Remove test files from whippet plugins - - if ($this->is_whippet_plugin($path)) { - foreach (['tests', 'Makefile', '.drone.yml'] as $delete) { - $this->recurse_rm("{$this->release_dir}/wp-content/plugins/$dir/{$delete}"); - } - } - } - - // - // Deploy public assets or copy them into the app directory - // - if (is_dir("{$this->project_dir}/public")) { - $public_dest = $deploy_public ? $this->public_dir : $this->release_dir; - $this->recurse_copy("{$this->project_dir}/public", "{$public_dest}"); - } - - // - // TODO: theme and plugin build steps - // - - // Symlinkery - symlink(realpath("{$this->release_dir}/../../shared/wp-config.php"), "{$this->release_dir}/wp-config.php"); - symlink(realpath("{$this->release_dir}/../../shared/uploads"), "{$this->release_dir}/wp-content/uploads"); - - // FIN - } - - public function is_whippet_plugin($path) - { - $files = glob($path.'/*.php'); - foreach ($files as $file) { - if (is_file($file)) { - //TODO: This is probably okay in most cases but if we come across a 1GB .php file PHP might run out of memory - $f = file_get_contents($file); - if (strpos($f, 'Whippet: yes') !== false) { - return true; - } - } - } - - return false; - } -}; diff --git a/src/Modules/Theme.php b/src/Modules/Theme.php deleted file mode 100644 index e7ceecc0..00000000 --- a/src/Modules/Theme.php +++ /dev/null @@ -1,56 +0,0 @@ -command('grunt *arguments', 'Runs the specified grunt command in the context of your theme');/*, function($option_parser) { - $option_parser->addRule('t|theme::', "Specify theme. Default: the theme directory you're in"); - });*/ - } - - /* - * Commands - */ - - /* - * Runs the specified Grunt commands with the necessary arguments to make everything work with NPM and grunt in /vendor - */ - public function grunt($args) - { - $grunt_commands = $args; - - // Look for the theme base - if (!isset($this->options->theme)) { - if (!$vendor = $this->find_file('vendor', true)) { - echo "Unable to find the theme's vendor directory\n"; - exit(1); - } - - if (!isset($this->options)) { - $this->options = new \stdClass(); - } - - $this->options->theme = dirname($vendor); - } else { - if (!file_exists($this->options->theme)) { - echo "Specified theme directory not found\n"; - exit(1); - } - } - - // Sanity checks on contents of vendor - if (!file_exists("{$this->options->theme}/vendor/Gruntfile.js") || !file_exists("{$this->options->theme}/vendor/package.json")) { - echo "Found a theme at {$this->options->theme}, but its vendor directory doesn't look valid (no package.json or Gruntfile.js)\n"; - exit(1); - } - - $this->options->theme = realpath($this->options->theme); - - system("grunt --base {$this->options->theme}/vendor --gruntfile {$this->options->theme}/vendor/Gruntfile.js {$grunt_commands}\n"); - } -}; diff --git a/src/ProjectDirectory.php b/src/ProjectDirectory.php deleted file mode 100644 index d49885ab..00000000 --- a/src/ProjectDirectory.php +++ /dev/null @@ -1,33 +0,0 @@ -path = $path; - } - - #[\ReturnTypeWillChange] - public function __toString() - { - return $this->path; - } -} diff --git a/src/Services/BaseApi.php b/src/Services/BaseApi.php deleted file mode 100644 index 0f715223..00000000 --- a/src/Services/BaseApi.php +++ /dev/null @@ -1,29 +0,0 @@ -client = new \GuzzleHttp\Client([ - 'headers' => [ 'User-Agent' => 'Whippet https://github.com/dxw/whippet/' ] - ]); - } - - public function get($url) - { - try { - $response = $this->client->get($url); - } catch (\GuzzleHttp\Exception\ConnectException $e) { - return \Result\Result::err('Failed to connect to '.$url); - } catch (\GuzzleHttp\Exception\RequestException $e) { - return \Result\Result::err('Failed to receive data from '.$url); - } - - return \Result\Result::ok($response->getBody()); - } -} diff --git a/src/Services/InspectionChecker.php b/src/Services/InspectionChecker.php deleted file mode 100644 index cb8f0952..00000000 --- a/src/Services/InspectionChecker.php +++ /dev/null @@ -1,67 +0,0 @@ -inspectionsApi = $inspections_api; - } - - public function check($type, $dependency) - { - switch ($type) { - case 'themes': - return \Result\Result::ok(''); - case 'plugins': - return $this->checkPlugin($dependency); - default: - return \Result\Result::err("Unknown type '".$type."'"); - } - } - - private function checkPlugin($dependency) - { - $result = $this->inspectionsApi->getInspections($dependency['name']); - - if ($result->isErr()) { - return \Result\Result::err("Error fetching plugin inspections from API: '".$result->getErr()."'"); - } - - $inspections = $result->unwrap(); - if (empty($inspections)) { - $warning_msg = <<<'EOT' -############################################# -# # -# WARNING: No inspections for this plugin # -# # -############################################# -EOT; - return \Result\Result::ok($warning_msg); - } else { - return \Result\Result::ok($this->inspectionsMessage($inspections)); - } - } - - private function inspectionsMessage($inspections) - { - $lines = []; - $lines[] = "Inspections for this plugin:"; - foreach ($inspections as $inspection) { - $lines[] = $this->formatInspection($inspection); - } - return implode("\n", $lines); - } - - private function formatInspection($inspection) - { - $date = date_format($inspection->date, 'd/m/Y'); - return sprintf("* %s - %s - %s - %s", $date, $inspection->versions, $inspection->result, $inspection->url); - } -} diff --git a/src/Services/InspectionsApi.php b/src/Services/InspectionsApi.php deleted file mode 100644 index fd62a252..00000000 --- a/src/Services/InspectionsApi.php +++ /dev/null @@ -1,87 +0,0 @@ -host = $host; - $this->path = $path; - $this->jsonApi = $json_api; - } - - public function getInspections($plugin_slug) - { - $result = $this->jsonApi->get($this->url($plugin_slug)); - if ($result->isErr()) { - return $result; - } - $inspections_data = $result->unwrap(); - if (!$this->validateInspections($inspections_data)) { - return \Result\Result::err("Couldn't extract inspections from JSON response"); - } - $inspections = $this->buildInspections($inspections_data); - return \Result\Result::ok($inspections); - } - - private function buildInspections($raw_inspections) - { - return array_map(function ($raw_inspection) { - return new Inspection( - $raw_inspection['date'], - $raw_inspection['versions'], - $raw_inspection['result'], - $raw_inspection['url'] - ); - }, $raw_inspections); - } - - private function validateInspections($raw_inspections) - { - if (!is_array($raw_inspections)) { - return false; - } - - foreach ($raw_inspections as $raw_inspection) { - if (!$this->validateInspection($raw_inspection)) { - return false; - } - } - - return true; - } - - private function validateInspection($raw_inspection) - { - $keys = [ - 'date', - 'versions', - 'result', - 'url', - ]; - - foreach ($keys as $key) { - if (!array_key_exists($key, $raw_inspection)) { - return false; - } - } - return true; - } - - private function url($plugin_slug) - { - return $this->host.$this->path.$plugin_slug; - } -} diff --git a/src/Services/JsonApi.php b/src/Services/JsonApi.php deleted file mode 100644 index 3893e007..00000000 --- a/src/Services/JsonApi.php +++ /dev/null @@ -1,33 +0,0 @@ -baseApi = $base_api; - } - - public function get($url) - { - $response = $this->baseApi->get($url); - - if ($response->isErr()) { - return $response; - } - - $response_as_array = json_decode($response->unwrap(), true); - if (is_null($response_as_array)) { - return \Result\Result::err('Failed to parse response body as JSON when requesting '.$url); - } - return \Result\Result::ok($response_as_array); - } -} diff --git a/src/Services/NullInspectionChecker.php b/src/Services/NullInspectionChecker.php deleted file mode 100644 index 74728a29..00000000 --- a/src/Services/NullInspectionChecker.php +++ /dev/null @@ -1,12 +0,0 @@ -command('plugins PLUGIN_COMMAND', ''); - $this->command('theme THEME_COMMAND', ''); - - $this->command('deploy DIR', "Generates a working WordPress installation in DIR, based on the current contents of your app's repository", function ($option_parser) { - $option_parser->addRule('f|force', 'Force Whippet to deploy, even if a release already exists for this commit'); - $option_parser->addRule('k|keep::', 'Tells Whippet how many old release directories to keep. Default: 3'); - $option_parser->addRule('p|public::', 'Deploy public/ in a given directory, adjacent to the app'); - }); - - $this->command('generate [THING]', 'Generates a thing', function ($option_parser) { - $option_parser->addRule('l|list', 'Lists available generators'); - $option_parser->addRule('d|directory::', "Override the generator's default creation directory with this one"); - $option_parser->addRule('n|nogitignore', 'When generating a theme, do not generate the accompanying .gitignore file'); - $option_parser->addRule('r|repository::', 'When generating an app, override the default application.json WordPress repository with this one'); - }); - - $this->command('init [PATH]', 'Creates a new Whippet application at PATH. NB: this is a shortcut for whippet generate -d PATH whippet.', function ($option_parser) { - $option_parser->addRule('r|repository::', 'Override the default application.json WordPress repository with this one'); - }); - $this->command('dependencies SUBCOMMAND', 'Manage dependencies (themes, plugins)'); - $this->command('deps SUBCOMMAND', 'Alias for dependencies'); - } - - public function plugins() - { - (new Modules\Plugin())->start(array_slice($this->argv, 1)); - } - - public function theme() - { - (new Modules\Theme())->start(array_slice($this->argv, 1)); - } - - public function deploy($dir) - { - if (!isset($this->options->keep)) { - $this->options->keep = 3; - } - - if (!isset($this->options->public)) { - $this->options->public = ""; - } - - (new Modules\Deploy($dir))->deploy( - isset($this->options->force), - $this->options->keep, - $this->options->public - ); - } - - public function init($path = false) - { - if ($path) { - $this->options->directory = $path; - } - - (new Modules\Generate())->start('app', $this->options); - } - - public function generate($thing = false) - { - (new Modules\Generate())->start($thing, $this->options); - } - - public function dependencies() - { - (new Modules\Dependencies())->start(array_slice($this->argv, 1)); - } - - public function deps() - { - $this->dependencies(); - } -}; diff --git a/src/WhippetGenerator.php b/src/WhippetGenerator.php deleted file mode 100644 index 4c84836d..00000000 --- a/src/WhippetGenerator.php +++ /dev/null @@ -1,21 +0,0 @@ -factoryNewInstance = []; - $this->factoryCallStatic = []; - } - - private function getWhippetLock(/* string */ $hash, array $dependencyMap) - { - $whippetLock = $this->getMockBuilder('\\Dxw\\Whippet\\Files\\WhippetLock') - ->disableOriginalConstructor() - ->getMock(); - - $whippetLock->method('getHash') - ->willReturn($hash); - - $map = []; - foreach ($dependencyMap as $dependencyType => $return) { - $map[] = [$dependencyType, $return]; - } - - $whippetLock->method('getDependencies') - ->will($this->returnValueMap($map)); - - return $whippetLock; - } - - private function getArchivedWarning() - { - $warning = <<<'EOT' -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! WARNING: GitHub repo is archived. This dependency !! -!! should be replaced before the repo is removed. !! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - -EOT; - return $warning; - } - - private function getGit($isRepo, $cloneRepo, $checkout, $isArchived = false) - { - $archived_warning = $this->getArchivedWarning(); - - $git = $this->getMockBuilder('\\Dxw\\Whippet\\Git\\Git') - ->disableOriginalConstructor() - ->getMock(); - - $git->method('is_repo') - ->willReturn($isRepo); - - if ($cloneRepo !== null) { - $return = true; - $output = "git clone output\n"; - - if ($isArchived) { - $output = $archived_warning . $output; - } - - if (is_array($cloneRepo)) { - $return = $cloneRepo['return']; - $cloneRepo = $cloneRepo['with']; - } - - $git->expects($this->exactly(1)) - ->method('clone_repo') - ->with($cloneRepo) - ->will($this->returnCallback(function () use ($output, $return) { - echo $output; - - return $return; - })); - } - - if ($checkout !== null) { - $return = true; - $output = "git checkout output\n"; - - if ($isArchived) { - $output = $archived_warning . $output; - } - - if (is_array($checkout)) { - $return = $checkout['return']; - $checkout = $checkout['with']; - } - - $git->expects($this->exactly(1)) - ->method('checkout') - ->with($checkout) - ->will($this->returnCallback(function () use ($output, $return) { - echo $output; - - return $return; - })); - } - - return $git; - } - - private function getWhippetJson(array $data) - { - return new \Dxw\Whippet\Files\WhippetJson($data); - } - - private function getFactory() - { - $factory = $this->getMockBuilder('\\Dxw\\Whippet\\Factory') - ->disableOriginalConstructor() - ->getMock(); - - $factory->method('newInstance') - ->will($this->returnValueMap($this->factoryNewInstance)); - - $factory->method('callStatic') - ->will($this->returnValueMap($this->factoryCallStatic)); - - return $factory; - } - - private function addFactoryNewInstance() - { - $this->factoryNewInstance[] = func_get_args(); - } - - private function addFactoryCallStatic() - { - $this->factoryCallStatic[] = func_get_args(); - } - - private function getProjectDirectory($dir) - { - return new \Dxw\Whippet\ProjectDirectory($dir); - } - - private function getDir() - { - $root = \org\bovigo\vfs\vfsStream::setup(); - - return $root->url(); - } -} diff --git a/tests/dependencies/installer_test.php b/tests/dependencies/installer_test.php deleted file mode 100644 index 0009ccf0..00000000 --- a/tests/dependencies/installer_test.php +++ /dev/null @@ -1,678 +0,0 @@ -getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $my_theme = [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ]; - - $my_plugin = [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ]; - - $another_plugin = [ - 'name' => 'another-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/another-plugin', - 'revision' => '789abc', - ]; - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - $my_theme, - ], - 'plugins' => [ - $my_plugin, - $another_plugin, - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyTheme = $this->getGit(false, 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $gitMyTheme); - $gitMyPlugin = $this->getGit(false, 'git@github.com:dxw-wordpress-plugins/my-plugin', '123456'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/plugins/my-plugin', $gitMyPlugin); - $gitAnotherPlugin = $this->getGit(false, 'git@github.com:dxw-wordpress-plugins/another-plugin', '789abc'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/plugins/another-plugin', $gitAnotherPlugin); - - $inspection_check_results = function ($type, $dep) { - $warning_msg = <<<'EOT' -############################################# -# # -# WARNING: No inspections for this plugin # -# # -############################################# -EOT; - - return [ - 'themes' => [ - 'my-theme' => \Result\Result::ok('') - ], - 'plugins' => [ - 'my-plugin' => \Result\Result::ok($warning_msg), - 'another-plugin' => \Result\Result::ok("Inspections for this plugin:\n* 01/05/2015 - 0.1.3 - No issues found - https://advisories.dxw.com/plugins/another_plugin/") - ] - ][$type][$dep['name']]; - }; - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionCheckerWithResults($inspection_check_results) - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $expectedOutput = <<<'EOT' -[Adding themes/my-theme] -git clone output -git checkout output - -[Adding plugins/my-plugin] -git clone output -git checkout output -############################################# -# # -# WARNING: No inspections for this plugin # -# # -############################################# - -[Adding plugins/another-plugin] -git clone output -git checkout output -Inspections for this plugin: -* 01/05/2015 - 0.1.3 - No issues found - https://advisories.dxw.com/plugins/another_plugin/ - - -EOT; - $this->assertEquals($expectedOutput, $output); - } - - public function testInspectionsApiUnavailable() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $my_plugin = [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ]; - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [], - 'plugins' => [ - $my_plugin, - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyPlugin = $this->getGit(false, 'git@github.com:dxw-wordpress-plugins/my-plugin', '123456'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/plugins/my-plugin', $gitMyPlugin); - - $inspection_check_results = function ($type, $dep) { - return [ - 'plugins' => [ - 'my-plugin' => \Result\Result::err('foooooo'), - ] - ][$type][$dep['name']]; - }; - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionCheckerWithResults($inspection_check_results) - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $expectedOutput = <<<'EOT' -[Adding plugins/my-plugin] -git clone output -git checkout output -[ERROR] foooooo - - -EOT; - - $this->assertEquals($expectedOutput, $output); - } - - public function testInstallArchiveRepo() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $my_theme = [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ]; - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - $my_theme, - ], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyTheme = $this->getGit(false, 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906', true); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $gitMyTheme); - - $inspection_check_results = function ($type, $dep) { - return [ - 'themes' => [ - 'my-theme' => \Result\Result::ok('') - ], - ][$type][$dep['name']]; - }; - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionCheckerWithResults($inspection_check_results) - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $expectedOutput = <<<'EOT' -[Adding themes/my-theme] -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! WARNING: GitHub repo is archived. This dependency !! -!! should be replaced before the repo is removed. !! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -git clone output -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! WARNING: GitHub repo is archived. This dependency !! -!! should be replaced before the repo is removed. !! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -git checkout output - - -EOT; - $this->assertEquals($expectedOutput, $output); - } - - public function testInstallAllThemeAlreadyCloned() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - mkdir($dir.'/wp-content/themes/my-theme'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $git = $this->getGit(true, null, '27ba906'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $git); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Checking themes/my-theme]\ngit checkout output\n\n", $output); - } - - public function testInstallAllMissingWhippetJson() - { - $dir = $this->getDir(); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertEquals(true, $result->isErr()); - $this->assertEquals('whippet.json not found', $result->getErr()); - $this->assertEquals('', $output); - } - - public function testInstallAllMissingWhippetLock() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::err('file not found')); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertEquals(true, $result->isErr()); - $this->assertEquals('whippet.lock: file not found', $result->getErr()); - $this->assertEquals('', $output); - } - - public function testInstallAllWrongHash() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock('123123', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertEquals(true, $result->isErr()); - $this->assertEquals('mismatched hash - run `whippet dependencies update` first', $result->getErr()); - $this->assertEquals('', $output); - } - - public function testInstallAllCloneFails() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyTheme = $this->getGit(false, ['with' => 'git@github.com:dxw-wordpress-themes/my-theme', 'return' => false], null); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $gitMyTheme); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('could not clone repository', $result->getErr()); - $this->assertEquals("[Adding themes/my-theme]\ngit clone output\n", $output); - } - - public function testInstallAllCheckoutFails() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyTheme = $this->getGit(false, 'git@github.com:dxw-wordpress-themes/my-theme', ['with' => '27ba906', 'return' => false]); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $gitMyTheme); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('could not checkout revision', $result->getErr()); - $this->assertEquals("[Adding themes/my-theme]\ngit clone output\ngit checkout output\n", $output); - } - - public function testInstallAllBlankLockfile() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("whippet.lock contains nothing to install\n", $output); - } - - public function testInstallSingle() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ], - [ - 'name' => 'another-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/another-plugin', - 'revision' => '789abc', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyPlugin = $this->getGit(true, null, '123456'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/plugins/my-plugin', $gitMyPlugin); - - $inspection_check_results = function ($type, $dep) { - return [ - 'plugins' => [ - 'my-plugin' => \Result\Result::ok("Inspections for this plugin:\n* 01/05/2015 - No issues found - https://advisories.dxw.com/plugins/my-plugin/") - ] - ][$type][$dep['name']]; - }; - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionCheckerWithResults($inspection_check_results) - ); - ob_start(); - $result = $dependencies->installSingle('plugins/my-plugin'); - $output = ob_get_clean(); - - $expectedOutput = <<<'EOT' -[Checking plugins/my-plugin] -git checkout output -Inspections for this plugin: -* 01/05/2015 - No issues found - https://advisories.dxw.com/plugins/my-plugin/ - - -EOT; - $this->assertEquals($expectedOutput, $output); - $this->assertFalse($result->isErr()); - } - - public function testInstallSingleAlreadyCloned() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ], - [ - 'name' => 'another-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/another-plugin', - 'revision' => '789abc', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyPlugin = $this->getGit(false, 'git@github.com:dxw-wordpress-plugins/my-plugin', '123456'); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/plugins/my-plugin', $gitMyPlugin); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - ob_start(); - $result = $dependencies->installSingle('plugins/my-plugin'); - $output = ob_get_clean(); - - $this->assertEquals("[Adding plugins/my-plugin]\ngit clone output\ngit checkout output\n\n", $output); - $this->assertFalse($result->isErr()); - } - - public function testInstallSingleAlreadyClonedAndArchived() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ], - [ - 'name' => 'another-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/another-plugin', - 'revision' => '789abc', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyPlugin = $this->getGit(false, 'git@github.com:dxw-wordpress-plugins/my-plugin', '123456', true); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/plugins/my-plugin', $gitMyPlugin); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - ob_start(); - $result = $dependencies->installSingle('plugins/my-plugin'); - $output = ob_get_clean(); - $expectedOutput = <<<'EOT' -[Adding plugins/my-plugin] -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! WARNING: GitHub repo is archived. This dependency !! -!! should be replaced before the repo is removed. !! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -git clone output -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! WARNING: GitHub repo is archived. This dependency !! -!! should be replaced before the repo is removed. !! -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -git checkout output - - -EOT; - - - $this->assertEquals($expectedOutput, $output); - $this->assertFalse($result->isErr()); - } - - public function testInstallSingleCloneFails() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyTheme = $this->getGit(false, ['with' => 'git@github.com:dxw-wordpress-themes/my-theme', 'return' => false], null); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $gitMyTheme); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('could not clone repository', $result->getErr()); - $this->assertEquals("[Adding themes/my-theme]\ngit clone output\n", $output); - } - - public function testInstallSingleCheckoutFails() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - file_put_contents($dir.'/whippet.lock', 'foobar'); - - $whippetLock = $this->getWhippetLock(sha1('foobar'), [ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - 'plugins' => [], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $gitMyTheme = $this->getGit(false, 'git@github.com:dxw-wordpress-themes/my-theme', ['with' => '27ba906', 'return' => false]); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Git', $dir.'/wp-content/themes/my-theme', $gitMyTheme); - - $dependencies = new \Dxw\Whippet\Dependencies\Installer( - $this->getFactory(), - $this->getProjectDirectory($dir), - $this->fakeInspectionChecker() - ); - - ob_start(); - $result = $dependencies->installSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('could not checkout revision', $result->getErr()); - $this->assertEquals("[Adding themes/my-theme]\ngit clone output\ngit checkout output\n", $output); - } - - private function fakeInspectionChecker() - { - return \Mockery::mock('\\Dxw\\Whippet\\Services\\InspectionChecker') - ->shouldReceive('check') - ->andReturn(\Result\Result::ok('')) - ->getMock(); - } - - private function fakeInspectionCheckerWithResults($result_function) - { - return \Mockery::mock('\\Dxw\\Whippet\\Services\\InspectionChecker') - ->shouldReceive('check') - ->andReturnUsing($result_function) - ->getMock(); - } -} diff --git a/tests/dependencies/updater_test.php b/tests/dependencies/updater_test.php deleted file mode 100644 index 0278eb0e..00000000 --- a/tests/dependencies/updater_test.php +++ /dev/null @@ -1,1158 +0,0 @@ -getMockBuilder('\\Dxw\\Whippet\\Git\\Gitignore') - ->disableOriginalConstructor() - ->getMock(); - - $getIgnores = $gitignore->method('get_ignores'); - if ($warnOnGet) { - $getIgnores->will($this->returnCallback(function () { - trigger_error('$warOnGet set but not prevented', E_USER_WARNING); - })); - } else { - $getIgnores->willReturn($get); - } - - $gitignore->expects($this->exactly($saveIgnores ? 1 : 0)) - ->method('save_ignores') - ->with($save); - - return $gitignore; - } - - private function getWhippetLockWritable(array $addDependency, /* string */ $hash, /* string */ $path, array $getDependencies, /* boolean */ $setHash = true) - { - $whippetLock = $this->getMockBuilder('\\Dxw\\Whippet\\Files\\WhippetLock') - ->disableOriginalConstructor() - ->getMock(); - - call_user_func_array( - [ - $whippetLock->expects($this->exactly(count($addDependency))) - ->method('addDependency'), - 'withConsecutive', - ], - $addDependency - ); - - $whippetLock->expects($this->exactly($setHash === true ? 1 : 0)) - ->method('setHash') - ->with($hash); - - $whippetLock->expects($this->exactly($path === null ? 0 : 1)) - ->method('saveToPath') - ->with($path); - - if ($getDependencies === []) { - $getDependencies = [ - ['themes', []], - ['plugins', []], - ]; - } - - $whippetLock->method('getDependencies') - ->will($this->returnValueMap($getDependencies)); - - return $whippetLock; - } - - public function testUpdateAll() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ['plugins', 'my-plugin', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'd961c3d'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n[Updating plugins/my-plugin]\n", $output); - } - - public function testUpdateAllWithExistingGitignore() - { - $dir = $this->getDir(); - touch($dir.'/.gitignore'); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - ], [ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllWithExistingGitignoreNoDuplication() - { - $dir = $this->getDir(); - touch($dir.'/.gitignore'); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - "/wp-content/themes/my-theme\n", - ], [ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllFailedGitCommand() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - ], false, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([], sha1('foobar'), null, []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::err('oh no')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('git command failed: oh no', $result->getErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllWithExplicitSrc() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - 'src' => 'foobar', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'foobar', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'foobar', 'v1.4', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllWithoutRef() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'main', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllWithoutRefUsingMaster() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'main', \Result\Result::err('no such branch')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'master', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllBlankJsonfile() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("whippet.json contains no dependencies\n", $output); - } - - public function testUpdateAllNoGitignore() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], true, true); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ['plugins', 'my-plugin', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'd961c3d'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n[Updating plugins/my-plugin]\n", $output); - } - - public function testUpdateAllRemoveFromGitignore() - { - $dir = $this->getDir(); - touch($dir.'/.gitignore'); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/unmanaged-plugin\n", - "/wp-content/plugins/removed-plugin\n", - ], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/unmanaged-plugin\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', [ - ['themes', []], - ['plugins', [ - ['name' => 'removed-plugin'], - ]], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateAllBubbleErrors() - { - $dir = $this->getDir(); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::err('a WhippetJson error')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('whippet.json: a WhippetJson error', $result->getErr()); - $this->assertEquals('', $output); - } - - public function testUpdateAllNoExistingWhippetLock() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ['plugins', 'my-plugin', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'd961c3d'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Files\\WhippetLock', [], $whippetLock); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::err('file not found')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n[Updating plugins/my-plugin]\n", $output); - } - - public function testUpdateAllWithBrokenJson() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], false, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([], sha1('foobar'), null, []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateAll(); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('missing sources', $result->getErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleWithNoLock() - { - $dir = $this->getDir(); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::err('file not found')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('twitget'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals("No whippet.lock file exists, you need to run `whippet deps update` to generate one before you can update a specific dependency. \n", $output); - $this->assertEquals('whippet.lock: file not found', $result->getErr()); - } - - public function testUpdateSingleIncorrectFormat() - { - $dir = $this->getDir(); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $whippetLock = []; - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('twitget'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals("Dependency should be in format [type]/[name]. \n", $output); - $this->assertEquals('Incorrect dependency format', $result->getErr()); - } - - public function testUpdateSingleNoMatch() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - - $whippetLock = $this->getWhippetLockWritable([], sha1('foobar'), null, [], false); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('plugins/twitget'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('No matching dependency in whippet.json', $result->getErr()); - } - - public function testUpdateSingleBrokenJson() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], false, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([], sha1('foobar'), null, []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('missing sources', $result->getErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleWithExistingGitignore() - { - $dir = $this->getDir(); - touch($dir.'/.gitignore'); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - ], [ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleWithExistingGitignoreNoDuplication() - { - $dir = $this->getDir(); - touch($dir.'/.gitignore'); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - "/wp-content/themes/my-theme\n", - ], [ - "/wp-content/languages\n", - "/node_modules\n", - "/vendor\n", - "/wp-content/themes/my-theme\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleFailedGitCommand() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'twitget', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - ], false, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([], sha1('foobar'), null, []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::err('oh no')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertTrue($result->isErr()); - $this->assertEquals('git command failed: oh no', $result->getErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleWithExplicitSrc() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - 'src' => 'foobar', - ], - ], - 'plugins' => [ - [ - 'name' => 'twitget', - 'ref' => 'v1.4', - 'src' => 'foobar', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/twitget\n" - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'foobar', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'foobar', 'v1.4', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleWithoutRef() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'main', \Result\Result::ok('27ba906')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - public function testUpdateSingleNoGitignore() - { - $dir = $this->getDir(); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'themes' => 'git@github.com:dxw-wordpress-themes/', - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - file_put_contents($dir.'/whippet.json', 'foobar'); - - $gitignore = $this->getGitignore([], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], true, true); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $whippetLock = $this->getWhippetLockWritable([ - ['themes', 'my-theme', 'git@github.com:dxw-wordpress-themes/my-theme', '27ba906'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-themes/my-theme', 'v1.4', \Result\Result::ok('27ba906')); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('themes/my-theme'); - $output = ob_get_clean(); - - $this->assertFalse($result->isErr()); - $this->assertEquals("[Updating themes/my-theme]\n", $output); - } - - - public function testUpdateSingle() - { - $dir = $this->getDir(); - file_put_contents($dir.'/whippet.json', 'foobar'); - - $whippetJson = $this->getWhippetJson([ - 'src' => [ - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - 'themes' => [ - [ - 'name' => 'my-theme', - 'ref' => 'v1.4', - ], - ], - 'plugins' => [ - [ - 'name' => 'my-plugin', - 'ref' => 'v1.6', - ], - ], - ]); - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetJson', 'fromFile', $dir.'/whippet.json', \Result\Result::ok($whippetJson)); - - $whippetLock = $this->getWhippetLockWritable([ - ['plugins', 'my-plugin', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'd961c3d'], - ], sha1('foobar'), $dir.'/whippet.lock', []); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Files\\WhippetLock', 'fromFile', $dir.'/whippet.lock', \Result\Result::ok($whippetLock)); - - $this->addFactoryCallStatic('\\Dxw\\Whippet\\Git\\Git', 'ls_remote', 'git@github.com:dxw-wordpress-plugins/my-plugin', 'v1.6', \Result\Result::ok('d961c3d')); - - $gitignore = $this->getGitignore(["/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", ], [ - "/wp-content/themes/my-theme\n", - "/wp-content/plugins/my-plugin\n", - ], true, false); - $this->addFactoryNewInstance('\\Dxw\\Whippet\\Git\\Gitignore', $dir, $gitignore); - - $dependencies = new \Dxw\Whippet\Dependencies\Updater( - $this->getFactory(), - $this->getProjectDirectory($dir) - ); - - ob_start(); - $result = $dependencies->updateSingle('plugins/my-plugin'); - $output = ob_get_clean(); - - $this->assertEquals("[Updating plugins/my-plugin]\n", $output); - $this->assertFalse($result->isErr()); - } -} diff --git a/tests/files/whippet_json_test.php b/tests/files/whippet_json_test.php deleted file mode 100644 index 8c2f0ffe..00000000 --- a/tests/files/whippet_json_test.php +++ /dev/null @@ -1,67 +0,0 @@ - [ - ['name' => 'advanced-custom-fields'], - ], - ]); - - $this->assertEquals([ - ['name' => 'advanced-custom-fields'], - ], $whippetJson->getDependencies('plugins')); - } - - public function testGetDependenciesBlank() - { - $whippetJson = new \Dxw\Whippet\Files\WhippetJson([]); - - $this->assertEquals([], $whippetJson->getDependencies('plugins')); - } - - public function testGetSources() - { - $whippetJson = new \Dxw\Whippet\Files\WhippetJson([ - 'src' => [ - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], - ]); - - $this->assertEquals([ - 'plugins' => 'git@github.com:dxw-wordpress-plugins/', - ], $whippetJson->getSources()); - } - - public function testGetDependencyNoMatch() - { - $whippetJson = new \Dxw\Whippet\Files\WhippetJson([ - 'plugins' => [ - [ - 'name' => 'advanced-custom-fields', - 'ref' => 'foobar', - ], - ], - ]); - - $this->assertEquals([], $whippetJson->getDependency('plugins', 'twitget')); - } - - public function testGetDependency() - { - $whippetJson = new \Dxw\Whippet\Files\WhippetJson([ - 'plugins' => [ - [ - 'name' => 'twitget', - 'ref' => 'foobar', - ], - ], - ]); - - $this->assertEquals(['name' => 'twitget', 'ref' => 'foobar'], $whippetJson->getDependency('plugins', 'twitget')); - } -} diff --git a/tests/files/whippet_lock_test.php b/tests/files/whippet_lock_test.php deleted file mode 100644 index d33a8db1..00000000 --- a/tests/files/whippet_lock_test.php +++ /dev/null @@ -1,203 +0,0 @@ - [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - ]); - - $this->assertEquals([ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], $whippetLock->getDependencies('themes')); - } - - public function testFromStringGetDependencies() - { - $whippetLock = \Dxw\Whippet\Files\WhippetLock::fromString(json_encode([ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - ])); - - $this->assertFalse($whippetLock->isErr()); - $this->assertEquals([ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], $whippetLock->unwrap()->getDependencies('themes')); - } - - public function testFromFileGetDependencies() - { - $dir = $this->getDir(); - - file_put_contents($dir.'/whippet.lock', json_encode([ - 'themes' => [ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], - ])); - - $whippetLock = \Dxw\Whippet\Files\WhippetLock::fromFile($dir.'/whippet.lock'); - - $this->assertFalse($whippetLock->isErr()); - $this->assertEquals([ - [ - 'name' => 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ], - ], $whippetLock->unwrap()->getDependencies('themes')); - } - - public function testGetHash() - { - $whippetLock = new \Dxw\Whippet\Files\WhippetLock([ - 'hash' => '123', - ]); - - $this->assertEquals('123', $whippetLock->getHash()); - } - - public function testGetDependenciesNotSet() - { - $whippetLock = new \Dxw\Whippet\Files\WhippetLock([ - 'themes' => [], - ]); - - $this->assertEquals([], $whippetLock->getDependencies('plugins')); - } - - public function testSetHash() - { - $whippetLock = new \Dxw\Whippet\Files\WhippetLock([]); - - $whippetLock->setHash('123'); - - $this->assertEquals('123', $whippetLock->getHash()); - } - - public function testAddDependency() - { - $whippetLock = new \Dxw\Whippet\Files\WhippetLock([]); - - $whippetLock->addDependency('plugins', 'my-plugin', 'git@github.com/foobar/baz', '123abc'); - $this->assertEquals([ - [ - 'name' => 'my-plugin', - 'src' => 'git@github.com/foobar/baz', - 'revision' => '123abc', - ], - ], $whippetLock->getDependencies('plugins')); - } - - public function testAddDependencyThatAlreadyExists() - { - $whippetLock = new \Dxw\Whippet\Files\WhippetLock([ - 'plugins' => [ - [ - 'name' => 'my-other-plugin', - 'src' => 'git@github.com/foobar/bat', - 'revision' => 'zzz', - ], - [ - 'name' => 'my-plugin', - 'src' => 'git@github.com/foobar/baz', - 'revision' => '456789', - ], - ], - ]); - - $whippetLock->addDependency('plugins', 'my-plugin', 'git@github.com/foobar/baz', '123abc'); - $this->assertEquals([ - [ - 'name' => 'my-other-plugin', - 'src' => 'git@github.com/foobar/bat', - 'revision' => 'zzz', - ], - [ - 'name' => 'my-plugin', - 'src' => 'git@github.com/foobar/baz', - 'revision' => '123abc', - ], - ], $whippetLock->getDependencies('plugins')); - } - - public function testSaveToPath() - { - $dir = $this->getDir(); - - $data = [ - 'foo' => 'bar', - ]; - - $whippetLock = new \Dxw\Whippet\Files\WhippetLock($data); - - $whippetLock->saveToPath($dir.'/my-whippet.lock'); - - $this->assertTrue(file_exists($dir.'/my-whippet.lock')); - $this->assertEquals($data, json_decode(file_get_contents($dir.'/my-whippet.lock'), true)); - } - - public function testSaveToPathPrettyPrinting() - { - $dir = $this->getDir(); - - $data = [ - 'foo' => '/', - ]; - - $whippetLock = new \Dxw\Whippet\Files\WhippetLock($data); - - $whippetLock->saveToPath($dir.'/my-whippet.lock'); - - $this->assertTrue(file_exists($dir.'/my-whippet.lock')); - $this->assertEquals(implode("\n", [ - '{', - ' "foo": "/"', - '}', - '', // Trailing newline - ]), file_get_contents($dir.'/my-whippet.lock'), true); - } - - public function testFromStringInvalid() - { - $output = \Dxw\Whippet\Files\WhippetLock::fromString('this is not json'); - - $this->assertTrue($output->isErr()); - $this->assertEquals('invalid JSON', $output->getErr()); - } - - public function testFromFileNotFound() - { - $dir = $this->getDir(); - - $output = \Dxw\Whippet\Files\WhippetLock::fromFile($dir.'/file-not-found.json'); - - $this->assertTrue($output->isErr()); - $this->assertEquals('file not found', $output->getErr()); - } -} diff --git a/tests/plugins_test.php b/tests/plugins_test.php deleted file mode 100644 index 3e00393a..00000000 --- a/tests/plugins_test.php +++ /dev/null @@ -1,92 +0,0 @@ - ['pipe', 'w'], - 2 => ['pipe', 'w'], - ], $pipes, $cwd); - - $this->assertTrue(is_resource($process)); - - $stdout = stream_get_contents($pipes[1]); - fclose($pipes[1]); - $stderr = stream_get_contents($pipes[2]); - fclose($pipes[2]); - - $return = proc_close($process); - - return [$return, $stdout, $stderr]; - } - - public function createTestDir() - { - # Create Whippet repo - $this->dir = $dir = 'tests/plugins-test-dir'; - exec('rm -rf '.$dir); - mkdir($dir); - mkdir($dir.'/config'); - mkdir($dir.'/wp-content'); - mkdir($dir.'/wp-content/plugins'); - file_put_contents($dir.'/.gitignore', "\n"); - file_put_contents($dir.'/plugins', ''); - - # Create a plugin git repo - mkdir($dir.'/git-repo'); - mkdir($dir.'/git-repo/advanced-custom-fields'); - list($return, $stdout, $stderr) = $this->cmd('git init', $dir.'/git-repo/advanced-custom-fields'); - $this->assertEquals(0, $return, 'Error running git command'); - list($return, $stdout, $stderr) = $this->cmd('git commit --allow-empty -m Meow', $dir.'/git-repo/advanced-custom-fields'); - $this->assertEquals(0, $return, 'Error running git command'); - } - - public function testSupportedCommentSyntax() - { - $this->createTestDir(); - file_put_contents($this->dir.'/plugins', "source = \"git-repo/\"\nadvanced-custom-fields=\n; a good comment\n"); - - list($return, $stdout, $stderr) = $this->cmd('../../bin/whippet plugins install', dirname(__DIR__).'/'.$this->dir); - - $this->assertEquals(0, $return); - - $this->assertStringNotContainsString('PHP Fatal error', $stderr); - $this->assertStringNotContainsString('PHP Warning', $stderr); - $this->assertStringNotContainsString('PHP Notice', $stderr); - $this->assertStringNotContainsString('PHP Deprecated', $stderr); - } - - public function testDeprecatedCommentSyntax() - { - $this->createTestDir(); - file_put_contents($this->dir.'/plugins', "source = \"git-repo/\"\nadvanced-custom-fields=\n# a bad comment\n"); - - list($return, $stdout, $stderr) = $this->cmd('../../bin/whippet plugins install', dirname(__DIR__).'/'.$this->dir); - - $this->assertEquals(1, $return); - - $this->assertStringNotContainsString('PHP Fatal error', $stderr); - $this->assertStringNotContainsString('PHP Warning', $stderr); - $this->assertStringNotContainsString('PHP Notice', $stderr); - $this->assertStringNotContainsString('PHP Deprecated', $stderr); - } - - public function testDeprecatedCommentSyntax2() - { - // Add whitespace before the # - $this->createTestDir(); - file_put_contents($this->dir.'/plugins', "source = \"git-repo/\"\nadvanced-custom-fields=\n # a bad comment\n"); - - list($return, $stdout, $stderr) = $this->cmd('../../bin/whippet plugins install', dirname(__DIR__).'/'.$this->dir); - - $this->assertEquals(1, $return); - - $this->assertStringNotContainsString('PHP Fatal error', $stderr); - $this->assertStringNotContainsString('PHP Warning', $stderr); - $this->assertStringNotContainsString('PHP Notice', $stderr); - $this->assertStringNotContainsString('PHP Deprecated', $stderr); - } -} diff --git a/tests/project_directory_test.php b/tests/project_directory_test.php deleted file mode 100644 index 7776b0fe..00000000 --- a/tests/project_directory_test.php +++ /dev/null @@ -1,110 +0,0 @@ -getDir(); - - mkdir($dir.'/wp-content/themes/my-theme'); - touch($dir.'/whippet.json'); - - foreach ([ - $dir.'/wp-content/themes/my-theme', - $dir.'/wp-content/themes', - $dir.'/wp-content', - $dir, - ] as $path) { - $result = \Dxw\Whippet\ProjectDirectory::find($path); - $this->assertFalse($result->isErr()); - $this->assertInstanceOf('\\Dxw\\Whippet\\ProjectDirectory', $result->unwrap()); - $this->assertEquals($dir, $result->unwrap()->__toString()); - } - } - - public function testGetDirectorySuccess2() - { - $dir = $this->getDir(); - - mkdir($dir.'/projects'); - mkdir($dir.'/projects/project1'); - mkdir($dir.'/projects/project1/wp-content/themes/my-theme'); - mkdir($dir.'/projects/project1/wp-content'); - mkdir($dir.'/projects/project1/wp-content/themes'); - mkdir($dir.'/projects/project1/wp-content/themes/my-theme'); - touch($dir.'/projects/project1/whippet.json'); - - foreach ([ - $dir.'/projects/project1/wp-content/themes/my-theme', - $dir.'/projects/project1/wp-content/themes', - $dir.'/projects/project1/wp-content', - $dir.'/projects/project1', - ] as $path) { - $result = \Dxw\Whippet\ProjectDirectory::find($path); - $this->assertFalse($result->isErr()); - $this->assertInstanceOf('\\Dxw\\Whippet\\ProjectDirectory', $result->unwrap()); - $this->assertEquals($dir.'/projects/project1', $result->unwrap()->__toString()); - } - } - - public function testGetDirectoryFailure() - { - $dir = $this->getDir(); - - mkdir($dir.'/projects'); - mkdir($dir.'/projects/project1'); - mkdir($dir.'/projects/project1/wp-content/themes/my-theme'); - mkdir($dir.'/projects/project1/wp-content'); - mkdir($dir.'/projects/project1/wp-content/themes'); - mkdir($dir.'/projects/project1/wp-content/themes/my-theme'); - touch($dir.'/plugins'); - - foreach ([ - $dir.'/projects/project1/wp-content/themes/my-theme', - $dir.'/projects/project1/wp-content/themes', - $dir.'/projects/project1/wp-content', - $dir.'/projects/project1', - ] as $path) { - $result = \Dxw\Whippet\ProjectDirectory::find($path); - $this->assertTrue($result->isErr()); - $this->assertEquals('whippet.json not found', $result->getErr()); - } - } - - public function testGetDirectoryWhippetJson() - { - $dir = $this->getDir(); - - mkdir($dir.'/wp-content/themes/my-theme'); - touch($dir.'/whippet.json'); - - foreach ([ - $dir.'/wp-content/themes/my-theme', - $dir.'/wp-content/themes', - $dir.'/wp-content', - $dir, - ] as $path) { - $result = \Dxw\Whippet\ProjectDirectory::find($path); - $this->assertFalse($result->isErr()); - $this->assertInstanceOf('\\Dxw\\Whippet\\ProjectDirectory', $result->unwrap()); - $this->assertEquals($dir, $result->unwrap()->__toString()); - } - } - - public function testGetDirectoryAvoidPluginsDirectory() - { - $dir = $this->getDir(); - - mkdir($dir.'/wp-content'); - mkdir($dir.'/wp-content/plugins'); - mkdir($dir.'/wp-content/plugins/my-plugin'); - touch($dir.'/whippet.json'); - - $result = \Dxw\Whippet\ProjectDirectory::find($dir.'/wp-content/plugins/my-plugin'); - $this->assertFalse($result->isErr()); - $this->assertInstanceOf('\\Dxw\\Whippet\\ProjectDirectory', $result->unwrap()); - $this->assertEquals($dir, $result->unwrap()->__toString()); - } -} diff --git a/tests/services/inspection_checker_test.php b/tests/services/inspection_checker_test.php deleted file mode 100644 index ba3022ea..00000000 --- a/tests/services/inspection_checker_test.php +++ /dev/null @@ -1,132 +0,0 @@ - 'my-theme', - 'src' => 'git@github.com:dxw-wordpress-themes/my-theme', - 'revision' => '27ba906', - ]; - $checker = new \Dxw\Whippet\Services\InspectionChecker($this->fakeInspectionsApi()); - $result = $checker->check('themes', $my_theme); - - $this->assertFalse($result->isErr()); - $this->assertEquals('', $result->unwrap()); - } - - public function testPluginCallsAPI() - { - $api = $this->fakeInspectionsApi(); - $api->shouldReceive('getInspections') - ->once() - ->with('my-plugin') - ->andReturn(\Result\Result::ok([])); - - $my_plugin = [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ]; - $checker = new \Dxw\Whippet\Services\InspectionChecker($api); - $result = $checker->check('plugins', $my_plugin); - $this->assertFalse($result->isErr()); - } - - public function testPluginWithNoInspectionsGeneratesMessage() - { - $api = $this->fakeInspectionsApi(); - $api->shouldReceive('getInspections') - ->andReturn(\Result\Result::ok([])); - - $my_plugin = [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ]; - $checker = new \Dxw\Whippet\Services\InspectionChecker($api); - $result = $checker->check('plugins', $my_plugin); - - $this->assertFalse($result->isErr()); - $warning_msg = <<<'EOT' -############################################# -# # -# WARNING: No inspections for this plugin # -# # -############################################# -EOT; - - $this->assertEquals($warning_msg, $result->unwrap()); - } - - public function testPluginWithInspectionsGeneratesMessage() - { - $inspection_ok = $this->fakeInspection(date_create('2015-05-01'), '2.3.4', 'No issues found', 'https://advisories.dxw.com/plugins/another_plugin/'); - $inspection_caution = $this->fakeInspection(date_create('2016-01-23'), '3.0.0', 'Use with caution', 'https://advisories.dxw.com/plugins/another_plugin2/'); - - $api = $this->fakeInspectionsApi(); - $api->shouldReceive('getInspections') - ->andReturn(\Result\Result::ok([$inspection_ok, $inspection_caution])); - - $my_plugin = [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ]; - $checker = new \Dxw\Whippet\Services\InspectionChecker($api); - $result = $checker->check('plugins', $my_plugin); - - $this->assertFalse($result->isErr()); - $expected_message = "Inspections for this plugin:\n* 01/05/2015 - 2.3.4 - No issues found - https://advisories.dxw.com/plugins/another_plugin/\n* 23/01/2016 - 3.0.0 - Use with caution - https://advisories.dxw.com/plugins/another_plugin2/"; - $this->assertEquals($expected_message, $result->unwrap()); - } - - public function testUnknownType() - { - $checker = new \Dxw\Whippet\Services\InspectionChecker($this->fakeInspectionsApi()); - $result = $checker->check('hedgehogs', []); - - $this->assertTrue($result->isErr()); - $this->assertEquals("Unknown type 'hedgehogs'", $result->getErr()); - } - - public function testApiError() - { - $api = $this->fakeInspectionsApi(); - $api->shouldReceive('getInspections') - ->andReturn(\Result\Result::err('Something went wrong')); - - $my_plugin = [ - 'name' => 'my-plugin', - 'src' => 'git@github.com:dxw-wordpress-plugins/my-plugin', - 'revision' => '123456', - ]; - $checker = new \Dxw\Whippet\Services\InspectionChecker($api); - $result = $checker->check('plugins', $my_plugin); - - $this->assertTrue($result->isErr()); - $this->assertEquals("Error fetching plugin inspections from API: 'Something went wrong'", $result->getErr()); - } - - private function fakeInspectionsApi() - { - return \Mockery::mock('\\Dxw\\Whippet\\Services\\InspectionsApi'); - } - - # test double - private function fakeInspection($date, $versions, $result, $url) - { - return (object) [ - 'date' => $date, - 'versions' => $versions, - 'result' => $result, - 'url' => $url, - ]; - } -} diff --git a/tests/services/inspections_api_test.php b/tests/services/inspections_api_test.php deleted file mode 100644 index 6e43bfe4..00000000 --- a/tests/services/inspections_api_test.php +++ /dev/null @@ -1,126 +0,0 @@ -fakeJsonApi(); - $json_api->shouldReceive('get') - ->once() - ->with('https://advisories.dxw.com/wp-json/v1/inspections/my-plugin') - ->andReturn(\Result\Result::ok([])); - - $api = new \Dxw\Whippet\Services\InspectionsApi('https://advisories.dxw.com', '/wp-json/v1/inspections/', $json_api); - $result = $api->getInspections('my-plugin'); - $this->assertFalse($result->isErr()); - $this->assertEquals([], $result->unwrap()); - } - - public function testNoInspections() - { - $json_api = $this->fakeJsonApi(); - $json_api->shouldReceive('get')->andReturn(\Result\Result::ok([])); - - $api = new \Dxw\Whippet\Services\InspectionsApi('https://advisories.dxw.com', '/wp-json/v1/inspections/', $json_api); - $result = $api->getInspections('my-plugin'); - - $this->assertFalse($result->isErr()); - $this->assertEquals([], $result->unwrap()); - } - - public function testWithInspections() - { - $response = [ - [ - 'name' => 'Slack', - 'slug' => 'slack', - 'date' => '2016-02-29T17:54:15+00:00', - 'versions' => '1.3.5', - 'url' => 'https://advisories.dxw.com/plugins/slack2/', - 'result' => 'Use with caution' - ], - [ - 'name' => 'Slack', - 'slug' => 'slack', - 'date' => '2015-06-17T24:00:12+00:00', - 'versions' => '1.1.3', - 'url' => 'https://advisories.dxw.com/plugins/slack/', - 'result' => 'No issues found' - ] - ]; - - $json_api = $this->fakeJsonApi(); - $json_api->shouldReceive('get')->andReturn(\Result\Result::ok($response)); - - $api = new \Dxw\Whippet\Services\InspectionsApi('https://advisories.dxw.com', '/wp-json/v1/inspections/', $json_api); - $result = $api->getInspections('my-plugin'); - - $this->assertFalse($result->isErr()); - - $result_body = $result->unwrap(); - $this->assertEquals(2, count($result_body)); - - $inspection = array_shift($result_body); - $this->assertEquals(date_create('2016-02-29T17:54:15'), $inspection->date); - $this->assertEquals('1.3.5', $inspection->versions); - $this->assertEquals('Use with caution', $inspection->result); - $this->assertEquals('https://advisories.dxw.com/plugins/slack2/', $inspection->url); - } - - public function testWithInspectionsWithMissingFields() - { - $response = [ - [ - 'name' => 'Slack', - 'slug' => 'slack', - 'date' => '2016-02-29T17:54:15+00:00', - 'versions' => '1.3.5', - 'url' => 'https://advisories.dxw.com/plugins/slack2/', - 'result' => 'Use with caution' - ], - [ - 'name' => 'Slack', - 'slug' => 'slack', - 'date' => '2015-06-17T24:00:12+00:00', - 'versions' => '1.1.3', - 'url' => 'https://advisories.dxw.com/plugins/slack/', - // missing result - ] - ]; - - $json_api = $this->fakeJsonApi(); - $json_api->shouldReceive('get')->andReturn(\Result\Result::ok($response)); - - $api = new \Dxw\Whippet\Services\InspectionsApi('https://advisories.dxw.com', '/wp-json/v1/inspections/', $json_api); - $result = $api->getInspections('my-plugin'); - - $this->assertTrue($result->isErr()); - - $error_message = $result->getErr(); - $this->assertEquals("Couldn't extract inspections from JSON response", $error_message); - } - - public function testApiError() - { - $json_api = $this->fakeJsonApi(); - $json_api->shouldReceive('get') - ->andReturn(\Result\Result::err('A failure happened')); - - $api = new \Dxw\Whippet\Services\InspectionsApi('https://advisories.dxw.com', '/wp-json/v1/inspections/', $json_api); - $result = $api->getInspections('my-plugin'); - - $this->assertTrue($result->isErr()); - $this->assertEquals('A failure happened', $result->getErr()); - } - - private function fakeJsonApi() - { - $stub = \Mockery::mock('\\Dxw\\Whippet\\Services\\JsonApi'); - return $stub; - } -} diff --git a/tests/services/json_api_test.php b/tests/services/json_api_test.php deleted file mode 100644 index 3adbb908..00000000 --- a/tests/services/json_api_test.php +++ /dev/null @@ -1,132 +0,0 @@ -fakeBaseApi(); - $base_api->shouldReceive('get') - ->once() - ->with('http://apisite.com/api/endpoint') - ->andReturn(\Result\Result::ok('[]')); - - $api = new \Dxw\Whippet\Services\JsonApi($base_api); - $result = $api->get('http://apisite.com/api/endpoint'); - $this->assertFalse($result->isErr()); - $this->assertEquals([], $result->unwrap()); - } - - public function testEmptyResponse() - { - $base_api = $this->fakeBaseApi(); - $base_api->shouldReceive('get')->andReturn(\Result\Result::ok('[]')); - - $api = new \Dxw\Whippet\Services\JsonApi($base_api); - $result = $api->get('http://apisite.com/api/endpoint'); - - $this->assertFalse($result->isErr()); - $this->assertEquals([], $result->unwrap()); - } - - public function testWithInspections() - { - $response_body = '[{"id":2644,"date":"2016-07-13T17:44:23","date_gmt":"2016-07-13T17:44:23","guid":{"rendered":"https:\/\/advisories.dxw.com\/?post_type=plugins&p=2644"},"modified":"2016-08-08T18:26:16","modified_gmt":"2016-08-08T18:26:16","slug":"advanced-custom-fields-table-field","type":"plugins","link":"https:\/\/advisories.dxw.com\/plugins\/advanced-custom-fields-table-field\/","title":{"rendered":"Advanced Custom Fields: Table Field"},"author":5,"_links":{"self":[{"href":"https:\/\/advisories.dxw.com\/wp-json\/wp\/v2\/plugins\/2644"}],"collection":[{"href":"https:\/\/advisories.dxw.com\/wp-json\/wp\/v2\/plugins"}],"about":[{"href":"https:\/\/advisories.dxw.com\/wp-json\/wp\/v2\/types\/plugins"}],"author":[{"embeddable":true,"href":"https:\/\/advisories.dxw.com\/wp-json\/wp\/v2\/users\/5"}],"version-history":[{"href":"https:\/\/advisories.dxw.com\/wp-json\/wp\/v2\/plugins\/2644\/revisions"}],"https:\/\/api.w.org\/attachment":[{"href":"https:\/\/advisories.dxw.com\/wp-json\/wp\/v2\/media?parent=2644"}]}}]'; - $expected_result = [ - [ - "id" => 2644, - "date" => "2016-07-13T17:44:23", - "date_gmt" => "2016-07-13T17:44:23", - "guid" => [ - "rendered" => "https://advisories.dxw.com/?post_type=plugins&p=2644" - ], - "modified" => "2016-08-08T18:26:16", - "modified_gmt" => "2016-08-08T18:26:16", - "slug" => "advanced-custom-fields-table-field", - "type" => "plugins", - "link" => "https://advisories.dxw.com/plugins/advanced-custom-fields-table-field/", - "title" => [ - "rendered" => "Advanced Custom Fields: Table Field" - ], - "author" => 5, - "_links" => [ - "self" => [ - [ - "href" => "https://advisories.dxw.com/wp-json/wp/v2/plugins/2644" - ] - ], - "collection" => [ - [ - "href" => "https://advisories.dxw.com/wp-json/wp/v2/plugins" - ] - ], - "about" => [ - [ - "href" => "https://advisories.dxw.com/wp-json/wp/v2/types/plugins" - ] - ], - "author" => [ - [ - "embeddable" => true, - "href" => "https://advisories.dxw.com/wp-json/wp/v2/users/5" - ] - ], - "version-history" => [ - [ - "href" => "https://advisories.dxw.com/wp-json/wp/v2/plugins/2644/revisions" - ] - ], - "https://api.w.org/attachment" => [ - [ - "href" => "https://advisories.dxw.com/wp-json/wp/v2/media?parent=2644" - ] - ] - ] - ] - ]; - - $base_api = $this->fakeBaseApi(); - $base_api->shouldReceive('get')->andReturn(\Result\Result::ok($response_body)); - - $api = new \Dxw\Whippet\Services\JsonApi($base_api); - $result = $api->get('https://advisories.dxw.com/api/endpoint'); - - $this->assertFalse($result->isErr()); - $this->assertEquals($expected_result, $result->unwrap()); - } - - public function testInvalidJSON() - { - $base_api = $this->fakeBaseApi(); - $base_api->shouldReceive('get') - ->andReturn(\Result\Result::ok('a webpage')); - - $api = new \Dxw\Whippet\Services\JsonApi($base_api); - $result = $api->get('http://apisite.com/api/endpoint'); - - $this->assertTrue($result->isErr()); - $this->assertEquals('Failed to parse response body as JSON when requesting http://apisite.com/api/endpoint', $result->getErr()); - } - - public function testApiError() - { - $base_api = $this->fakeBaseApi(); - $base_api->shouldReceive('get') - ->andReturn(\Result\Result::err('A failure happened')); - - $api = new \Dxw\Whippet\Services\JsonApi($base_api); - $result = $api->get('http://apisite.com/api/endpoint'); - - $this->assertTrue($result->isErr()); - $this->assertEquals('A failure happened', $result->getErr()); - } - - private function fakeBaseApi() - { - return \Mockery::mock('\\Dxw\\Whippet\\Services\\BaseApi'); - } -} diff --git a/vendor.phar b/vendor.phar deleted file mode 100644 index 1bee6a19b6399b02611c63431dc1197d222662a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1504653 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%0A5X7`eEtgK0$ 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 z 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 z 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 OfAJT8vGeIYPyav4LnVm- From cb906c81242073dab8bb4ddef4062cef8e97daac Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Mon, 7 Apr 2025 13:26:49 +0100 Subject: [PATCH 02/12] Add Rust as a Brew dependency --- Brewfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Brewfile b/Brewfile index 2c2a1499..471b7a46 100644 --- a/Brewfile +++ b/Brewfile @@ -1 +1,2 @@ +brew "rust" brew "shellcheck" From 125810d5e06a04272ee46ce5df3625bfd5f5c9a5 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Mon, 7 Apr 2025 13:27:38 +0100 Subject: [PATCH 03/12] Run cargo init This commit records the result of 'cargo init' with no changes at all to the generated files. --- .gitignore | 5 +++++ Cargo.lock | 7 +++++++ Cargo.toml | 6 ++++++ src/main.rs | 3 +++ 4 files changed, 21 insertions(+) create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore index e69de29b..4f518cb0 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,5 @@ + + +# Added by cargo + +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 00000000..9e4766f3 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 4 + +[[package]] +name = "whippet" +version = "3.0.0" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 00000000..76b393f0 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "whippet" +version = "0.1.0" +edition = "2024" + +[dependencies] diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 00000000..e7a11a96 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} From 4ff0e0038ee739dd46b6bb2d9eeb0095eb2150e5 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Mon, 7 Apr 2025 13:31:12 +0100 Subject: [PATCH 04/12] Optimistically version this branch as v3 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 76b393f0..5cf2c65c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "whippet" -version = "0.1.0" +version = "3.0.0" edition = "2024" [dependencies] From 2fd0b8059a82c680f1ca1ad234e2272934fd4b57 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 17:51:53 +0100 Subject: [PATCH 05/12] Script call Rust tools not PHP tools --- script/bootstrap | 6 ++---- script/test | 23 ++++++++--------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/script/bootstrap b/script/bootstrap index 0abe14b7..b1ec90cf 100755 --- a/script/bootstrap +++ b/script/bootstrap @@ -16,7 +16,5 @@ if [ -z "$CI" ]; then fi fi -if [ -f composer.json ]; then - echo "==> Installing PHP dependencies using Composer..." - composer install -fi +echo "==> Updating Cargo dependencies..." +cargo update diff --git a/script/test b/script/test index a0cbf2b4..8cd2e680 100755 --- a/script/test +++ b/script/test @@ -14,21 +14,14 @@ fi echo "==> Updating..." script/update -TEST_FILE=$1 +echo "==> Running ShellCheck..." +./.shellcheck.sh -if [ -n "$TEST_FILE" ]; then - echo "==> Running the tests matching '$TEST_FILE'..." - ./vendor/bin/phpunit "$TEST_FILE" -else - echo "==> Running ShellCheck..." - ./.shellcheck.sh +echo "==> Running code formatter..." +cargo fmt - echo "==> Running php-cs-fixer..." - ./vendor/bin/php-cs-fixer fix --dry-run -v --diff +echo "==> Running code linter..." +cargo clippy - echo "==> Running Psalm..." - ./vendor/bin/psalm - - echo "==> Running the tests..." - ./vendor/bin/phpunit && ./vendor/bin/kahlan spec -fi +echo "==> Running the tests..." +cargo test From 88271d2bc3fdbde4f1dcdb5077e977c84c9254a5 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 17:53:49 +0100 Subject: [PATCH 06/12] Add build script Note that: * We don't have a separate build script for the CI pipeline * We run 'cargo clean' before building, which might prove to be unnecessary and time consuming --- script/build | 20 ++++++++++++++++++++ script/test | 4 ++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100755 script/build diff --git a/script/build b/script/build new file mode 100755 index 00000000..82e1ca2f --- /dev/null +++ b/script/build @@ -0,0 +1,20 @@ +#!/bin/sh + +# script/test: Build the application. + +set -e + +cd "$(dirname "$0")/.." + +if [ -n "$DEBUG" ]; then + set -x +fi + +echo "==> Updating..." +script/update + +echo "==> Cleaning old files..." +cargo clean + +echo "==> Building Whippet..." +cargo build diff --git a/script/test b/script/test index 8cd2e680..0111dea6 100755 --- a/script/test +++ b/script/test @@ -11,8 +11,8 @@ if [ -n "$DEBUG" ]; then set -x fi -echo "==> Updating..." -script/update +echo "==> Building..." +script/build echo "==> Running ShellCheck..." ./.shellcheck.sh From 30393914513409ca5e7232a99fd191dd064cbce5 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 17:59:15 +0100 Subject: [PATCH 07/12] Add tests for hello-world app This commit does not modify the hello world app that was automatically generated by 'cargo init', it just adds some tests so that we can: a) ensure the test scripts work b) set the expectation of full coverage --- tests/hello_world.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 tests/hello_world.rs diff --git a/tests/hello_world.rs b/tests/hello_world.rs new file mode 100644 index 00000000..f8fada68 --- /dev/null +++ b/tests/hello_world.rs @@ -0,0 +1,27 @@ +use std::process::Command; + +#[test] +fn test_application_runs() { + let output = Command::new("cargo") + .arg("run") + .arg("--quiet") + .output() + .expect("Failed to execute command"); + + assert!( + output.status.success(), + "Application didn't run successfully" + ); +} + +#[test] +fn test_correct_output() { + let output = Command::new("cargo") + .arg("run") + .arg("--quiet") + .output() + .expect("Failed to execute command"); + + let stdout = String::from_utf8(output.stdout).expect("Output was not valid UTF-8"); + assert_eq!(stdout.trim(), "Hello, world!"); +} From d1d74916fe8e8323afc56a481a5fc0c879be13e6 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 18:02:47 +0100 Subject: [PATCH 08/12] Note that this branch is currently experimental --- README.md | 69 ++----------------------------------------------------- 1 file changed, 2 insertions(+), 67 deletions(-) diff --git a/README.md b/README.md index 2ba633e3..f12f0d9e 100644 --- a/README.md +++ b/README.md @@ -1,72 +1,7 @@ # Whippet -This project is a framework for building WordPress applications that eases deployment, plugin management and build steps. Whippet is part of dxw's work to build and host WordPress-based applications that conform more closely to 12-factor principles. - -Whippet has a few basic goals: - -1. Allowing proper build steps to take place, that automate build tasks both during development and deployment -2. Properly managing plugins and themes, allowing them to be version controlled and easily updated -3. Managing the creation of releases, including rollbacks -4. Automating the generation of commonly required objects like new applications and new themes - -Whippet can manage plugins and themes and releases. - -During development, whippet can be used in conjunction with [wpc](https://github.com/dxw/wpc). - -*Whippet is under development and should be considered alpha software. If you use it, we'd love to know what you think.* - -## Getting started - -You will need: - -* [PHP](https://www.php.net/) -* [Composer](https://getcomposer.org/) -* [git](https://git-scm.com/) - -### Install whippet - -#### Via homebrew (recommended) - -You can install Whippet via Homebrew by running: - -``` -brew install dxw/tap/whippet -``` - -#### From source - -Whippet implements the [scripts to rule them all](https://github.com/github/scripts-to-rule-them-all) -pattern. To install Whippet from source, clone this repository: - -```shell -$ git clone https://github.com/dxw/whippet.git -``` - -Then run the relevant script to setup your environment and install dependencies: - -```shell -./script/setup -``` - -You might also want to symlink whippet to somewhere in your path: - -```shell -sudo ln -s $PWD/bin/whippet /usr/local/bin/whippet -``` - -## Using Whippet - -The main things you can use Whippet to do are: - -* [Generating a Whippet application or theme](docs/generate.md) -* [Managing themes and plugins](docs/themesandplugins.md) -* [Deploying a Whippet application](docs/deploy.md) - -## Support - -For dxw developers who will encounter Whippet in a support context. - -See the [Support](docs/support.md) doc. +This is an experimental re-write of Whippet. If you are trying to do something +useful please use the `main` branch. ## Licence From f991440041ef324af305277752ae84343a52cd42 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 18:11:40 +0100 Subject: [PATCH 09/12] Start documenting ADRs --- .adr-dir | 1 + .../0001-record-architecture-decisions.md | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 .adr-dir create mode 100644 docs/architecture/decisions/0001-record-architecture-decisions.md diff --git a/.adr-dir b/.adr-dir new file mode 100644 index 00000000..da5cac6b --- /dev/null +++ b/.adr-dir @@ -0,0 +1 @@ +docs/architecture/decisions diff --git a/docs/architecture/decisions/0001-record-architecture-decisions.md b/docs/architecture/decisions/0001-record-architecture-decisions.md new file mode 100644 index 00000000..de4dfe06 --- /dev/null +++ b/docs/architecture/decisions/0001-record-architecture-decisions.md @@ -0,0 +1,19 @@ +# 1. Record architecture decisions + +Date: 2025-04-22 + +## Status + +Accepted + +## Context + +We need to record the architectural decisions made on this project. + +## Decision + +We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). + +## Consequences + +See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's [adr-tools](https://github.com/npryce/adr-tools). From 9f5790dc670ab0a7ff3ad9a808f442fd5805331f Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 18:37:15 +0100 Subject: [PATCH 10/12] Document the decision to try Rust --- .../0002-use-rust-for-development.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/architecture/decisions/0002-use-rust-for-development.md diff --git a/docs/architecture/decisions/0002-use-rust-for-development.md b/docs/architecture/decisions/0002-use-rust-for-development.md new file mode 100644 index 00000000..64403d71 --- /dev/null +++ b/docs/architecture/decisions/0002-use-rust-for-development.md @@ -0,0 +1,42 @@ +# 2. Use Rust for development + +Date: 2025-04-22 + +## Status + +Accepted + +## Context + +Previous versions of Whippet were written in PHP, which is not well suited +to desktop CLI apps. Moreover, Whippet has variously been a server a local +development environment and various other sorts of tooling. The accretion of +code over the years has led to a mis-match in coding styles and architectural +decisions and, most noticeably, the use of several different testing frameworks. +This has meant that it is difficult to add significant new features or to +refactor the code we already have. + +This means that the cost of re-engineering the application from scratch is not +likely to be much more expensive than refactoring the code we have. + +Rust is a reasonable choice for a new Whippet for the following reasons: + +1. Rust is type safe, memory safe and has strong tooling for linting, formatting + and a built in testing library. +2. Rust is _fast_. It is a compiled language and binaries are portable, so can + be used on MacOS and also Ubuntu (which we use for CI pipelines) without + cross-compiling. +3. It is relatively easy to use threads in Rust, which we would like to try + in order to run I/O operations such as Git clones or checkouts, in parallel. + +## Decision + +We will use Rust for a first attempt at re-writing Whippet and review the choice +once 'whippet deps update' has been implemented, so that we can run Whippet v2 +and v3 side-by-side and compare them. + +## Consequences + +Both the tooling and the Whippet app will need replacing. The re-written Whippet +will be safer, changes will be easier to make but there will be a steep learning +curve for anyone working on this repository, which may slow down development. From a2b5e7dc0b0bd80ad7b119fae5e15c668975f4e8 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 18:37:36 +0100 Subject: [PATCH 11/12] Add GitHub action for Rust tests --- .github/workflows/ci.yml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..74c2b056 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,26 @@ +name: Rust + +on: + push: + pull_request: + +env: + CARGO_TERM_COLOR: always + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Build + run: | + rustup --version + ./script/test + - name: Cache dependencies + uses: actions/cache@v4 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + target + key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} From 3f3e63da9325b9bd47207b0387ca94a8af53e891 Mon Sep 17 00:00:00 2001 From: Sarah Mount Date: Tue, 22 Apr 2025 18:37:54 +0100 Subject: [PATCH 12/12] ChangeLog notes Rust experiment --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 305341e5..15347dbc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,9 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +## Added +- Cargo tooling for Rust + ### Changed - Use current dxw Git URIs for documentation and tests +### Removed +- PHP version of Whippet + ## [v2.5.0] - 2024-07-24 ### Added