我如何遍历已更改的文件(git)并将flake8
和isort
包应用于此文件?
git diff --name-only --cached | xargs python -m isort -I
上面的示例不起作用,错误提示unrecognized arguments: -I
我正在pre-commit
钩子中尝试此操作。
答案 0 :(得分:0)
显然-I
对isort
无效:
也许你是说--interactive
。
答案 1 :(得分:0)
当您使用 -m
标志运行python时,它将终止选项列表。尝试将-I
移到-m
git diff --name-only --cached | xargs python -I -m isort
如果您打算将 -I
传递给isort,则该参数无效。
让我们备份并查看您要解决的问题,而不是专注于此xargs
命令和python调用:
如何遍历已更改的文件(git)并将flake8和isort软件包应用于此文件?
这是一个示例脚本,我已将其用作预提交钩子的基础:
#!/bin/bash
CD_UP="$(git rev-parse --show-cdup)"
MOD_FILES=($(git status --porcelain | grep -E '^[MARC]' \
| awk '{print $2}' | tr '\r\n' ' '))
BAD_FILES=()
for MOD_FILE in "${CD_UP}${MOD_FILES[@]}"; do
<do stuff>
if <the result of "do stuff" was not good>; then
BAD_FILES+=("${MOD_FILE}")
fi
done
for f in "${BAD_FILES[@]}"; do
echo "File failed pre-commit checks: ${f}"
done
if [ ${#BAD_FILES[*]} != 0 ]; then
exit 1
fi
exit 0
这将:
git
继续提交),如果没有文件失败则退出代码为1(防止git
继续提交)您需要将<do stuff>
替换为在flake8
上运行isort
和${MOD_FILE}
的命令。您还需要修改循环主体中的if
语句,以检查命令的结果并确定文件是否失败或通过。
只需用此脚本(加上您的修改)替换.git/hooks/pre-commit
,您就可以了。