Волей-неволей: как узнать, есть ли какие-то изменения внутри ветки при определенной ревизии?

#perforce #perforce-integrate #perforce-stream

Вопрос:

Это непростой вопрос, поэтому я постараюсь объяснить его на упрощенном примере…

У нас есть 2 филиала (потенциально больше): main и dev . Разработка выполняется в dev , si она получает несколько CLS. Время от времени мы полностью dev интегрируемся main : мы берем все внесенные изменения dev и помещаем их main в один полностью интегрированный CL.

   dev   main
   │      │
 W ├─────►│ A full integrate W
   │      │
 X ├─────►│ B full integrate X
   │      │
 Y │      │
   │      │
 Z ├─────►│ C full integrate Y and Z
   │      │
 

Теперь я хочу знать, есть ли у меня Y main доступ к определенному Кл. Например:

  • есть ли у меня Y в main@A : НЕТ
  • есть ли у меня Y в main@B : НЕТ
  • есть ли у меня Y в main@C : ДА

Мне нужна командная строка, которая даст мне этот результат. До сих пор я использую :

 p4 integrate -n "//dev/...@Y,@Y" //main/...
 

Потому что он пытается интегрироваться Y main и говорит, нужно ли что-то делать или нет. Если нет, то у нас уже есть изменения, ничего не поделаешь.

Проблема в том, что с помощью этой команды , как только Y она будет интегрирована main , она всегда будет говорить, что она здесь, так как мы не можем предоставить CL для целевой ветви main

Ответ №1:

Используйте -C флаг, чтобы p4 integrate . -C Флаг ограничивает рассматриваемые записи интеграции теми, которые

Например:

 p4 integ -n -C B //dev/...@Y,Y //main/...  # no
p4 integ -n -C C //dev/...@Y,Y //main/...  # yes
 

Видеть p4 help undoc :

     p4 integrate -1 -2 -C changelist# -Rlou -Znnn
        ... The -C
        changelist# flag considers only integration history from changelists
        at or below the given number, allowing you to ignore credit from
        subsequent integrations. ...
 

Комментарии:

1. Большое спасибо, я пропустил это в документе… Хотя, кажется, это хорошо работает для примера , который я показываю, но, похоже, это не работает для этой проверки: p4 integrate -n -C Y //main/...@C,@C //dev/... , где я хочу знать, есть ли у dev@Y меня все CLS от main@C

2. Странный крайний случай есть-учитывая то, что Y < C я ожидал, что команда должна сказать вам, не так как она должна быть фильтрация по Z -> Интеграция c, что даст обратный кредита, однако вы должны быть в состоянии просто взять его без выполнения команды, так как это, очевидно, не удается получить кредит на что-то, что еще не произошло. 🙂