运行 来自 Docker 的带有 Makefile 命令的黑色格式化程序

Running the Black formatter from Docker with a Makefile command

我没有在本地机器上安装 Black,而是从 Docker 容器中试验 运行ning Black(从 requirements.txt 安装)。我想添加一个 Makefile 命令来格式化修改后的文件。这是我到目前为止想出的,即 运行 和 make format:

# formats any files which differ from the point at which the current branch (2) forked from master (1)
# ____1_____________ master
#     \__________ dev
#          \_________2 current_branch
diff_files := $(shell git diff $(git merge-base --fork-point master) --name-only -- "*.py")
format:
    docker-compose run --rm api black $(diff_files)

这找到当前分支从 master 分叉的点

https://git-scm.com/docs/git-merge-base#_operation_modes:

git merge-base --fork-point master

而这个 returns 从具有 .py 扩展名的 diff 返回的文件名(.py 过滤器可能有点矫枉过正?)

https://git-scm.com/docs/git-diff#_description

--name-only -- "*.py"

希望听到一些反馈或任何类似设置的示例。

制作美元符号意义重大:它们引入了变量。如果你想将美元符号传递给 shell 脚本,比如在 $(shell ..) 函数中,你需要通过将它们写成 $$:

来转义它们
diff_files := $(shell git diff $$(git merge-base --fork-point master) --name-only -- "*.py")

否则,make认为$(git merge-base --fork-point master)是一个很长而且看起来很奇怪的make变量,所有没有定义的make变量都被评估为空字符串。