如何修改pre-commit的entry配置将匹配文件参数传给指定目录的flake8
问题1:当前配置是否默认传递匹配文件
当前配置没有实现自动传递pre-commit匹配到的文件,你现在写的entry: bash -c "cd src && flake8"没有接收pre-commit传入的文件参数,每次执行都会全量扫描src目录下的所有Python文件,这就是扫描耗时久的核心原因。
问题2:entry配置调整方案
你可以通过Bash的参数前缀替换功能,把pre-commit传入的、相对仓库根目录的文件路径,转换为相对src目录的路径再传给flake8,调整后的配置如下:
- repo: local hooks: - id: flake8 name: flake8 src package alias: flake8-src files: ^src/ types: [python] language: system entry: bash -c 'cd src && flake8 "${@#src/}"' --
配置说明
- 末尾的
--作用是将pre-commit传递给hook的所有文件参数,完整传入bash -c对应的脚本中,赋值给脚本的$@变量 ${@#src/}是Bash的参数替换语法,会把每个传入的路径参数开头的src/前缀删除,刚好匹配cd src之后的相对路径- 原有
files: ^src/的配置保留即可,能保证pre-commit只会传入src目录下的文件,路径前缀替换逻辑不会出错
调整后flake8只会扫描本次pre-commit匹配到的变更文件,不会全量扫描整个src目录,执行效率会大幅提升。
内容的提问来源于stack exchange,提问作者Intrastellar Explorer
相关产品推荐
相关产品推荐

