Запуск программы форматирования Black из Docker с помощью команды Makefile
Вместо того, чтобы устанавливать Black на свой локальный компьютер, я экспериментирую с запуском Black (установленного из файла requirements.txt) из контейнера Docker. Я хочу добавить команду 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)
Это находит точку, в которой текущая ветвь разветвляется от мастера
https://git-scm.com/docs/git-merge-base:
git merge-base --fork-point master
И это возвращает имена файлов, возвращенные из diff с расширением.py (фильтр.py может быть излишним?)
https://git-scm.com/docs/git-diff
--name-only -- "*.py"
Хотел бы услышать отзывы или примеры подобных установок.
1 ответ
Знаки доллара важны: они вводят переменные. Если вы хотите передать знак доллара сценарию оболочки, скажем, в$(shell ..)
функции, вам нужно избежать их, записав их как $$
:
diff_files := $(shell git diff $$(git merge-base --fork-point master) --name-only -- "*.py")
В противном случае make думает, что $(git merge-base --fork-point master)
- длинная и очень странно выглядящая переменная make, и все переменные make, которые не определены, вычисляются как пустая строка.