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


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

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

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

Существуют ли лучшие методы для справляешься с тем, чего я не вижу?

3 6

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.

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