Волей-неволей, как мне найти локальный путь для файлов в списке ожидающих изменений?

#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]}