如何在自定义预提交挂钩中 return 状态为“已跳过”?

How to return status `Skipped` in self defined pre-commit hook?

我有一个自定义的预提交挂钩,如果较早的挂钩失败,我想跳过它。如果较早的挂钩失败,则会生成一个名为 pre-commit.log 的日志文件。

A .pre-commit-config.yaml 可能如下所示:

repos:
-   repo: https://gitlab.com/pycqa/flake8
    rev: 3.9.2
    hooks:
    - id: flake8
      log_file: pre-commit.log
-   repo: local
    hooks:
    - id: skript
      name: skript
      entry: bash skript.sh
      language: system
      log_file: pre-commit.log

我的 bash skript.sh 看起来像这样:

if [ -f "pre-commit.log" ]; then
  echo "Error in earlier pre-commit! We skip this script."
  echo "See 'pre-commit.log' for detailed information."
  exit 1
else
  echo "All pre-commits successful."
  # some other code
fi

现在我检查“pre-commit.log”是否存在,如果存在,我 return exit 1。因此,这个钩子的输出是 Failed。但我更喜欢状态 Skipped 因为没有失败。

我的目标是在控制台或日志文件中看到文本 Skipped,就像 jupyter-notebook-cleanup 的这张图片一样。 如果我写 exit 0 我得到 Passed 就像 isortblack 如果我 return exit 1 或另一个更大的数字我得到 Failed 喜欢 flake8.

如何获取消息 Skipped

无法影响文本 Skipped

Skipped只出现在以下情况:

  • 钩子不是 运行 因为它的 hookid 出现在 SKIP 环境变量中
  • 没有文件匹配 files / types / types_or 并且 pass_filenamestrue(默认值)和 always_runfalse(默认值)

你最好的选择是 exit 0 在 non-failure 的情况下,这将在输出

中显示为 Passed

免责声明:我编写了您正在使用的pre-commit工具