netresearch / composer-patches-plugin
Composer 补丁插件
1.3.1
2022-04-20 12:08 UTC
Requires
- composer-plugin-api: ^2.0
Requires (Dev)
- composer/composer: ^2.0
README
此插件允许您为任何包提供任何包的补丁。
如果您不想在根包之外提供补丁包,请考虑将其作为 repositories 键 中的包提供
{ "name": "vendor/package", "type": "project", "repositories": [ { "type": "package", "package": { "type": "metapackage", "name": "vendor/package-patches", "version": "1.0.0", "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "vendor/name": [ { "url": "https://my-domain.com/path/to/my.patch" } ] } } } } ], "require": { "vendor/package-patches": "~1.0" } }
查看此演示以了解此插件的原始想法:http://de.slideshare.net/christianopitz/distributed-patching-with-composer
补丁属性
您可以按包和可选的版本约束提供补丁
仅按包提供补丁
{ "name": "netresearch/typo3-patches", "version": "1.0.0", "type": "metapackage", "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "typo3/cms": [ { "title": "[FEATURE] Allow registration of different login forms", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/32f331fead9c7aa50d9248c54e3c0af75d793539" }, { "title": "[PATCH] [BUGFIX] Flexform \"required\" on input fields applies to last field only", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/a48f8b0dae11ce7246eff43132d986bccf55b786" } ] } } }
按包和版本或版本约束提供补丁
composer.json
{ "name": "netresearch/typo3-patches", "version": "1.0.0", "type": "metapackage", "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "typo3/cms": { "6.2.0-beta1": [ { "title": "[FEATURE] Allow registration of different login forms", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/32f331fead9c7aa50d9248c54e3c0af75d793539" }, { "title": "[PATCH] [BUGFIX] Flexform \"required\" on input fields applies to last field only", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/a48f8b0dae11ce7246eff43132d986bccf55b786" } ], "6.2.0-beta2": [ { "title": "[PATCH] [BUGFIX] Flexform \"required\" on input fields applies to last field only", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/a48f8b0dae11ce7246eff43132d986bccf55b786" } ], "6.2.*": [ { "title": "[BUGFIX] Ignore dependencies on non typo3-cms-extension", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/9fe856ac96e6a53fef8277f36a4a80bace6f0ae9", "sha1": "b56a1c47a67d1596c0bd8270e61c44f8911af425" } ] } } } }
注意:当多个版本约束与目标包的版本匹配时,所有匹配的补丁都将被应用(通过它们的校验和进行规范化,因此不应发生重复)。
从 URL 或路径提供补丁
您可以将补丁对象的任何部分放入另一个 JSON 中,并通过 URL(或路径)加载它
composer.json
{ "name": "netresearch/typo3-patches", "version": "1.0.0", "type": "metapackage", "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "typo3/cms": "http://example.com/typo3-patches.json" } } }
http://example.com/typo3-patches.json
{ "6.2.0-beta1": [ { "title": "[FEATURE] Allow registration of different login forms", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/32f331fead9c7aa50d9248c54e3c0af75d793539" }, { "title": "[PATCH] [BUGFIX] Flexform \"required\" on input fields applies to last field only", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/a48f8b0dae11ce7246eff43132d986bccf55b786" } ], "6.2.0-beta2": [ { "title": "[PATCH] [BUGFIX] Flexform \"required\" on input fields applies to last field only", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/a48f8b0dae11ce7246eff43132d986bccf55b786" } ], "6.2.*": [ { "title": "[BUGFIX] Ignore dependencies on non typo3-cms-extension", "url": "https://git.typo3.org/Packages/TYPO3.CMS.git/patch/9fe856ac96e6a53fef8277f36a4a80bace6f0ae9", "sha1": "b56a1c47a67d1596c0bd8270e61c44f8911af425" } ] }
从本地存储的文件提供补丁
您可以使用绝对路径或相对于应用程序根的路径。
composer.json
"repositories": [ { "type": "package", "package": { "type": "metapackage", "name": "vendor/package-patches", "version": "1.0.0", "require": { "netresearch/composer-patches-plugin": "~1.0" }, "extra": { "patches": { "typo3/cms": [ { "title": "[FEATURE] Allow registration of different login forms", "url": "patches/example_local_file.patch" } ] } } } } ], "require": { .... },
我还在与 composer.json 同一级别的位置添加了一个名为 "patches" 的新文件夹,并添加了一个补丁文件 example_local_file.patch,如下所示
# This patch file was generated by NetBeans IDE
# It uses platform neutral UTF-8 encoding and \n newlines.
--- a/src/com/zoho/crm/library/exception/Logger.php
+++ b/src/com/zoho/crm/library/exception/Logger.php
@@ -6,7 +6,7 @@
{
set_include_path(ZCRMConfigUtil::getConfigValue('applicationLogFilePath'));
$path=get_include_path();
- if($path{strlen($path)-1}!='\/')
+ if($path[strlen($path)-1]!='\/')
{
$path=$path."/";
}
注意:补丁将以 -p1 选项调用(移除第一个斜杠)并在库目录中
然后运行更新依赖项和安装补丁的命令
composer update vendor/package-patches
composer install
要求补丁
只需要求带有补丁的包。
{ "name": "netresearch/patched-typo3", "type": "project", "description": "A patched version of typo3", "minimum-stability": "dev", "require": { "netresearch/typo3-patches": "~1.0", "typo3/cms": "6.2.0-beta3" } }