预提交在命令行中直接运行时显示不同的结果,而不是从 make 中运行

Pre-commit shows different result when running directly in command line vs running from make

提问人:Truong Hoang 提问时间:11/16/2023 更新时间:11/16/2023 访问量:36

问:

我有一个包含以下内容的 Makefile:

SOURCE_DIR=./some_codebase/**/*

check-mypy:
    pre-commit run mypy --files $(SOURCE_DIR)

当我触发时,结果显示为“已通过”(这是不正确的),但是当我直接在命令行中运行时,结果显示为“失败”(这是正确的)。另一件需要指出的事情是,我在这个问题中仅用作示例,所有其他钩子也都有这个问题(我也使用 ruff/black)。这个问题也发生在我的 bitbucket 管道中。make check-mypypre-commit run mypy --files ./some_codebase/**/*mypy

$ make check-mypy
pre-commit run mypy --files ./pyworker_v2/**/*
mypy.....................................................................Passed
$ pre-commit run mypy --files ./pyworker_v2/**/*
mypy.....................................................................Failed
- hook id: mypy
- exit code: 1

我的如下:.pre-commit-config.yaml

minimum_pre_commit_version: 3.3.3

repos:
  - repo: local
    hooks:
      - id: mypy
        name: mypy
        entry: mypy --config-file ./pyproject.toml --enable-incomplete-feature=Unpack --install-types --non-interactive
        language: system
        types: [python]

我尝试通过 bash 脚本运行该命令,奇怪的是,检查再次显示为“已通过”(不正确),所以这不仅仅是 Makefile 的问题。

#!/bin/bash

pre-commit run mypy --files ./pyworker_v2/**/*

我也试过:

  • 使用绝对路径(相同的问题)。
  • 使用指向不存在的目录的错误路径进行测试,该路径会正确检测并失败。pre-commit
  • 对 git hook 缓存/预提交缓存进行研究,但尚未显示任何内容。
python git pre-commit-hook 预提交 pre-commit.com

评论

0赞 anthony sottile 11/16/2023
题外话,但你手上滚动的 Mypy 钩子是叉子炸弹
0赞 Truong Hoang 11/17/2023
@anthonysottile嘿,你是 pre-commit 的作者!我一直在期待你的回答或评论,因为我在每个都标有 .谢谢你的评论,但你能进一步详细说明吗,我想我不明白......pre-commit
0赞 anthony sottile 11/17/2023
你并行运行 mypy N 次,每个进程都会对你的整个代码库进行类型检查

答:

1赞 Useless 11/16/2023 #1

这不是一个 git 问题,而是一个 Make & shell 问题。

您(大概)使用 zsh 作为交互式 shell,它支持递归通配符作为原始 glob 扩展的扩展。**

bash 脚本和 GNU Make(使用与 bash AFAIK 相同的 glob 扩展)都不支持此 zsh 扩展。

评论

0赞 Truong Hoang 11/16/2023
谢谢,这是正确答案。我尝试手动列出一些文件以传递给预提交,并且现在使用时预提交可以正常工作。谢谢!!!另外,是的,我使用 zsh!some_codebasemake
1赞 phd 11/16/2023
在 Bash 中打开。shopt -s globstar**
0赞 Useless 11/16/2023
好提示,我不知道。我想你不知道GNU Make的等价物吗?
1赞 Truong Hoang 11/16/2023
我正在将此添加到Makefile中:SHELL:=/bin/bash -O globstar