Найти фрагменты различий без разрешения p4
Я хочу спроектировать сценарий оболочки, который будет принимать решение о разрешении на основе фрагментов различий, показанных как 'p4 resol'
Текущее состояние моего сценария выглядит примерно так:
p4 Integ -b @=CL # Это откроет файлы в моем CL по умолчанию.
p4 resol # Теперь он будет разрешать файлы, открытые в моем CL по умолчанию, один за другим.
Теперь моя проблема заключается в том, что при разрешении p4 я не могу перенаправить его вывод в какой-либо файл и / или прочитать чанки diff, потому что он показывает чанки diff для одного файла и ожидает ввода данных от пользователя для принятия решения. Я хочу, чтобы сценарий принял очень очевидное решение.
Итак, есть ли какой-нибудь способ найти блоки diff для файлов в моем CL по умолчанию? Так что, я все равно могу читать эти блоки различий и принимать эти очевидные решения?
3 ответа
Я хотел сделать что-то подобное; вывести фактические конфликты в задании Jenkins, чтобы информация могла быть отправлена соответствующему разработчику.
Я заметил удобный скрипт p4-dump-conficts от jwd, основываясь на этом, возможно, достаточно следующего
echo -e "d\ns\n" | P4EDITOR=cat p4 resolve
(то есть получить разрешение p4 для (d)iff, а затем (s)kip и использовать cat для вывода результатов. Это работает для всех "ожидающих" файлов в рабочей области)
У меня недавно была похожая потребность, и я взломал решение с помощью сценария оболочки.
Проблема для меня заключалась в том, что p4 resolve
хочет быть интерактивным, но я просто хотел увидеть конфликты в файле.
Я не хотел бежать p4 resolve -f
так как это пометит файл как разрешенный в Perforce.
Я просто хотел посмотреть на конфликты, возможно, отправить их кому-нибудь по электронной почте, не решая. Вы можете сделать это в интерактивном режиме с (e)dit
а также (s)kip
команды p4 resolve
, но я хотел автоматическую версию.
Сохранить этот скрипт как p4-dump-conflicts
:
#!/usr/bin/env bash
function cat_to_file() {
cat "$@" > "$OUTFILE"
}
export -f cat_to_file
destFileName=$(dirname "$1")/CONFLICTS_$(basename "$1")
OUTFILE="$destFileName" P4EDITOR=cat_to_file p4 resolve "$1" <<END_INPUT
e
s
END_INPUT
Если вы бежите p4-dump-conflicts myfile
, выпишу CONFLICTS_myfile
, содержащий маркеры конфликта. Тем не менее, файл не будет разрешен в Perforce.
Примечание: работает только для одного файла, как есть.
В частности, для вашего вопроса вы можете обработать файл CONFLICTS_xxx так, как хотите, а затем использовать его результаты для окончательного разрешения слияния.
Да, вы можете использовать p4 resolve -n
напечатать тот же вывод, что и p4 resolve
без запроса ввода или каких-либо действий. Из p4 разрешите документы:
-n
Перечислите файлы, которые необходимо разрешить без фактического выполнения разрешения.