PHP рд╕рдВрдЧреАрддрдХрд╛рд░: рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВ

рдЖрдк рдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖ рдЧрдП рд╣реЛрдВрдЧреЗ рдЬрд╣рд╛рдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдврд╛рдВрдЪреЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдпрд╛ рдмрдЧ рдирд╣реАрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдк рдмрд╣реБрдд рдЖрд▓рд╕реА рдирд╣реАрдВ рдереЗ рдФрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ред рд▓реЗрдХрд┐рди рд╡реЗ рдЗрд╕реЗ рддреБрд░рдВрдд рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрддреНрдкрд╛рдж рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬ рдПрдХ рд╕рд╛рд▓ рдореЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред


PHP рд╕рдВрдЧреАрддрдХрд╛рд░: рджрд░реНрдж рдХреЗ рдмрд┐рдирд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдареАрдХ рдХрд░реЗрдВ


рдпрджрд┐ рдЖрдкрдХреЛ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╕реБрдзрд╛рд░ рд▓рд╛рдиреЗ рдХреА рддрддреНрдХрд╛рд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рдХреНрдпрд╛ рдХрд░реЗрдВ? рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╛ рдврд╛рдВрдЪреЗ рдХреЗ рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рдВрдЯреЗ рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд╣реЗрд░рд┐рдЯреЗрдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд┐рд╕реЗ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЕрдХреНрд╕рд░ рдмрдбрд╝реЗ рдмрджрд▓рд╛рд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдХрдореНрдкреЛрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдкреИрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдмрдЪрд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдХрд╛рдВрдЯреЗ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрдпреЛрдВ рд╣реИрдВ, рдФрд░ рдпрд╣ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдкреИрдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: рд╡реЗ рдХреИрд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рдЙрдирдХреЗ рдлрд╛рдпрджреЗ рдХреНрдпрд╛ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдРрд╕реА рд╣реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдпрд╛ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдмрд┐рд▓реНрд▓реА рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░реЗрдВред


рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд░реАрдХреНрд╖рдг рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЗ рд╕реНрддрд░ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП PHPUnit рдкрд░реАрдХреНрд╖рдг рдврд╛рдВрдЪреЗ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг myFix.patch ( myFix.patch рдлрд╝рд╛рдЗрд▓) рдореЗрдВ рдХреБрдЫ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:


 diff --git a/src/CodeCoverage.php b/src/CodeCoverage.php index 2c92ae2..514171e 100644 --- a/src/CodeCoverage.php +++ b/src/CodeCoverage.php @@ -190,6 +190,7 @@ public function filter(): Filter */ public function getData(bool $raw = false): array { + // for example some changes here if (!$raw && $this->addUncoveredFilesFromWhitelist) { $this->addUncoveredFilesFromWhitelist(); } 

рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕реЗ php-рд╕рдВрдЧреАрддрдХрд╛рд░-рдкреИрдЪ-рдЙрджрд╛рд╣рд░рдг рд╣реЛрдиреЗ рджреЗрдВ ред рдпрд╣рд╛рдВ рд╡рд┐рд╡рд░рдг рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреНрдпрд╛ рд╣реИ, рддреЛ рдореИрдВ рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рд╕реНрдкреЙрдЗрд▓рд░ рдХреЗ рдиреАрдЪреЗ рд▓рд╛рддрд╛ рд╣реВрдВред


рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
 $ git clone git@github.com:mougrim/php-composer-patches-example.git   ┬лphp-composer-patches-example┬╗тАж remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0  : 100% (3/3), . $ cd php-composer-patches-example/ $ $ composer.phar init --name=mougrim/php-composer-patches-example --description="It's an example for article with using forks and patches for changing dependencies" --author='Mougrim <rinat@mougrim.ru>' --type=library --require='phpunit/phpunit:^8.4.2' --license=MIT --homepage='https://github.com/mougrim/php-composer-patches-example' Welcome to the Composer config generator This command will guide you through creating your composer.json config. Package name (<vendor>/<name>) [mougrim/php-composer-patches-example]: Description [It's an example for article with using forks and patches for changing dependencies]: Author [Mougrim <rinat@mougrim.ru>, n to skip]: Minimum Stability []: Package Type (eg library, project, metapackage, composer-plugin) [library]: License [MIT]: Define your dependencies. Would you like to define your dev dependencies (require-dev) interactively [yes]? no { "name": "mougrim/php-composer-patches-example", "description": "It's an example for article with using forks and patches for changing dependencies", "type": "library", "homepage": "https://github.com/mougrim/php-composer-patches-example", "require": { "phpunit/phpunit": "^8.4.2" }, "license": "MIT", "authors": [ { "name": "Mougrim", "email": "rinat@mougrim.ru" } ] } Do you confirm generation [yes]? yes Would you like to install dependencies now [yes]? yes Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 29 installs, 0 updates, 0 removals - Installing sebastian/version (2.0.1): Loading from cache - Installing sebastian/type (1.1.3): Loading from cache - Installing sebastian/resource-operations (2.0.1): Loading from cache - Installing sebastian/recursion-context (3.0.0): Loading from cache - Installing sebastian/object-reflector (1.1.1): Loading from cache - Installing sebastian/object-enumerator (3.0.3): Loading from cache - Installing sebastian/global-state (3.0.0): Loading from cache - Installing sebastian/exporter (3.1.2): Loading from cache - Installing sebastian/environment (4.2.2): Loading from cache - Installing sebastian/diff (3.0.2): Loading from cache - Installing sebastian/comparator (3.0.2): Loading from cache - Installing phpunit/php-timer (2.1.2): Loading from cache - Installing phpunit/php-text-template (1.2.1): Loading from cache - Installing phpunit/php-file-iterator (2.0.2): Loading from cache - Installing theseer/tokenizer (1.1.3): Loading from cache - Installing sebastian/code-unit-reverse-lookup (1.0.1): Loading from cache - Installing phpunit/php-token-stream (3.1.1): Loading from cache - Installing phpunit/php-code-coverage (7.0.8): Loading from cache - Installing doctrine/instantiator (1.2.0): Loading from cache - Installing symfony/polyfill-ctype (v1.12.0): Loading from cache - Installing webmozart/assert (1.5.0): Loading from cache - Installing phpdocumentor/reflection-common (2.0.0): Loading from cache - Installing phpdocumentor/type-resolver (1.0.1): Loading from cache - Installing phpdocumentor/reflection-docblock (4.3.2): Loading from cache - Installing phpspec/prophecy (1.9.0): Loading from cache - Installing phar-io/version (2.0.1): Loading from cache - Installing phar-io/manifest (1.0.3): Loading from cache - Installing myclabs/deep-copy (1.9.3): Loading from cache - Installing phpunit/phpunit (8.4.2): Loading from cache sebastian/global-state suggests installing ext-uopz (*) phpunit/phpunit suggests installing phpunit/php-invoker (^2.0.0) phpunit/phpunit suggests installing ext-soap (*) Writing lock file Generating autoload files $ $ echo 'vendor/' > .gitignore $ echo 'composer.lock' >> .gitignore $ git add .gitignore composer.json $ $ git commit --gpg-sign --message='Init composer' [master ce800ae] Init composer 2 files changed, 18 insertions(+) create mode 100644 .gitignore create mode 100644 composer.json $ git push origin master  : 4, . Delta compression using up to 4 threads.  : 100% (3/3), .  : 100% (4/4), 1.21 KiB | 1.21 MiB/s, . Total 4 (delta 0), reused 0 (delta 0) To github.com:mougrim/php-composer-patches-example.git f31c342..ce800ae master -> master 

рдирд╢реЗ рдХреЗ рдХрд╛рдВрдЯреЗ рдореЗрдВ рдХреНрдпрд╛ рдЦрд░рд╛рдмреА рд╣реИ


рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХрд╛рдВрдЯрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреИрд╕реЗ рд╣реЛрддреА рд╣реИред рдЖрдЗрдП PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред


  1. рд╣рдо GitHub рдкрд░ PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ рдкреЗрдЬ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ ред
  2. рдлреЛрд░реНрдХ рдмрдЯрди рдХреЛ рдкреБрд╢ рдХрд░реЗрдВ рдХрд╛рдВрдЯрд╛ рдмрдЯрди (рдзреНрдпрд╛рди рджреЗрдВ: рдЖрдкрдХреЗ рдкрд╛рд╕ рдЖрдкрдХрд╛ рдХрд╛рдВрдЯрд╛ рд╣реЛрдЧрд╛, рдЕрдкрдиреЗ рдпреВрдЬрд░ рдиреЗрдо рдХреЗ рд╕рд╛рде рдореМрдЧреНрд░реАрдо рдмрджрд▓реЗрдВ)ред
  3. рдХрд╛рдВрдЯрд╛ рдХреНрд▓реЛрди:
     cd ../ git clone git@github.com:mougrim/php-code-coverage.git cd php-code-coverage 
  4. рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЬрд╛рдПрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкреИрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
     git checkout 7.0.8 
  5. рдлрд┐рдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдмрдирд╛рдПрдБ:
     git checkout -b 7.0.8-myFix 
  6. рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддрд┐рдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ, рдзрдХреНрдХрд╛ рджреЗрддреЗ рд╣реИрдВ:
     git apply ../myFix.patch git add src/CodeCoverage.php git commit --gpg-sign --message='My fix' git push -u origin 7.0.8-myFix 
  7. рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рд▓рд┐рдП phpunit/php-code-coverage рдореЗрдВ рднрдВрдбрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдВрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ (рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдЬрдм phpunit/php-code-coverage рдкреИрдХреЗрдЬ рдХрдиреЗрдХреНрдЯ рд╣реЛ, рддреЛ рдореВрд▓ рдкреИрдХреЗрдЬ рдХрдиреЗрдХреНрдЯ рди рд╣реЛ, рд▓реЗрдХрд┐рди рдХрд╛рдВрдЯрд╛):
     cd ../php-composer-patches-example git checkout -b useFork composer.phar config repositories.phpunit/php-code-coverage vcs https://github.com/mougrim/php-code-coverage.git 
  8. рдмреНрд░рдВрдЪ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рдмрджрд▓реЗрдВ:
     composer.phar require phpunit/php-code-coverage 'dev-7.0.8-myFix' 

рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдЕрднреА рднреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ: рд╕рдВрдЧреАрддрдХрд╛рд░ рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд╛рдкрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ phpunit/phpunit рдХреЛ phpunit/php-code-coverage ^7.0.7 phpunit/php-code-coverage рд╕рдВрд╕реНрдХрд░рдг ^7.0.7 рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП dev-7.0.8-myFix рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ


 $ composer.phar require phpunit/php-code-coverage 'dev-7.0.8-myFix' ./composer.json has been updated Loading composer repositories with package information Updating dependencies (including require-dev) Your requirements could not be resolved to an installable set of packages. Problem 1 - phpunit/phpunit 8.4.2 requires phpunit/php-code-coverage ^7.0.7 -> satisfiable by phpunit/php-code-coverage[7.0.x-dev]. - phpunit/phpunit 8.4.2 requires phpunit/php-code-coverage ^7.0.7 -> satisfiable by phpunit/php-code-coverage[7.0.x-dev]. - phpunit/phpunit 8.4.2 requires phpunit/php-code-coverage ^7.0.7 -> satisfiable by phpunit/php-code-coverage[7.0.x-dev]. - Can only install one of: phpunit/php-code-coverage[7.0.x-dev, dev-7.0.8-myFix]. - Installation request for phpunit/php-code-coverage dev-7.0.8-myFix -> satisfiable by phpunit/php-code-coverage[dev-7.0.8-myFix]. - Installation request for phpunit/phpunit ^8.4.2 -> satisfiable by phpunit/phpunit[8.4.2]. Installation failed, reverting ./composer.json to its original content. 

рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдЪрд╛рд░ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:


  1. phpunit/php-code-coverage рдХрд╛рдВрдЯрд╛ рдХреЗ рдЕрд▓рд╛рд╡рд╛, PHPUnit рдХреЛ рдХрд╛рдВрдЯрд╛ рдФрд░ рдирд┐рд░реНрднрд░рддрд╛ phpunit/php-code-coverage рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг dev-7.0.8-myFix phpunit/php-code-coverage ред рдпрд╣ рд░рд╛рд╕реНрддрд╛ рд╕рдорд░реНрдерди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЕрдзрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ phpunit/php-code-coverage рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
  2. phpunit/php-code-coverage рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╕рдордп рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдЙрдкрдирд╛рдореЛрдВ рдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдирд╣реАрдВ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рд╣рдореЗрд╢рд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
  3. рдЕрдкрдиреЗ рдлреЛрд░реНрдХ рдореЗрдВ phpunit/php-code-coverage рдХрд░реЗрдВ рддрд╛рдХрд┐ 7.0.8 рдЯреИрдЧ рдХрд┐рд╕реА рдЕрдиреНрдп рдХрдорд┐рдЯ рдХреЛ 7.0.8 ред рдпрд╣ рдХрдо рд╕реЗ рдХрдо рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХрддрдо - рдЧрд┐рдЯ рдореЗрдВ рдпрд╣ рдЙрди рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рджреВрд░рд╕реНрде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рд╣реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдорд┐рдЯ рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрддреЗ рд╣реИрдВред
  4. рдЖрдкрдХреЗ рдХрд╛рдВрдЯреЗ phpunit/php-code-coverage рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬрд╝ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП 7.0.8-a+myFix (рд╕реНрд░реЛрдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд╕рд╛рде рдЯрдХрд░рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред

рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рдЙрдирдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВред рдореИрдВрдиреЗ 7.0.8.1 рдЬреИрд╕реЗ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╕рдВрдЧреАрддрдХрд╛рд░ рдРрд╕реЗ рдЯреИрдЧ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рджреВрд╕рд░рд╛ рдФрд░ рдЪреМрдерд╛ рд╡рд┐рдХрд▓реНрдк рдмреБрд░рд╛рдЗрдпреЛрдВ рд╕реЗ рдХрдо рд▓рдЧрддрд╛ рд╣реИред рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡реЗ рд▓рдЧрднрдЧ рд╕рдорд╛рди рд╣реИрдВ, рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ - рдЪреМрдерд╛ред рдПрдХ рдЕрд▓реНрдлрд╛ рд░рд┐рд▓реАрдЬ рдЯреИрдЧ рдмрдирд╛рдПрдВ:


 cd ../php-code-coverage git tag 7.0.8-a+myFix git push origin 7.0.8-a+myFix cd ../php-composer-patches-example composer.phar require phpunit/php-code-coverage '7.0.8-a+myFix' git add composer.json git commit --gpg-sign --message='Use fork' git push -u origin useFork 

рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ mougrim/php-composer-patches-example рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЬреЛ phpunit/phpunit рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рдХреЛрдИ рднреА phpunit/php-code-coverage рдмрд┐рдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ phpunit/php-code-coverage рд▓рд┐рдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА https://github.com/mougrim/php-code-coverage.git рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ phpunit/php-code-coverage рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╣реЛрдЧрд╛ рд╕рдВрд╕реНрдХрд░рдг 7.0.8-a+myFix (рдЕрдиреНрдпрдерд╛ рд╕реНрдерд╛рдкрдирд╛ рд╕рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧреА):


 cd ../ mkdir php-project cd php-project/ composer.phar require phpunit/phpunit '^8.4.2' composer.phar config repositories.mougrim/php-composer-patches-example vcs https://github.com/mougrim/php-composer-patches-example.git composer.phar config repositories.phpunit/php-code-coverage vcs https://github.com/mougrim/php-code-coverage.git composer.phar require phpunit/php-code-coverage 7.0.8-a+myFix composer.phar require mougrim/php-composer-patches-example dev-useFork 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ php-рд╕рдВрдЧреАрддрдХрд╛рд░-рдкреИрдЪ-рдЙрджрд╛рд╣рд░рдг рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗрд╡рд▓ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреИрдХрдЧрд┐рд╕реНрдЯ рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЖрдкрдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдХрджрдо рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред


рдХрд╛рдВрдЯреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн:


  • рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рдкрдХреНрд╖:


  • рдпрджрд┐ рдЖрдк roave/security-advisories рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ roave/security-advisories рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ roave/security-advisories рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдЧрдП рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рднреЗрджреНрдпрддрд╛ рд╣реИ;
  • рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд╛рдордиреЗ рдЖрддрд╛ рд╣реИ, рддреЛ рдХрд╛рдВрдЯреЗ рдХреА рдХрд╣рд╛рдиреА рдХреЛ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рджреЛрд╣рд░рд╛рдирд╛ рд╣реЛрдЧрд╛;
  • рдпрджрд┐ рдЖрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдорд╛рдирд╛ рдЧрдпрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рддреЛ dev-* рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдФрд░ рдЖрдкрдХреЛ рд╡рд┐рд░реЛрдзрд╛рднрд╛рд╕реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдпрд╛ рдХрд╛рдВрдЯрд╛ рдХреЗ рд╕рд╛рде рд╢рдорди рдХрд░рдирд╛ рд╣реЛрдЧрд╛;
  • рдпрджрд┐ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЗ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдкрдбрд╝реЗрдЧрд╛;
  • рдпрджрд┐ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП phpunit/php-code-coverage рд╕рдВрд╕реНрдХрд░рдг рд╕рдЦреНрддреА рд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ;
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЕрдЧрд░ рдКрдкрд░ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд┐рд╕реА рдЕрдиреНрдп рдХрд╛рд░рдг рд╕реЗ PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдФрд░ рднреА рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдорд╣рд╕реВрд╕ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ рдирд╢реЗ рдХреА рд▓рдд рдХреЛ рд░реЛрдХрдирд╛ рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред


Cweagans / рдХрдВрдкреЛрдЬрд╝рд░-рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рджрд░реНрдж рдФрд░ рдкреАрдбрд╝рд╛ рдХрд╛ рдЕрдиреБрднрд╡ рдХрд░рддреЗ рд╣реБрдП, рдореИрдВ PHP рдбрд╛рдЗрдЬреЗрд╕реНрдЯ рдирдВрдмрд░ 101 рдореЗрдВ cweagans/composer-patches рднрд░ рдЖрдпрд╛ (рд╡реИрд╕реЗ, pronskiy рдХрд╛ рдПрдХ рдЙрдкрдпреЛрдЧреА рдмреНрд▓реЙрдЧ рд╣реИ, рдореИрдВ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ)ред рдпрд╣ omposer рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд▓рд┐рдП рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡рд┐рд╡рд░рдг рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдПред


рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cweagans / рд╕рдВрдЧреАрддрдХрд╛рд░-рдкреИрдЪ:


  1. рдХреНрд▓реЛрди PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ:
     cd ../ rm -rf php-code-coverage git clone git@github.com:sebastianbergmann/php-code-coverage.git cd php-code-coverage 
  2. рдЙрд╕ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдЬрд╛рдПрдВ рдЬрд┐рд╕реЗ рд╣рдо рдкреИрдЪ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
     git checkout 7.0.8 
  3. рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдмрджрд▓рд╛рд╡ рдХрд░рддреЗ рд╣реИрдВред
  4. рдПрдХ рдкреИрдЪ рдмрдирд╛рдПрдБ:
     mkdir -p ../php-composer-patches-example/patches/phpunit/php-code-coverage git diff HEAD > ../php-composer-patches-example/patches/phpunit/php-code-coverage/myFix.patch 
  5. рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдо cweagans/composer-patches рдХрдиреЗрдХреНрдЯ cweagans/composer-patches :
     cd ../php-composer-patches-example git checkout master composer.phar update git checkout -b cweagansComposerPatches composer.phar require cweagans/composer-patches '^1.6.7' 
  6. cweagans/composer-patches рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП cweagans/composer-patches рдореЗрдВ рдирд┐рдореНрди рдЬреЛрдбрд╝реЗрдВ (рдЖрдк рдПрдХ рдкреИрдХреЗрдЬ рдХреЗ рд▓рд┐рдП рдХрдИ рдкреИрдЪ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ):
     { "config": { "preferred-install": "source" }, "extra": { "patches": { "phpunit/php-code-coverage": { "My fix description": "patches/phpunit/php-code-coverage/myFix.patch" } }, "enable-patching": true } } 
  7. рдЕрджреНрдпрддрди рдирд┐рд░реНрднрд░рддрд╛рдПрдБ:
     composer.phar update 
  8. рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд┐рдЫрд▓реЗ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдмрджрд▓рд╛рд╡ рдХрд┐рдП рдЧрдП рд╣реИрдВ:
     $ grep example vendor/phpunit/php-code-coverage/src/CodeCoverage.php // for example some changes here 
  9. рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдзрдХреЗрд▓реЗрдВ:
     git add composer.json patches/phpunit/php-code-coverage/myFix.patch git commit --gpg-sign --message='Use cweagans/composer-patches' git push -u origin cweagansComposerPatches 

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреИрдЪ рднреА рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред


рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ:


 cd ../ rm -rf php-project mkdir php-project cd php-project composer.phar require phpunit/phpunit '^8.4.2' 

рдХрдВрдкреЛрдЬрд╝рд░.рдЬреЙрди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬреЛрдбрд╝реЗрдВ:


 { "extra": { "enable-patching": true } } 

mougrim/php-composer-patches-example рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:


 composer.phar config repositories.mougrim/php-composer-patches-example vcs https://github.com/mougrim/php-composer-patches-example.git composer.phar require mougrim/php-composer-patches-example dev-cweagansComposerPatches 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдкреИрдЪ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд▓реЗрдХрд┐рди рдирд╣реАрдВред
рд╣рдо рдкреИрдХреЗрдЬ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреИрдЪ рд▓рд╛рдЧреВ рд╣реЛ, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ:


 $ composer.phar update Removing package phpunit/php-code-coverage so that it can be re-installed and re-patched. - Removing phpunit/php-code-coverage (7.0.8) Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals No patches supplied. Gathering patches for dependencies. This might take a minute. - Installing phpunit/php-code-coverage (7.0.8): Loading from cache - Applying patches for phpunit/php-code-coverage patches/phpunit/php-code-coverage/myFix.patch (My fix description) Could not apply patch! Skipping. The error was: The "patches/phpunit/php-code-coverage/myFix.patch" file could not be downloaded: failed to open stream: No such file or directory Writing lock file Generating autoload files 

рдмрдЧ рдЯреНрд░реИрдХрд░ рдореЗрдВ рд░рдо рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдЖрдзрд╛рд░рд┐рдд рдкреИрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдмрдЧ рдореЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рд╣реИрдВ ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреИрдЪ рд╕реЗ рдкрд╣рд▓реЗ URL рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрд╣реАрдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛), рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреИрдЪ рдкрд░ рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдкреИрдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


cweagans/composer-patches рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд▓рд╛рдн:


  • рдкреНрд▓рдЧрдЗрди рдХрд╛ рдПрдХ рд╕рдореБрджрд╛рдп рд╣реИ;
  • roave/security-advisories рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧреА;
  • рдЬрдм рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдкреИрдЪ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдорд╛рдореВрд▓реА рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП, рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╕рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдХреЗ рд▓рд┐рдП рдпрд╣ рднреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛);
  • рдпрджрд┐ рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд▓рд┐рдП phpunit/php-code-coverage рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдЦреНрддреА рд╕реЗ рддрдп рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛;
  • рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдКрдкрд░ рджрд┐рдП рдЧрдП рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ рдореЗрдВ рдЕрдкрдиреЗ рдкреИрдЪ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧреАред

рд╡рд┐рдкрдХреНрд╖:


  • рдпрд╣ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ;
  • enable-patching=true рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ рдкреИрдЪ рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рд▓рд╛рдЧреВ рд╣реЛ;
  • рдореБрдЦреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЕрдиреБрдЪрд░ рдХреЗ рдкрд╛рд╕ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд╣ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрд╕рдХреЗ рдкрд╛рд╕ рдХрд╛рд░реНрдп рдореЗрдВ рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдереЗ, рд▓реЗрдХрд┐рди рддреАрди рд╕рд╛рд▓ рдмрд╛рдж рдереЛрдбрд╝рд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ);
  • рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЖрдзрд╛рд░рд┐рдд рдкреИрдЪ рдирд┐рд░реНрднрд░рддрд╛ рдмрдЧ рдореЗрдВ рд╣рд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬреЛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдФрд░ рддреАрди рд╕рд╛рд▓ рд╕реЗ рдмреИрдХрд▓реЙрдЧ рдореЗрдВ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИ;
  • рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрд╛рдзрд╛ рдмрди рдЧрдпрд╛ рд╣реИред рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ ред рдЕрдиреБрдЪрд░ рдиреЗ рд▓рд┐рдЦрд╛ рдХрд┐ рд╡рд╣ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдореБрдЦреНрдп рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди (рдХрдВрдкреЛрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди) рд▓рд┐рдЦрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрд╕реНрдкрд╖реНрдЯ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЫреЛрдЯреА рд╕реВрдЪреА рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдирд╣реАрдВ рдорд┐рд▓рд╛ рдЬреЛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрдЧрд╛ред


