Развернуть unified diff

Ivan8209

Есть "diff -u A B".
Где нарыть иструмент для получения "diff -u B A" по тому, что есть?
Писать это самому не очень хочется.
---
...Я работаю антинаучным аферистом...

poi1981

а вдруг инструмент окажется(а он наверняка окажется) поддерживающим недостаточное количество платформ? пиши уж сам, оно надёжней

Ivan8209

Достаточно, чтобы работал под БСД.
---
...Я работаю антинаучным аферистом...

poi1981

что ты такое говоришь то, очевидно, что этого совершенно не достаточно

vall

зачем? у patch же есть реверс

Ivan8209

Чтобы не сбивать с толку менее грамотного оператора,
чтобы заставить patch не писать лишние предупреждения.
Хотя... Ладно.
У меня и так есть все версии, просто не хочется делать лишнюю работу, если её можно обойти,
diff ведь выдаёт обратимый результат, поэтому хотелось узнать, есть ли готовые решения.
---
...Я работаю антинаучным аферистом...

sergey_m

Можно поменять плюсы на минусы и поменять местами номера строк. Если есть наличие A или B, то можно пропатчить и снять новый diff.

Ivan8209

> Можно
Это решение чуть длиннее, чем "wget this && tar zxf this && ./configure --prefix=here && make install clean".
К тому же, в нагрузку шли бы ещё какие-нибудь полезные вещи.
---
...Я работаю антинаучным аферистом...

vall

есть patchutils но он такого не умеет

shlyumper

некрасиво, конечно, но:

cat patchfile-ab | perl -pe 'BEGIN { $l = 0; } chomp; if(++$l > 2) { s/^([\+-].*)$/$_ = $1; tr{+-}{-+}; "$_$2"/e; s/^\@\@ (.*) (.*) \@\@$/$a = $1; $_ = $2; $a =~ tr{+-}{-+}; tr{+-}{-+}; "\@\@ $_ $a \@\@" /e; } $_ .= "\n"' > patchfile-ba

Ivan8209

> perl -pe
Я дошёл досюда и мне всё это очень разонравилось.
В общем, я тогда уж лучше сам напишу.
Хотя за попытку спасибо.
---
"Верь сводке погоды, но доверяй --- интуиции.
Будь особенно бдителен, когда всё хорошо и нет поводов для тревоги."

shlyumper

> perl -pe
Я дошёл досюда и мне всё это очень разонравилось.
Почему?
Ну хорошо, тогда

gawk 'function sw(a) { if(a == "-") return "+"; else return "-" } /^(-|+)/ { if(FNR > 2) { print sw(substr($0,1,1 substr($0, 2) } else print } /^@@/ { print $1, sw(substr($3,1,1 substr($3,2 sw(substr($2,1,1 substr($2, 2 $4 } !/^(-|+|@@)/ { print }' patch-ab > patch-ba

sergey_m

> g
я дошёл до сюда и мне разонравилось
Оставить комментарий
Имя или ник:
Комментарий: