Makefile, если существует удаленный Git-репозиторий, установите переменную - PullRequest
0 голосов
/ 26 декабря 2018

Попытка заставить этот короткий Makefile работать безуспешно:

REPO_NAME = myrepo
PROJECT = project

build: check-if-repo-exists

check-if-repo-exists:
    $(eval RESULT := $(shell git ls-remote ssh://git-user@git-server-demo.org/$(PROJECT)/$(REPO_NAME).git 2>/dev/null|grep HEAD|cut -f2 -d' ' 2>/dev/null))
    @printf "REPO-->$(RESULT)\n"
ifneq (,$(findstring HEAD,$(RESULT)))
    @printf "git repository - NOT found\n"
else
    @printf "git repository - found \n"
endif

Результат всегда

Git-репозиторий - найдено

Не заботится, если хранилище существует или не существует.Есть ли возможное решение?Я также попробовал другой подход, используя bash-подобные операторы if, такие как

@if [ "$(REPO)" == "HEAD" ] ; then \
    @printf "git repository - found \n";\   
    @$(eval MY_ERROR := $(shell printf "TRUE"))
fi 

Результат получше, но я все еще не могу установить переменную, чтобы использовать ее в другом правиле.Переменная MY_ERROR не будет доступна в новом правиле.Я понимаю, что в Makefiles правила не выполняются последовательно, как в Bash, но имеет смысл проверить, доступен ли репозиторий перед сборкой приложения.Любые предложения, используя make?Это легко сделать с Bash, но я теряю преимущества Makefiles, и использование комбинации обоих не является предпочтительным вариантом.Заранее спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Наконец-то я так и решил:

REPO_NAME=my-repo
PROJECT=my-project

update-my-repo: display-search-my-repo check-if-my-repo-exists display-my- 
repo-exists-result update-my-repo

update-my-repo:
@printf "Updating git repository - $(REPO_NAME) ..."

check-if-my-repo-exists:
    $(eval MY_REPO := $(shell git ls-remote ssh:///git-user@git-server-demo.org/$(PROJECT)/$(REPO_NAME).git 2>/dev/null|grep HEAD|cut -f2 -d'    ' 2>/dev/null))

display-search-my-repo:
    @printf "Searching for repository - $(REPO_NAME) ..."

display-my-repo-exists-result:
    @if [ "$(MY_REPO)" = "HEAD" ] ; then \
        printf "$(shell tput cub 3)[FOUND]\n";\
    fi
    @if [ "$(MY_REPO)" = "" ] ; then \
        printf "\n\n git repository - $(REPO_NAME) NOT found [ERROR]\n\n";\
        exit 2; \
    fi
0 голосов
/ 26 декабря 2018

ifneq вычисляется раньше, чем правила, поэтому вы, скорее всего, захотите:

RESULT := $(shell git ls-remote ssh://git-user@git-server-demo.org/$(PROJECT)/$(REPO_NAME).git 2>/dev/null|grep HEAD|cut -f2 -d' ' 2>/dev/null)
ifneq (,$(findstring HEAD,$(RESULT)))
$(error "git repository - NOT found\n")
endif

Т.е. определить переменную (вне любого правила make), значением которой является результат $(shell ...).И выдать ошибку make, если ее значение неожиданно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...