Как я могу предотвратить отправку пустого списка изменений Perforce в качестве ошибки? - PullRequest
6 голосов
/ 17 февраля 2011

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

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

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

Существуют ли более эффективные методы для обработки этого, которых я не вижу?

Ответы [ 3 ]

5 голосов
/ 17 февраля 2011

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

p4 change -d ###

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

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

3 голосов
/ 18 февраля 2011

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

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

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

0 голосов
/ 07 ноября 2014

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

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.

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

...