рдореИрдВ рдкреНрд▓рдЧрдЗрди рдХреЛрдб рдореЗрдВ рдирд╣реАрдВ рдЖрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХрд╛рдВрдЯреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ - рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрд┐рд╕реА рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛ рдФрд░ рдЗрд╕реЗ рд╣рд▓ рдХрд░ рджрд┐рдпрд╛ рдерд╛ред


Vaimo рд╕рдВрдЧреАрддрдХрд╛рд░ рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрд╛рдВрдЯреЛрдВ рдореЗрдВ рдореВрд▓ рд╕реЗ рдХреЛрдИ рдЕрдВрддрд░ рдирд╣реАрдВ рдерд╛ (рд╡реЗ рдХрд╛рдВрдЯрд╛ рднреА рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ?)ред рдХрд╛рдВрдЯреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореБрдЦреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЙрдореНрдореАрджрд╡рд╛рд░ рдерд╛ рдЬреЛ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░ рд░рд╣рд╛ рдерд╛ - рд╡рд╛рдЗрдореЛ рдХрдореНрдкреЛрдЬрд░ рдкреИрдЪ ред рдЙрд╕ рд╕рдордп рдпрд╣ рдЕрднреА рднреА рдХрд╛рдВрдЯреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд╣реАрдВ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдкреИрдХреЗрдЬ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ vaimo/composer-patches ред рд▓реЗрдХрд┐рди рдПрдХ рд╕рдорд╕реНрдпрд╛ рдереА: рдореБрджреНрджреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрд░реНрдерд╛рддреН, рд▓реЗрдЦрдХ рд╕реЗ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдереАред рд╕рд╛рде рд╣реА, рдкреИрдХрдЧрд┐рд╕реНрдЯ рдкрд░ рдкреНрд▓рдЧрдЗрди рд╣реЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рдХрд╛рдВрдЯреЗ рдХреЛ рдЕрдиреНрдп рдмреЗрдХрд╛рд░ рдХрд╛рдВрдЯреЛрдВ рдХреЗ рдвреЗрд░ рдореЗрдВ рдирд╣реАрдВ рдЦреЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓реЗрдЦрдХ рд╕реЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдФрд░ рдкреИрдХреЗрдЬреИрдЧрд┐рд╕реНрдЯ рдореЗрдВ рдкреИрдХреЗрдЬ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ред рд▓рдЧрднрдЧ рдПрдХ рдорд╣реАрдиреЗ рдХреЗ рдмрд╛рдж, рд▓реЗрдЦрдХ рдиреЗ рдЬрд╡рд╛рдм рджрд┐рдпрд╛ рдФрд░ рдпрд╣ рд╕рдм рдХрд┐рдпрд╛ред :)


