詹姆斯·科威/composer-patcher

使用composer应用补丁

dev-master 2015-05-15 11:24 UTC

This package is not auto-updated.

Last update: 2024-09-23 08:04:24 UTC


README

使用Composer的script功能通过patch工具应用通用补丁。
补丁应用是幂等的,与patch工具一样,意味着如果patch决定不应用,则不会重新应用。

项目设置

a) 补丁需要在Composer的extra配置区域中声明(仅限根包)

    "extra": {
        "magento-root-dir": "public",
        "patches": {
            "patch-group-1": {
                "patch-name-1": {
                    "type": "patch",
                    "title": "Allow composer autoloader to be applied to Mage.php",
                    "url": "https://url/to/file1.patch"
                }
            },
            "patch-group-2": {
                "patch-name-1": {
                    "title": "Fixes Windows 8.1",
                    "url": "https://url/to/file2.patch"
                }
            },
            "shell-patch-group-1": {
                "magento-shell-patch-name-1": {
                    "type": "shell",
                    "title": "Magento security fix",
                    "url": "https://url/to/magento/shell/patch.sh"
                }
            }
        }
    }

有两种类型的补丁

  • 类型 "patch" - 通用补丁/差异文件,使用补丁工具应用;
  • 类型 "shell" - 官方的Magento shell补丁,能够应用和/或回滚自身,且自包含。

如果没有声明类型,则默认为"patch"。如果您声明了此类补丁类型,您必须设置"magento-root-dir"额外配置,指向Mage根目录,否则将失败并显示错误。

"Shell"补丁将被复制到Mage根目录(由"magento-root-dir"额外配置设置),触发后将被删除。

补丁的名称将创建其ID,供内部使用(例如patch-group-1/patch-name-1),因此请确保您遵循以下2条规则

  • patch-group-1必须在patches对象字面量中是唯一的
  • patch-name-1必须在它的补丁中是唯一的

补丁组的示例:"magento","drupal","security"。补丁名称的示例:"CVS-1","composer-autoloader"。

b) 需要添加额外的脚本回调以在installupdate时自动应用补丁(仅限根包)

  "scripts": {
    "post-install-cmd": "Inviqa\\Command::patch",
    "post-update-cmd": "Inviqa\\Command::patch"
  }

您可以使用您想要的任何Composer 命令事件,甚至可以手动触发事件
再次提醒,仅支持命令事件。请查看上述链接以了解哪些是它们。

c) 必须可用的patch工具