如何解决仅当所有其他钩子都成功时才运行预提交钩子
我有一个预提交设置,其中包含几个非常标准的存储库(无论如何都适用于 Python 项目),以及一个非常神奇的项目特定操作。
像这样:
repos:
- repo: https://github.com/timothycrosley/isort
...
- repo: https://github.com/psf/black
...
- repo: https://gitlab.com/pycqa/Flake8
...
- repo: local
hooks:
- id: local_project_specific_magic
name: local-magic-script
entry: magic_script.sh
language: script
当所有检查都成功时,这一切都运行良好。
我需要实现的是,如果前面的任何一个钩子失败,最后的 local_project_specific_magic
钩子不执行。这可行吗?
我尝试添加 fail_fast: true
并且这似乎有效,但如果其他钩子中的任何一个失败,它也会阻止其他钩子运行。例如,即使 isort 修复了一些导入,我仍然希望 black 做它的事情。
解决方法
fail_fast: true
与您无需重大手术
你可以想象,虽然彼此的钩子做了类似的事情:
entry: bash -c 'black "$@" || touch .fail' --
然后您的脚本执行类似 if [ -f .fail ]; then echo 'some other hook failed' && exit 1; fi
您还需要在开头使用 always_run: true
钩子以确保 .fail
也不存在 (rm -f .fail
)
但这听起来像是一个大的、无法维护的黑客。我怀疑您有 XY 问题,因为您的要求似乎非常奇怪 - 也许详细说明您为什么需要此设置?
免责声明:我创建了预提交
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。