微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅当所有其他钩子都成功时才运行预提交钩子

如何解决仅当所有其他钩子都成功时才运行预提交钩子

我有一个预提交设置,其中包含几个非常标准的存储库(无论如何都适用于 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 举报,一经查实,本站将立刻删除。