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.
Это работает с различными типами спецификаций (пользователь, клиент, поток и т. д.).