Как я могу предотвратить отправку пустого списка изменений 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
команда.
Обратите внимание, что сообщение "нет файлов" для нумерованного списка изменений немного отличается, если вы его используете.