xendk / bandaid
Drush命令,用于帮助修补 contrib 模块。
Requires
- php: >=5.3.0
- fabpot/goutte: 1.0.6
- symfony/yaml: ~2.2
README
Drush工具,用于帮助在Drupal上管理补丁,它有助于修补和升级模块。
请参阅这篇博客文章,了解此Drush命令背后的原理。
"太棒了" - 满意的用户
在你拿起这把装满子弹的枪之前
Bandaid假设你使用Git或其他VCS维护你的网站,并假设任何值得保留的东西都已提交或存档。请小心。
安装
推荐的安装方法是使用composer
-
全局安装Composer(如果需要)。
-
安装最新稳定版
cd ~/.drush && composer require xendk/bandaid:*
-
安装最新开发版
cd ~/.drush && composer require xendk/bandaid:dev-master
-
更新(将更新到最后稳定版或最新开发版,具体取决于你最初的选择)
cd ~/.drush && composer update xendk/bandaid
或者,您可以手动安装,通过克隆仓库或将发布包下载到 .drush 中,并在bandaid目录中运行composer install。
使用方法
常见选项
--no-cache
:将覆盖文件下载缓存。
命令,按其有用顺序
修补
drush bandaid-patch <patch file|url of patch|d.o issue> [project path]
项目路径是你想要修补的项目路径。如果是从模块或项目目录发出命令,则为可选。
将使用提供的补丁修补模块,如果成功,将弹出你的编辑器以记录修补的原因(以提醒你最初为什么要这样做)。此信息将被写入位于模块目录旁边的 .yml 文件中。如果需要,你可以编辑YAML文件,但请注意,它被以下命令使用。
如果提供的补丁是本地文件,它将被保存在YAML文件中,路径相对于YAML文件,因此假定本地补丁已提交到存储库。
示例
drush bandaid-patch patches/panels-something.patch sites/all/modules/contrib/panels
使用给定的补丁,并将其保存在 .yml 文件中的 ../../../patches/panels-something.patch
。
示例
drush bandaid-patch https://www.drupal.org/node/1985980#comment-8596585 sites/all/modules/contrib/panels
将使用第五条评论(cid 8596585)中的补丁修补模块。
对于问题URL,补丁的“主页”自动设置为问题URL,对于直接指向补丁/本地文件的URL,它将询问你。
如果你提供了一个不指向特定评论的问题URL,它将列出找到的补丁并询问使用哪个。
如果你不喜欢交互式问题,可以使用 --home
和 --reason
选项提供这些。
您可以使用--editor
来指定您喜欢的编辑器(或设置$EDITOR
或$VISUAL
),或者使用--no-editor
来完全不调用编辑器。
故障模式
如果补丁没有正确应用,理论上可能会破坏您的模块。这是对先提交原始模块的良好实践的微妙提醒。然而,由于git
和patch
相当保守,它们不太可能真的破坏模块,而且git reset
应该可以修复它。
检查本地更改
drush bandaid-diff [project path] [patch file]
示例
drush bandaid-diff sites/all/modules/contrib/panels
显示本地更改的diff,排除YAML文件中的补丁。可用于检查模块的状态或为上游生成补丁。如果补丁无法应用到基本修订版本,则应产生警告。
除非提供了第二个参数,否则将在标准输出上输出补丁。
故障模式
出现错误时不会执行任何操作。
移除补丁
drush bandaid-tearoff [project path]
示例
drush bandaid-tearoff sites/all/modules/contrib/panels
将撤销应用的补丁,并创建一个包含任何进一步本地修改的<module>.local.patch
文件。
现在您可以使用drush dl
来升级模块。
故障模式
如果YAML文件中的补丁无法干净地应用,或发生其他错误,它将顽固地拒绝执行任何操作,让您通过二分查找的方式找到是谁搞错了YAML文件或更新了模块而没有正确处理YAML文件,并因此应用惩罚。
对于不太严重的错误(例如,已应用的补丁但没有在YAML文件中提及),它将仅生成比预期的更改更多的本地补丁。
重新打补丁
drush bandaid-apply [project path]
示例
drush bandaid-apply sites/all/modules/contrib/panels
将重新应用yaml文件中的补丁,最后是任何<module>.local.patch
,如果成功,将删除本地补丁文件。
故障模式
如果YAML文件中的任何补丁应用失败,则默认会出错。选项--ignore-failing
将使其忽略失败的补丁,而--update-yaml
将删除YAML文件中的补丁。如果补丁已经在上游应用,这很方便。
您还可以手动修改YAML文件,并使用此命令将一系列补丁应用到模块的纯净版本。为了确保您没有给未来的不幸者留下混乱,提交您的更改(如果您喜欢,可以选择一个临时分支),然后尝试运行bandaid-tearoff,看看本地补丁是否看起来正常。
取消git化
drush bandaid-degit [project path]
示例
drush bandaid-degit custom_module
如果您有一个git checkout的项目,此命令将在YAML文件中记录原始存储库和检出修订版。
故障模式
因为它会删除.git目录,所以它会删除任何未提交的更改、未推送的提交和暂存区。
重新git化
drush bandaid-regit [project path]
示例
drush bandaid-regit custom_module
将项目转换为git存储库。原始和修订版要么从YAML文件中读取(bandaid-degit放置的地方),要么可以使用--origin
和--revision
命令行选项提供。
这很方便用于将更改推送到上游或更新通过git下载的项目。
故障模式
无法确定正确的来源和版本,这只会让你回到起点。
总结
如果你发现某个模块在本地补丁中生成垃圾,或者以其他方式让Bandaid表现不佳,请打开一个问题。
如果它坏了,你将保留两块碎片。