Работа с патчами start

Материал из ALT Linux Wiki
Stub.png
Данная страница находится в разработке.
Эта страница ещё не закончена. Информация, представленная здесь, может оказаться неполной или неверной.
Внимание! Страница в процессе написания!

Создание патча

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-ом вы примените изменения в код без правки кода в апстриме.