LINUX.ORG.RU

[как?] синтаксис patch


0

1

Изобретаю очередной лисапед, где надо патчить файлы скинов. Хочется делать патчинг стандартной тулзой. Есть 2 вопроса:

1. Как в патче задать, что он должен просто доклеить новые данные в конец файла? В доке нашел только поиск по номерам строк и паттернам - не то.

2. Если на один файл накладывается несколько патчей, как обычно задают приоритет? То, что можно в имена патчей циферьки вставить, догадался. Но может есть способы красивее?

★★★★★

Последнее исправление: Vit (всего исправлений: 1)

1. patch он же с diff связан.
Берёшь исходный файл, делаешь копию, добавляешь в копию нужные строки, делаешь diff <исходный файл> <новый_файл> > patch.
Всё, патч на месте. Там всё как надо. Остаётся там где надо наложить патч сделать patch <старая версия> <патч>

Или я что-то не так говорю?

adriano32 ★★★
()
Ответ на: комментарий от adriano32

Если так сделать diff, он будет привязан к конерктной строке. А мне надо чтобы _несколько_ патчей просто дописали _в_конец_ файла новое содержание.

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

нужен именно патч?
может просто скрипт?
или посмотри patch-utils
там были какие-то вкусности - может и это есть...

megabaks ★★★★
()

1 невозможно (патч, который можно наложить на любой файл - это уже не птч); 2 - просто за рамками утилиты patch.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Сенькс. Жалко. Хотел одной утилитой и единым форматом выкрутиться. В принципе можно цепляться за последнюю/первую строчку, но проблема в том, что исходный файл может быть пустым.

Может перед патчем автоматически заколбасить маркеры типа ## BEGIN ## / ## END ## ? Или это криво?

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

> Может перед патчем автоматически заколбасить маркеры типа ## BEGIN ## / ## END ## ?

Технически вполне возможно хранить какие-нибудь метаданные в начале патча (перед первой секцией diff), но для накладывания таких «патчей» уже придется наклепать свой инструмент (который, впрочем, будет в основном вызывать тот же patch).

Или это криво?

Зависит от точки зрения. Линус ничтоже сумняшеся расширил формат патча для git.

tailgunner ★★★★★
()

распространять патчи вместе с Makefile который будет предварительно подсчитывать кол-во строк в файле и соответствующим образом менять сам патч, а также накладывать патчи в определенном порядке?

val-amart ★★★★★
()

--ed не поможет?

Led ★★★☆☆
()
Ответ на: комментарий от tailgunner

Решил пока прямо в начало патч-файла воткнуть метки ##BEGIN## / ##END##. Если их нет, то прогоняется патчером, если есть - то просто доклеивается.

Косенько, но я точно знаю, что другие фичи не понадобятся + эта химия нужна очень редко. Поэтому сойдет :)

Вот такая хрень вышла: https://github.com/nodeca/nodeca/blob/master/docs/specs/skin_system.md

Vit ★★★★★
() автор топика
Ответ на: комментарий от Vit

В вашем случае проще использовать сед :)

Jetty ★★★★★
()
Ответ на: комментарий от tailgunner

Линус ничтоже сумняшеся расширил формат патча для git.

Вроде же --git ничем особо не отличается?

Pavval ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.