vaimo/composer-patches рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд┐рдЫрд▓реЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреИрдЪ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


  1. рд╣рдо рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рд╡рд╛рдкрд╕ cweagans/composer-patches ( vendor рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╣рдЯрд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ cweagans/composer-patches рдФрд░ vaimo/composer-patches рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдВрдЧрдд рдирд╣реАрдВ vaimo/composer-patches ):
     cd ../php-composer-patches-example git checkout master rm -rf vendor/ composer.phar update 
  2. рд╣рдо рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рд╕реЗ 1-4 рдЕрдВрдХ рд▓реЗрддреЗ рд╣реИрдВред
  3. рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдо vaimo/composer-patches рдХрдиреЗрдХреНрдЯ vaimo/composer-patches :
     cd ../php-composer-patches-example git checkout -b vaimoComposerPatches composer.phar require vaimo/composer-patches '^4.20.2' 
  4. vaimo/composer-patches рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП vaimo/composer-patches (рдкреНрд░рд▓реЗрдЦрди рдпрд╣рд╛рдБ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ):
     { "extra": { "patches": { "phpunit/php-code-coverage": { "My fix description": { "< 7.0.0": "patches/phpunit/php-code-coverage/myFix-leagcy.patch", ">= 7.0.0": "patches/phpunit/php-code-coverage/myFix.patch" } } } } } 
  5. рдЕрджреНрдпрддрди рдирд┐рд░реНрднрд░рддрд╛рдПрдБ:
     composer.phar update 
  6. рдпрджрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рд╣реИ, рддреЛ рдпрд╣ рдкрд┐рдЫрд▓реЗ рдХрдорд╛рдВрдб рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
     $ grep example vendor/phpunit/php-code-coverage/src/CodeCoverage.php // for example some changes here 
  7. рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХрдорд┐рдЯ рдХрд░реЗрдВ рдФрд░ рдзрдХреЗрд▓реЗрдВ:
     git add composer.json patches/phpunit/php-code-coverage/myFix.patch git commit --gpg-sign --message='Use vaimo/composer-patches' git push -u origin vaimoComposerPatches 

рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдкреИрдЪ рднреА рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ред


рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ рдФрд░ mougrim/php-composer-patches-example :


 cd ../ rm -rf php-project mkdir php-project cd php-project composer.phar require phpunit/phpunit '^8.4.2' composer.phar config repositories.mougrim/php-composer-patches-example vcs https://github.com/mougrim/php-composer-patches-example.git composer.phar require mougrim/php-composer-patches-example dev-vaimoComposerPatches 

рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░ рджрд┐рдП рдЧрдП рд╣реИрдВ:


 $ grep example vendor/phpunit/php-code-coverage/src/CodeCoverage.php // for example some changes here 

vaimo/composer-patches рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ред


рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рдлрд╛рдпрджреЗ рд▓рдЧрднрдЧ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдЬреИрд╕реЗ рд╣реА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:


  • рдЕрдиреБрдЪрд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪреМрдерд╛ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░ рдЪреБрдХрд╛ рд╣реИ;
  • рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрднрд░рддрд╛ рд╕реЗ рдкреИрдЪ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреБрдЫ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ;
  • рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ;
  • рдкреНрд▓рдЧрдЗрди рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд▓реЗрдЦ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреЗрдЦреЗрдВ - рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЬрд┐рд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рд╡рд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рд╣реИред

рд╡рд┐рдкрдХреНрд╖:


  • рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рддрд░рд╣, рдпрд╣ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдВрдЧреАрддрдХрд╛рд░ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИ;
  • рдкрд┐рдЫрд▓реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЗрд╕ рд╕рдореБрджрд╛рдп рдореЗрдВ рдХрдо рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╕рд╛рдорд╛рдиреНрдп рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:


  • рдХрд┐рд╕реА рднреА рдорд╛рдореВрд▓реА рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХрд╛рдВрдЯреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ;
  • cweagans/composer-patches рдПрдХ рдЕрдЪреНрдЫрд╛ рдкреНрд▓рдЧрдЗрди рд╣реИ, рд▓реЗрдХрд┐рди рдЦрд░рд╛рдм рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ;
  • Vaimo рд╕рдВрдЧреАрддрдХрд╛рд░ рдкреИрдЪ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рднреА рд╣реИ;
  • Vaimo рд╕рдВрдЧреАрддрдХрд╛рд░ рдкреИрдЪ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕рдореБрджрд╛рдп рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЗрд╕реЗ рдмрдврд╝рд╛рдПрдЧрд╛;
  • рдпрджрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдПрдХ рдХрдард┐рди рдХрд╛рдВрдЯрд╛ рдХрд╛ рд╕рд╣рд╛рд░рд╛ рд▓реЗрдирд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдореВрд▓ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рдВрдЯреЗ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░рдЦреЗрдВ)ред

