运行 来自 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变量都被评估为空字符串。
我没有在本地机器上安装 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变量都被评估为空字符串。