Как предотвратить возникновение ошибки при отправке пустого списка изменений Perforce?
-
14-11-2019 - |
Вопрос
Попытка отправить список изменений без файлов рассматривается Perforce как ошибка (p4 submit ...
возвращает код выхода 1).Это приводит к сбою периодической интеграционной сборки на нашем сервере сборки (мы используем Импульсная система Зутуби); в этом случае я бы предпочел, чтобы сборка прошла успешно, возможно, с предупреждением.
В Pulse есть функция переназначения кода завершения, но Perforce, похоже, не устраняет неоднозначность между сбоем отправки пустого списка изменений и любым другим сбоем отправки (например, сбоем триггера проверки, который я делать хочу провалить сборку).
Сразу очевидное (но, на мой взгляд, неэлегантное) решение, которое приходит на ум, — обернуть выполнение p4 submit
в пакетном файле, который сначала проверяет, пуст ли целевой список изменений, подсчитывая строки вывода из p4 opened
-- или просто анализируем вывод p4 submit
для сообщения «нет файлов» и успешного возврата из командного файла.
Есть ли лучшие методы решения этой проблемы, которых я не вижу?
Решение
Вероятно, нет хороших методов только с Perforce, если я правильно понимаю вашу проблему.Проблема, как вы видели, заключается в том, что коды возврата при запуске командной строки perforce неоднозначны.Действительно ли отправка пустого списка изменений является ошибкой?Может быть, а может и нет — может зависеть от того, кого вы спросите.
На самом деле нецелесообразно смотреть коды возврата команд «p4».Лучше всего, как вы предложили, проанализировать вывод команды, а затем сделать то, что вам нужно.
Большинство команд теперь поддерживают опцию -ztag (см. «Использование справки p4»), которая будет мог упростите анализ вывода, в зависимости от того, что вы хотите сделать.В вашем случае, вероятно, достаточно просто найти текст в выводе, а затем решить, что делать дальше.
Другие советы
Прежде чем отправлять список изменений, вы можете сначала попытаться удалить его.
p4 change -d ###
Эта операция завершится успешно только в том случае, если список изменений пуст, поэтому не отправляйте его (вы только что удалили его).Если это не удастся, в списке изменений есть файлы, поэтому отправьте их.
Однако если вы используете задания, это не сработает, поскольку вы не сможете удалить список изменений, к которому прикреплено задание, даже если он пуст.
В конечном итоге я проанализировал вывод в пакетном файле, используя что-то вроде этого:
for /f "delims=" %%I in ('p4 submit -d "<message>" 2^>^&1 1^>NUL') do
set SUBMIT_OUTPUT=%%I
if "%SUBMIT_OUTPUT%"=="No files to submit from the default changelist." exit /b 0
Это необходимо, поскольку p4
Сообщение «нет файлов» на самом деле нормально записывается в stderr.Если вывод представляет собой сообщение, которое я считаю «безопасным», я выхожу с нулевым кодом завершения, в противном случае сценарий продолжит работу с тем уровнем ошибки, который был установлен p4
команда.
Обратите внимание, что сообщение «нет файлов» для пронумерован список изменений немного отличается, если вы его используете.