Работа с патчами start: различия между версиями
Нет описания правки |
|||
(не показано 6 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
{{ | ==О патче== | ||
{{ | Патч имеет вид: | ||
<syntaxhighlight lang="yaml"> | |||
diff --git a/tde-tdelibs/CMakeLists.txt b/tde-tdelibs/CMakeLists.txt | |||
--- a/tde-tdelibs/CMakeLists.txt | |||
+++ b/tde-tdelibs/CMakeLists.txt | |||
@@ -13,6 +13,7 @@ | |||
##### set project version ######################## | |||
include( TDEVersion ) | |||
+include_directories(/usr/share/libtool-2.4/libltdl) | |||
cmake_minimum_required( VERSION ${TDE_CMAKE_MINIMUM_VERSION} ) | |||
tde_set_project_version( ) | |||
</syntaxhighlight> | |||
*{{cmd|diff --git a/tde-tdelibs/CMakeLists.txt b/tde-tdelibs/CMakeLists.txt}} - указывает файлы для сравнения | |||
*{{cmd|--- a/tde-tdelibs/CMakeLists.txt}} - исходный файл | |||
*{{cmd|+++ b/tde-tdelibs/CMakeLists.txt}} - конечный файл | |||
*{{cmd|@@ -13,6 +13,7 @@}} - цифры {{cmd| -13,6 +13,7}} означают следующее: перейти к строке 13; было строк 6, стало 7. Учитывайте это если вдруг, ну мало ли, захотите подправить патч вручную. | |||
*{{cmd|+include_directories(/usr/share/libtool-2.4/libltdl)}} - изменение | |||
==Создание патча== | ==Создание патча== | ||
===Diff=== | |||
Чтобы создать патч для проекта у вас должно быть следующее. | Чтобы создать патч для проекта у вас должно быть следующее. | ||
Строка 17: | Строка 36: | ||
Все изменения в файлах будут записаны в этот файл патча. | Все изменения в файлах будут записаны в этот файл патча. | ||
===Git=== | |||
При использовании Git вы можете просто внести изменения и выполнить: | |||
$ git diff > changes.patch | |||
Либо добавить все файлы что хотите изменить через | |||
$ git add | |||
$ git diff --cached > changes.patch | |||
После этого любым способом возвращаете то что было. | |||
$ git restore . | |||
для файлов/путей | |||
$ git reset | |||
для всего | |||
==Тестирование патча== | |||
Чтобы проверить патч, перейдите в каталог в который нужно его применить и выполните команду {{cmd|patch}} с ключом {{cmd|--dry-run}}: | |||
$ patch -p0 --dry-run < '/home/user/cmake-libltdl.patch' | |||
==Применение патча при сборке пакета== | ==Применение патча при сборке пакета== | ||
Строка 74: | Строка 110: | ||
где | где | ||
*%patch1 - патч прописанный в спеке ранее | *%patch1 - патч прописанный в спеке ранее | ||
*параметр -p1 - | *параметр -p1 - срезает путь применения патча. Например, если внутри патча написано {{path|a/.gear/vendor}}, то с {{path|-p1}} он станет {{path|.gear/vendor}}, а с {{path|-p2}} просто {{path|vendor}}. Это нужно если у вас (в патче и внутри хэшера) пути различаются. | ||
Записав изменения в git и начав собирать hasher-ом вы примените изменения в код без правки кода в апстриме. | Записав изменения в git и начав собирать hasher-ом вы примените изменения в код без правки кода в апстриме. |
Текущая версия от 20:00, 27 февраля 2025
О патче
Патч имеет вид:
diff --git a/tde-tdelibs/CMakeLists.txt b/tde-tdelibs/CMakeLists.txt
--- a/tde-tdelibs/CMakeLists.txt
+++ b/tde-tdelibs/CMakeLists.txt
@@ -13,6 +13,7 @@
##### set project version ########################
include( TDEVersion )
+include_directories(/usr/share/libtool-2.4/libltdl)
cmake_minimum_required( VERSION ${TDE_CMAKE_MINIMUM_VERSION} )
tde_set_project_version( )
- diff --git a/tde-tdelibs/CMakeLists.txt b/tde-tdelibs/CMakeLists.txt - указывает файлы для сравнения
- --- a/tde-tdelibs/CMakeLists.txt - исходный файл
- +++ b/tde-tdelibs/CMakeLists.txt - конечный файл
- @@ -13,6 +13,7 @@ - цифры -13,6 +13,7 означают следующее: перейти к строке 13; было строк 6, стало 7. Учитывайте это если вдруг, ну мало ли, захотите подправить патч вручную.
- +include_directories(/usr/share/libtool-2.4/libltdl) - изменение
Создание патча
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-ом вы примените изменения в код без правки кода в апстриме.