На данный момент проверена версия каталога / файла в исполнении - PullRequest
2 голосов
/ 04 апреля 2011

Я пытаюсь автоматизировать некоторые сборки для сохраняемого проекта.Я хотел бы извлечь текущий номер списка изменений, чтобы пометить версию сборки.

Эта команда:

p4 changes -s submitted  ...  | head -1

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

Есть ли способ получить номер списка изменений, который был недавно синхронизирован с списком изменений?

Примечание: я имею опыт работы с CVS / git, поэтому моя терминология может быть отключена.

Ответы [ 6 ]

3 голосов
/ 05 апреля 2011

Попробуйте запустить 'p4 cstat ...'. Это скажет вам, для каждого списка изменений, который влияет на набор файлов в «...», есть ли у вас этот список изменений, нужен ли он или частично синхронизирован.

2 голосов
/ 27 марта 2013

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

С помощью следующей команды вы увидите список всех изменений, не синхронизированных с вашим клиентом:

p4 changes ..."#>have" 

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

echo $((`p4 changes ..."#>have" | tail -1 | awk '{print $2}'`-1))
2 голосов
/ 13 декабря 2011

Я согласен с подходом "p4 cstat".

Я использую это как: p4 cstat | p4-version.awk это следующий скрипт:

 #! /usr/bin/awk -f

 # The input format is:
 # ... change 654056
 # ... status have|need|partial


 # So what we do:
 # find the first "need" or "partial"

 # and we might add +N as the number of other changes we have

 # Major is never 0. Hence End is set only once, to a non-zero.

 # Note: it's assumed that 0 is not a valid P4 changelist.
 # so  0+1-1 means: no entire changelist (i.e. the initial one)
 # has been (entirely) synced.

 # major is the last p4 CL processed
 # end   is the last CL, up to which _fully_ synced.
 # plus/minus  additional/missing CLs.

 BEGIN {end=0; contiguous=1; plus=0; minus=0}

 /^... change ([0-9])+/ {
         change=$3;
 };


 # we have 2 states: 1/ until now all have -- contiguous=1
 #                   2/ already something not "have"

 # (end=0) state 1

 /^... status have/ {
         if (!contiguous)
                  plus++;
         else
           end=change;
 };


 /^... status (partial|need)/ {
         minus++;
         if (contiguous) {
                 contiguous = 0;
         };
 }


 END {
         if (!contiguous)
                 printf "%d+%d-%d\n", end, plus, minus;
         else
                 printf "%d\n", end;
 }
1 голос
/ 04 апреля 2011

Чтобы найти последний список изменений на вашем клиенте, используйте эту команду:

p4 changes -m 1 @name_of_your_client_here

Имена клиентов могут действовать как метки.

0 голосов
/ 04 апреля 2011

То, что вы хотите, это 'haveRev' вашего файла:

rev = `p4 fstat -T haveRev <filename>|cut -d' ' -f3`

, и тогда вы можете посмотреть номер изменения следующим образом:

p4 filelog <filename>|grep $rev|cut -d' ' -f4

Обратите внимание, что я использовал определенныйфайл извлеченного дерева.

0 голосов
/ 04 апреля 2011

Я думаю, что следующее будет делать то, что вы хотите:

p4 fstat -T headChange ... | cut -d' ' -f3 | sort -nr | head -1

p4 fstat действительно хорош тем, что он требует не только фильтра (с помощью опции -F), но и параметра выбора поля (с помощью опции -T).

...