#perforce
#Волей-неволей
Вопрос:
Учитывая номер списка изменений, я хочу найти локальный путь ко всем файлам в этом списке ожидающих изменений.
- p4 описывает список изменений — возвращает мне путь к хранилищу для файлов в списке изменений (метод 1)
- p4 открыл -c changelist — возвращает мне путь к хранилищу для файлов в списке изменений (метод 2)
- p4 имеет — возвращает мне путь к хранилищу и локальный путь для всех файлов, которые были отправлены ранее
Используя комбинацию p4 describe и p4 have, я могу найти локальные пути для всех файлов в списке изменений, которые ранее были отправлены в Perforce (и открыты для удаления или редактирования).
Но как насчет файлов, которые открыты для добавления? p4 have ничего не знает о файлах, которые открыты для добавления.
Учитывая список ожидающих изменений, как мне найти локальный путь для файлов, которые будут добавлены в Perforce?
Ответ №1:
Для вывода локального пути ко всем ожидающим добавлениям списка изменений вы можете использовать:
p4 opened -c changelist | grep -w add | sed 's/#.*//'
| p4 -x - where | awk '/^// {print $3}'
Это делает то же самое без grep, но немного более неясно:
p4 opened -c changelist | sed -n 's/(.*)#.*- add .*/1/p'
| p4 -x - where | awk '/^// {print $3}'
Комментарии:
1. Спасибо за решение. С «p4 where» следует отметить одну вещь — если файл сопоставляется несколько раз в спецификации клиента, то «p4 where» неверно вернет первое сопоставление вместо последнего сопоставления, в котором файл действительно оказался.
2. Это звучит как ошибка,
p4 where
предполагается, что это следует за представлением клиента. Если у вас есть служба поддержки, отправьте сообщение об ошибке в perforce.3. Связана ли проблема с
{print $3}
?4. @tenpn, спасибо, что снова привлек к этому внимание. Я, наконец, попробовал несколько сопоставлений самостоятельно.
p4 where
в этом случае выводится несколько строк, и только та, которая начинается с ‘//’, является правильной. Я исправил свой ответ для этого случая.
Ответ №2:
Вы могли бы, конечно, также использовать
p4 -ztag opened -c changelist
Это приведет к сообщению как о файле Depot, так и о файле clientFile для каждого открытого файла.
Для отображения только клиентских файлов:
p4 -ztag opened -c changelist | grep clientFile | awk '{print $3}'
Замена //client / корневым каталогом клиента оставлена в качестве упражнения для читателя.
Комментарии:
1. Помните, что awk поддерживает grep, поэтому вы можете сократить это до:
p4 -ztag opened -c changelist | awk '/clientFile/ {print $3}'
Ответ №3:
Локальный путь для всех файлов в списке ожидающих изменений без каких-либо внешних инструментов или инструментов, зависящих от платформы:
p4 -F %clientFile% fstat -Ro -F action=add [-e CHANGE] //...
Удалите ‘-F action=add’, если вы хотите, чтобы файлы открывались для всех действий.
Ответ №4:
p4 opened -s -c <changelist#> | awk -F " " '{print $1}' | p4 -x - where | awk -F " " '{print $3}'
Комментарии:
1. Из всех опубликованных ответов это единственный, который действительно работает для меня. Спасибо.
Ответ №5:
Основано на ответе Питера Джи, переведенном на powershell 2.0:
p4 opened -c changelist
| Where-Object{$_ -match "add"}
| ForEach-Object{p4 where ($_.split('#')[0])}
| ForEach-Object{$_.split()[2]}