Здравствуйте. У меня была самая банальная потребность, с помощью batch скрипта, обновлять локальный репозиторий git и в случае какой-либо ошибки возвращать лог и код ошибки. Но я натолкнулся на такую очень странную ситуацию:
Команда git возвращает ошибку (IF ERRORLEVEL 1 = TRUE, то есть код ошибки >= 1, то есть != 0), но при этом код ошибки - echo %errorlevel% выводит "0".
Пробовал другой метод проверки, использовал логическое ИЛИ (то есть выполнить вторую часть, только если предыдущая вернула ошибку, оператор "||" ) и то же самое.
Поэтому возникает несколько вопросов:
1) сам код ошибки мне не так важен, но из-за этого я сомневаюсь в том, можно ли в качестве проверки использовать "IF ERRORLEVEL 1" ? Надёжно это?
2) Есть ли какой-то способ всё-таки получить код ошибки?
3) Как такое вообще возможно?!
Все эти варианты выводят "ERRORCODE_IS_0":
git checkout master && git remote update -p && git merge --ff-only
IF ERRORLEVEL 1 echo ERRORCODE_IS_%errorlevel%
git checkout master && git remote update -p && git merge --ff-only || echo ERRORCODE_IS_%errorlevel%
Ошибку генерю просто: невозможность fast-forward'а. Вот собственно вывод команды:
Already on 'master'
Your branch and 'origin/master' have diverged,
and have 14 and 19 different commits each, respectively.
(use "git pull" to merge the remote branch into yours)
Fetching origin
fatal: Not possible to fast-forward, aborting.
ERRORCODE_IS_0