提问人:Truong Hoang 提问时间:11/16/2023 更新时间:11/16/2023 访问量:36
预提交在命令行中直接运行时显示不同的结果,而不是从 make 中运行
Pre-commit shows different result when running directly in command line vs running from make
问:
我有一个包含以下内容的 Makefile:
SOURCE_DIR=./some_codebase/**/*
check-mypy:
pre-commit run mypy --files $(SOURCE_DIR)
当我触发时,结果显示为“已通过”(这是不正确的),但是当我直接在命令行中运行时,结果显示为“失败”(这是正确的)。另一件需要指出的事情是,我在这个问题中仅用作示例,所有其他钩子也都有这个问题(我也使用 ruff/black)。这个问题也发生在我的 bitbucket 管道中。make check-mypy
pre-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 缓存/预提交缓存进行研究,但尚未显示任何内容。
答:
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_codebase
make
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
评论
pre-commit