Как я могу отслеживать ветки CL в нескольких потоках с помощью скрипта

Я пытаюсь создать скрипт (если возможно), который может получить конкретный CL из perforce и перечислить потоки или ветки, в которые он был интегрирован, а также CL этой интеграции и, возможно, некоторые другие детали (например, пользователь проверки в или история файлов)

Я просматривал некоторые документы P4 и пока ничего не нашел... Так что интересно, есть ли у кого-нибудь опыт в этой области.

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

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

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

Спасибо!


person Eddie Stubbington    schedule 24.07.2019    source источник


Ответы (1)


Команда, на которой вы хотите основывать свой скрипт, — p4 filelog. Запуск filelog для конкретной ревизии сообщает вам, из каких ревизий она была интегрирована и в какие:

C:\Perforce\test>p4 filelog @=117
//stream/main/mob/nextproject/custom/configuration
... #2 change 117 integrate on 2019/02/22 by Samwise@Samwise-dvcs-1509687817 (text) 'tada'
... ... merge from //stream/main/mob/project/configuration#2

Вы можете сделать это рекурсивно:

C:\Perforce\test>p4 filelog //stream/main/mob/project/configuration#=2
//stream/main/mob/project/configuration
... #2 change 116 edit on 2019/02/22 by Samwise@Samwise-dvcs-1509687817 (text) 'foo'
... ... merge into //stream/main/mob/nextproject/custom/configuration#2

Revision Graph делает это в одном файле, что очень просто. Делать это на основе списка изменений немного сложно, если только вы не сделаете некоторые упрощающие предположения — список изменений может быть частично интегрирован (т. е. не все его ревизии будут интегрированы), но если вы просто предполагаете, что этого никогда не произойдет, тогда вы можете просто построить кучу графиков изменений и объединить их вместе с помощью общего списка изменений.

person Samwise    schedule 24.07.2019
comment
Спасибо за ответ. Как бы вы предложили сделать это с возможностью частичной интеграции? - person Eddie Stubbington; 24.07.2019
comment
Это настолько сложнее, что я искренне рекомендую не пробовать. (Для контекста я написал как Revision Graph, так и логику интеграции на стороне сервера, когда работал в Perforce.) Однако, если вы хотите попробовать это, начните с команды undoc integ -C, чтобы определить, была ли историческая интеграция был полным. Затем будьте готовы обнаружить и обработать кучу крайних случаев. :D - person Samwise; 24.07.2019
comment
Спасибо за эту информацию! Как бы вы предложили вырезать все ненужные данные? Например, я хочу ввести указанную выше команду, но просто перейти. Это изменение присутствует в основной линии и не было интегрировано в X, Y и Z. Его можно найти на B в CL выше 5. - person Eddie Stubbington; 24.07.2019
comment
Короткий ответ — написать сценарий. :) Я не думаю, что смогу псевдокодировать все это в пространстве комментария, но, как указано в ответе, вы хотите использовать p4 filelog для построения графика взаимосвязей интеграции для интересующих вас ревизий. in. Отсюда выяснение того, что находится ниже по течению от этого узла, является очень простым обходом графа, а получение желаемого результата - это просто вопрос сопоставления и форматирования. - person Samwise; 24.07.2019