Как я могу предотвратить отправку пустого списка изменений Perforce от ошибки?
Попытка отправить список изменений без файлов считается волей-неволей ошибкой (p4 submit ...
возвращает код выхода 1). Это приводит к сбою периодической сборки интеграции на нашем сервере сборки (мы используем импульсную систему Zutubi); в этом случае я бы предпочел, чтобы сборка завершилась успешно , возможно, с предупреждением.
Pulse имеет функцию переназначения кода выхода, но волей-неволей не возникает двусмысленности между отказом отправить пустой список изменений и любым другим подать недостаточность (такую проверку инициировать отказ, который я не хотите не строить).
Сразу же очевидное (но, на мой взгляд, неэлегантное) решение, которое приходит на ум, заключается в том, чтобы обернуть выполнение p4 submit
в пакетный файл, который сначала проверяет, является ли целевой список изменений пустым, подсчитывая строки вывода из p4 opened
- или просто разбирая вывод p4 submit
для сообщения "нет файлов" и успешно возвращаясь из пакетного файла.
Существуют ли лучшие методы для справляешься с тем, чего я не вижу?
3 ответа:
Вероятно, нет хороших методов только с помощью силы, если я правильно понимаю вашу проблему. Проблема, как вы уже видели, заключается в том, что коды возврата из командной строки 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
.