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

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

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

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

Есть ли более эффективные методы решения этой проблемы, которых я не вижу?


person Community    schedule 17.02.2011    source источник
comment
Нет, но я мог бы, если бы это решило проблему (я ничего о них не знаю).   -  person    schedule 18.02.2011
comment
Еще одна причина использовать что-то помимо Perforce сейчас, когда наступил 2015 год.   -  person Kuberchaun    schedule 03.02.2015


Ответы (3)


Вероятно, нет хороших методов только с Perforce, если я правильно понимаю вашу проблему. Проблема, как вы видели, в том, что коды возврата из принудительного запуска командной строки, ну, неоднозначны. Действительно ли отправка пустого списка изменений является ошибкой? Может быть, а может и нет - может зависеть от того, кого вы спросите.

На самом деле не рекомендуется смотреть на коды возврата из команд 'p4'. Лучше всего, как вы предложили, проанализировать вывод команды, а затем сделать оттуда то, что вам нужно.

Большинство команд теперь поддерживают параметр -ztag (см. «Использование справки p4»), который может немного упростить синтаксический анализ вывода, в зависимости от того, что вы хотите сделать. В вашем случае, вероятно, достаточно просто поискать текст в выводе, а затем решить, что оттуда делать.

person Mark    schedule 18.02.2011

Прежде чем пытаться отправить список изменений, вы можете сначала попытаться удалить его.

p4 change -d ###

Эта операция будет успешной только в том случае, если список изменений пуст, поэтому не отправляйте его (вы только что удалили его). Если это не удается, значит, в списке изменений есть файлы, поэтому отправьте их.

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

person raven    schedule 17.02.2011

В конечном итоге я проанализировал вывод в пакетном файле, используя что-то вроде этого:

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.

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

person Community    schedule 07.11.2014