рдореИрдВрдиреЗ рдПрдХ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдирд┐рд╖реНрдХрд░реНрд╖ рднреА рджрд┐рдпрд╛: рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рддреЛ рдРрд╕реЗ рдХрд╛рдВрдЯреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХред


рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ Vaimo рд╕рдВрдЧреАрддрдХрд╛рд░ рдкреИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:


  • PHPMnit рдФрд░ PHP рдХреЛрдб рдХрд╡рд░реЗрдЬ рдкреИрдЪрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП SoftMocks рдореЗрдВ;
  • WebMozart Assert рдХреЗ рд▓рд┐рдП рдЖрдВрддрд░рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реЙрдлреНрдЯ рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рдлрд┐рдХреНрд╕ рдлрд┐рдХреНрд╕ (рдЬрдмрдХрд┐ рд╕реЙрдлреНрдЯрдореИрдХреНрд╕ array_map(array('static', 'valueToString') рдХрдВрд╕реНрдЯреНрд░рдХреНрд╢рди array_map(array('static', 'valueToString') рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ)ред

рд░рд┐рдирдЯ рдЕрдЦрдорджреЗрд╡, рд╕реАрдирд┐рдпрд░ PHP рдбреЗрд╡рд▓рдкрд░


UPD1 : рдПрд▓рд┐рдпрд╛рд╕ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдмреЛрд╢рд░рд┐рдХ ред рд▓реЗрдЦ рдореЗрдВ рдЙрдкрдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред

Source: https://habr.com/ru/post/hi473654/


All Articles