Как применить патч Perforce? - PullRequest
       16

Как применить патч Perforce?

15 голосов
/ 24 февраля 2012

Я сгенерировал патч некоторое время назад с помощью команды p4 diff.

Однако теперь, когда я хочу его применить, я понимаю, что в Perforce нет способа применить патч.

Поскольку я не использовал опцию -du, патч находится в этом непонятном формате исполнения и не может быть применен с patch(1).Первоначальные изменения были потеряны.Кроме того, этот патч имеет длину более 300 КБ, поэтому ручное редактирование на самом деле не вариант.

Какие у меня варианты?Существуют ли конвертеры патчей или какое-либо расширение Perforce, позволяющее применять патчи такого типа?

Ответы [ 3 ]

7 голосов
/ 09 июля 2016

Возможно, формат вывода Perforce изменился, но ответ @ RumburaK у меня не сработал.

Мне пришлось изменить его, чтобы преобразовать заголовок ==== в формат +++ и --- заголовка diff.

sed -Ee 's|==== (//.*)#[0-9]+(.*)|+++ \1\n--- \1|' < infile.txt > outfile.txt

infile.txt был создан с помощью следующей команды (где 12335 был отложенный список изменений): p4 describe -du -S 12345

outfile.txt был применен с помощью следующей команды: patch -p3 -l < outfile.txt

2 голосов
/ 28 ноября 2012

Только что нашел ваш вопрос после сохранения некоторых моих изменений в патче и их отмены для проверки оригинального кода ...

Если вы используете приличный эмулятор терминала, на этот разОперация может занять около часа.

Хорошо, что вы не можете сталкиваться с этим ежедневно, так как вы, вероятно, теперь будете использовать "-du", по крайней мере,я уверен, что буду.Просто скопируйте и вставьте имя файла в соответствии с запросом:

$ patch -i cucu.diff 
can't find file to patch at input line 2
Perhaps you should have used the -p or --strip option?
The text leading up to this was:
--------------------------
|==== //depot/foo/boo.cpp#1 - /home/who/perforce/foo/boo.cpp ====
--------------------------
File to patch: 

<double-click!> to copy
<middle-click!> to paste

File to patch: /home/who/perforce/foo/boo.cpp <CR>

Возможно, в патче будет 100 файлов ... продолжайте нажимать: -)

Если вы ищете субстратвыражение (vim, sed):

s/.* - \(.*\) ====/+++: \1/

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

0 голосов
/ 09 июля 2016

Другой ответ: команда p4 diff2 поддерживает флаг -u для генерации различий в формате GNU diff.

От p4 help diff2:

Флаг -u используетформат diff -u GNU и отображает только файлы, которые отличаются.Имена файлов и даты имеют синтаксис Perforce, но выходные данные могут использоваться программой исправления.

...