Запуск программы форматирования 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, которые не определены, вычисляются как пустая строка.

Другие вопросы по тегам