2013-08-08 1 views
2

Я хочу, чтобы разработать скрипт, который будет принимать решение решимости на основе дифф куски, показанного «p4 решимости»Найти Diff куски без p4 решимости

Текущее состояние моего сценария является чем-то вроде -

p4 integ -b @ = CL # Это откроет файлы в моем CL по умолчанию.

p4 решить Теперь #It рассосется файлы, открытых в моем умолчанию CL один на один

Теперь моя проблема, с p4 решимостью, я не могу перенаправить вывод в какой-то файл и или читать Diff кусков, потому что, он показывает diff chunks для одного файла и ждет ввода пользователя для решения решения. Я хочу, чтобы сценарий принял очень очевидное решение.

Итак, есть ли способ найти фрагменты diff для файлов в моем CL по умолчанию? Так что, я могу прочитать эти куски diff во всяком случае и принять эти очевидные решения?

+2

Планируете ли вы провести анализ различий или просто применить метод разрешения? Последнее можно выполнить с помощью 'p4 resolve -as' или' -am', чтобы сделать безопасные или разрешенные слияния, доступны другие варианты. Если вы планируете проводить дальнейший анализ со сценарием, вы можете использовать 'p4 resolve -af', чтобы получить конфликты, встроенные в файлы, а затем выполнить анализ, просмотрев файлы для индикаторов конфликта (' >>> >> ',' '<<<<< ...). – gaige

+0

Спасибо за ответ gaige. То, что я пытаюсь сделать, это поймать diff-куски в виде чисел в каком-либо файле или переменных и выполнить некоторую операцию, если этот фрагмент diff не равен нулю в случае конфликта. О -af вариант, документация Perforce говорит «Принять силу. Примите файл слияния независимо от того, что. Если в файле слияния есть маркеры конфликтов, они будут оставлены, и вам нужно будет удалить их, отредактировав файл «. Это не мое требование. :) Пожалуйста, помогите ... –

+0

Причина, по которой я предположил, что '-af' должен помещать индикаторы конфликта в файл, чтобы вы могли найти конфликты. Вам придется обработать их с помощью 'grep' или другого процессора, чтобы выяснить, где конфликты. Если вы этого не сделаете, у вас нет никакого способа напрямую найти конфликты. Это, насколько мне известно, является единственным способом получить конфликты с 'p4' без ручного разрешения файлов. Вы хотели, чтобы получить конфликты, чтобы вы могли их прочитать, и «-af». Затем вы можете написать свой код, чтобы найти '<<<<<' and '> >>>>', чтобы найти и использовать конфликты. – gaige

ответ

1

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

Я заметил, удобный p4-дамп-conficts сценария JWD, основанный на том, что, возможно, следующее достаточно

echo -e "d\ns\n" | P4EDITOR=cat p4 resolve 

(т.е.получить p4 разрешить (d) iff и затем (s) kip и использовать cat для вывода результатов. Это работает для всех «ожидающих» файлов в рабочей области)

1

Да, вы можете использовать p4 resolve -n для печати того же выхода, что и p4 resolve, без запроса ввода или принятия каких-либо действий. От the p4 resolve docs:

-n Список файлов, которые необходимо устранить без фактического выполнения решительность.

+0

Но это только печатает список файлов. Он не выводит данные об ошибках или сведениях о конфликтах. – jwd

1

У меня недавно возникла аналогичная потребность и взломали решение с помощью скрипта оболочки.

Проблема в том, что p4 resolve хочет быть интерактивным, но я просто хотел увидеть конфликты в файле.

Я не хотел запускать p4 resolve -f, поскольку это означало бы файл, разрешенный в Perforce.

Я просто хотел просмотреть конфликты, возможно, отправить их кому-то другому, не делая решимости. Вы можете сделать это в интерактивном режиме с командами (e)dit и (s)kipp4 resolve, но мне нужна версия для снятия трубки.

Сохранить этот сценарий, как p4-dump-conflicts:

#!/usr/bin/env bash 

function cat_to_file() { 
    cat "[email protected]" > "$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, как хотите, а затем использовать результаты этого для окончательного разрешения слияния.