Работа с патчами start
Создание патча
Diff
Чтобы создать патч для проекта у вас должно быть следующее.
Перед созданием изменений для патча скопируйте папку с проектом и обзовите ее другим именем.
Например, наш проект /home/user/sysmontask.
Копируем ее в /home/user/sysmontask_patch
Совершаем изменения в папке /home/user/sysmontask_patch.
Теперь, чтобы создать патч, выполняем в консоли следующую команду:
$ diff -urN '/home/user/sysmontask' '/home/user/sysmontask_patch' > /home/user/mypatch.patch
Все изменения в файлах будут записаны в этот файл патча.
Git
При использовании Git вы можете просто внести изменения и выполнить:
$ git diff > changes.patch
Либо добавить все файлы что хотите изменить через
$ git add $ git diff --cached > changes.patch
После этого любым способом возвращаете то что было.
$ git restore .
для файлов/путей
$ git reset
для всего
Тестирование патча
Чтобы проверить патч, перейдите в каталог в который нужно его применить и выполните команду patch с ключом --dry-run:
$ patch -p0 --dry-run < '/home/user/cmake-libltdl.patch'
Применение патча при сборке пакета
Расположение файлов
Чтобы использовать патчи при сборке пакета нужно сделать следующее:
В каталоге для сборки пакета создайте произвольный каталог, например altlinux:
home └──hello <- каталог проекта ├── altlinux <- создаем каталог для патчей ├── hello ├── hello.spec ├── .gear └── .git
В нем расположите файл патча.
home └──hello <- каталог проекта ├── altlinux | └── mypatch.patch <- кидаем в каталог патчи ├── hello ├── hello.spec ├── .gear └── .git
Правка .gear/rules
В .gear/rules добавляем правило на добавление файлов патчей.
hello$ cd .gear .gear$ mcedit rules
Добавляем строки:
copy: altlinux/*.patch
Данные параметры при сборке пакета скопируют файлы патчей из папки altlinux в каталог для сборки.
Наш каталог:
home └── hello ├── altlinux ├── hello ├── .gear <- Мы сейчас здесь │ └── rules <- Мы отредактировали этот файл └── .git
Правка spec
В моменте правки спека, после строк вида:
Source: %name-%version.tar.gz # explicitly added texinfo for info files BuildRequires: texinfo
добавляем строки
Patch1: mypatch.patch
И т.д. с нужными, как нам нужно, номерами, добавляем список патчей которые мы прописали в .gear/rules. При сборке патчи будут скопированы в общую папку для сборки и поэтому их использование будет "прозрачно", без указания пути на файловой системе.
После этого в разделе %prep, после setup, добавляем строку/строки:
%patch1 -p1
где
- %patch1 - патч прописанный в спеке ранее
- параметр -p1 - срезает путь применения патча. Например, если внутри патча написано a/.gear/vendor, то с -p1 он станет .gear/vendor, а с -p2 просто vendor. Это нужно если у вас (в патче) и внутри хэшера пути различаются
Записав изменения в git и начав собирать hasher-ом вы примените изменения в код без правки кода в апстриме.