Это должно быть возможно. Попробуйте из главы 8.4 одно условное в сочетании с поиском строк из главы 8.2 руководства:
branch := $(shell git rev-parse --abbrev-ref HEAD)
ami_regions = $(if $(findstring master,$(branch)),us-west-2,)
show_regions:
echo $(ami_regions)
Функция $if
вернет значение из ветви then, если $findstring
вернет что-либо. $findstring
вернет master
, если $(branch)
содержит строку master
. Недостатком является то, что это также будет соответствовать что-то вроде master-tests
.
Чтобы сделать этот матч в точности мастером, вам нужно полагаться на bash: $(shell if [ master = $(branch) ]; then echo "true"; fi )
. Но тогда вы также должны позаботиться о том, чтобы $(branch)
не содержал шелл-код с побочными эффектами (обычно нет).
Обновление
Рено Пакалет и MadScientist в комментариях дали улучшения к использованию $findstring
: используйте $filter
или $patsubst
. Поскольку искомая строка не является шаблоном, возможно использование простого $subst
вместо $patsubst
.
$(if $(patsubst master,,$(branch)),,us-west-2)
Обратите внимание, что us-west-2
перемещено в ветвь else, так как $patsubst/subst
заменяет найденную строку пустой строкой, приводящей к ложному условию, если замена прошла успешно.
$(if $(filter master,$(branch)),us-west-2,)
$filter
возвращает слова из ввода, которые соответствуют поставляемой скороговорке. Поскольку шаблон представляет собой одно слово, в этом случае он возвращает только точные совпадения.
Так что в основном обе альтернативы дают схожие результаты. Различия возникают, если $branch
содержит пробелы: пробелы между удаленными словами будут возвращены $patsubst
, в то время как $filter
возвращает только совпадения. Git не допускает ветки с пробелами, этот случай не должен возникать.