Как предотвратить возникновение ошибки при отправке пустого списка изменений Perforce?

StackOverflow https://stackoverflow.com/questions/5032688

Вопрос

Попытка отправить список изменений без файлов рассматривается 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 команда.

Обратите внимание, что сообщение «нет файлов» для пронумерован список изменений немного отличается, если вы его используете.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top