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

Попытка отправить список изменений без файлов Perforce расценивается как ошибка (p4 submit ... возвращает код выхода 1). Это приводит к сбою периодической интеграции на нашем сервере сборки (мы используем систему Pulse от Zutubi); в этом случае я бы предпочел, чтобы сборка прошла успешно, возможно, с предупреждением.

Pulse имеет функцию переотображения кода выхода, но Perforce, по-видимому, не устраняет неоднозначность между ошибкой отправки пустого списка изменений и любой другой ошибкой отправки (например, ошибкой триггера проверки, которую я хочу завершить сборкой).

Сразу очевидное (но, на мой взгляд, не элегантное) решение, которое приходит на ум, заключается в том, чтобы завершить выполнение p4 submit в пакетном файле, который сначала проверяет, является ли целевой список изменений пустым, считая строки вывода из p4 opened - или просто анализировать вывод p4 submit для сообщения "нет файлов" и успешного возврата из командного файла.

Есть ли лучшие методы для обработки этого, что я не вижу?

3 ответа

Решение

Вероятно, нет хороших методов только с 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Сообщение "no files" фактически записывает в stderr нормально. Если выводом является сообщение, которое я считаю "безопасным", я выхожу с нулевым кодом выхода, в противном случае скрипт продолжит работу с любым уровнем ошибок, установленным p4 команда.

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

Другие вопросы по тегам