Perforce: есть ли команда, чтобы проверить, существует спецификация клиента или нет

На самом деле мне нужно написать один пакетный скрипт, во-первых, мне нужно проверить, существует ли требуемая спецификация клиента или нет? Если существует, то я должен удалить его.

Не могли бы вы дать нам знать, как мы можем проверить в скрипте, существуют ли требуемые спецификации клиента или нет?

6 ответов

В командной строке Windows вы можете сделать что-то вроде этого

set P4CLIENT=client-name
p4 clients -e %P4CLIENT% | findstr %P4CLIENT% >nul

p4 clients -e %P4CLIENT% выведет всех клиентов, соответствующих %P4CLIENT%, findstr будет искать вывод p4 clients для имени клиента и распечатать его. Перенаправление на к nul подавит этот вывод, но findstr дополнительно установит %errorlevel% переменная.

Некоторые примеры:

p4 clients -e existing-client | findstr existing-client >nul
echo %errorlevel%

Вернет 0.

p4 clients -e does-not-exists | findstr does-not-exists >nul
echo %errorlevel%

Вернется 1.

Если вы хотите что-то выполнить, если данное клиентское пространство не существует, вы можете выполнить эту команду:

p4 clients -e does-not-exists | findstr does-not-exists >nul || create-client.bat

Если вы хотите что-то выполнить, если заданное клиентское пространство существует, вы можете выполнить эту команду:

p4 clients -e does-not-exists | findstr does-not-exists >nul && do-something.bat

Спасибо Адаму от поддержки онлайн-чата!

Я обнаружил, что эта команда работает:

p4 -ztag clients -e bad

ничего не возвращается, если клиент не существует

Пытаться:

p4 client -o -t $CLIENT_NAME_YOU_WANT_TO_CHECK

Что это делает - пытается создать клиента из спецификации другого клиента в качестве шаблона для моего "нового клиента".

Если есть вывод (то есть $CLIENT_NAME_YOU_WANT_TO_CHECK действительно существует) - он будет отображать свою спецификацию в виде текста для STDOUT без входа в редактор, а если клиент не существует - он просто выводит в STDERR:

Client '$CLIENT_NAME_YOU_WANT_TO_CHECK' doesn't exist.

"-O" выводит его на экран вместо того, чтобы фактически создавать клиента... хороший трюк, делает работу за меня, надеюсь, это поможет:)

Сделать p4 client -o client_name и проверьте наличие полей Update: или Access:. Они будут установлены для клиента, который уже существует, но не для клиента, который не существует.

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

p4 -ztag -F "%Update%" client -o client_name либо вернет строку с датой и временем для существующего клиента, либо ничего для несуществующего.

По вашим комментариям я вижу, что вы нашли решение, но вот еще один вариант...

Если вы хотите удалить клиента с таким именем, вы можете сохранить вызов p4 clients просто пытаясь удалить клиента. Если он существует, он будет удален (если у него нет отложенных файлов и т. Д.). Если этого не существует, то это неоперация - без вреда, без фола.

Совет: используйте--existsфункция с-o.

Например, попробуйте:p4 client --exists -o SomeWorkspace

ЕслиSomeWorkspaceсуществует в базе данных, вы увидите спецификацию клиента и код выхода 0.

Если этого не произойдет, вы получите ненулевой код выхода и сообщение об ошибке, например:

Client 'SomeWorkspace' doesn't exist.

Это работает с различными типами спецификаций (пользователь, клиент, поток и т. д.).

Другие вопросы по тегам