quilt — это система контроля патчей, в каком-то смысле предыдущая ступень эволюции систем контроля версий.
Пусть есть rpm-пакет и нужно обновить его версию, используя новый архив исходных кодов. При этом патчи останутся старыми, и не гарантируется, что они наложатся на новую версию, или не потребуется вмешательство человека, из-за того, что какой-то патч устарел. После того, как новый архив получен и
Version: исправлен, можно прибегнуть к помощи
quilt:
quilt setup libdc1394.spec
Эта команда создаст новую директорию в которой будут лежать распакованные исходные коды, символическая ссылка на директорию
patches (хранит сами файлы патчей) и файл
series (хранит порядок в котором патчи нужно применять).
quilt не всегда успешно справляется с патчами, которые завернуты в
%if.
Идеологически происходит следующее, у нас есть команда
quilt, что-то вроде аналога
git или
hg, дерево исходников и стек патчей. Стек патчей в чем-то аналогичен ревизиям в системах контроля версий. Используя стек можно переходить от текущего состояния к следующему (применяя патч,
quilt push) или к предыдущему (откатывая,
quilt pop). Первоначально, мы находимся в самом нижнем состоянии (не модифицированные исходные коды):
>quilt top
Нет применённых патчей
>quilt applied
Нет применённых патчей
>quilt unapplied
patches/libdc1394.no-x11.patch
patches/libdc1394.ac.patch
patches/libdc1394-swab_fix.patch
patches/libdc1394.raw1394_set_iso_handler.patch
patches/libdc1394-v4l-2.6.38.patch
patches/libdc1394-visibility.patch
Дальше попробуем наложить первый патч (здесь потребовалась предварительная обработка из-за хитрой структуры директорий в конкретном случае),
>quilt push
Наложение патча patches/libdc1394.no-x11.patch
patching file libdc1394-1.2.2/examples/Makefile.am
patching file libdc1394-2.2.1/configure.in
Текущий патч: patches/libdc1394.no-x11.patch
>quilt top
patches/libdc1394.no-x11.patch
>quilt applied
patches/libdc1394.no-x11.patch
И так далее, пока не закончится весь стек патчей, но скорее всего так просто он не закончится. Задача — обновляя патчи, устранить конфликты. После принудительного применения (
quilt push -f) следует вручную просмотреть все конфликтные места и исправить их нужным образом. Каждый патч отслеживает только некоторое число файлов (
quilt files), но если отредактирован файл не из списка, то его нужно добавить (
quilt add). После того как все исправлено, нужно обновить текущий патч:
quilt refresh (это такой аналог commit, который исправляет текущий наложенный патч, основываясь на рабочей директории и предыдущей спрятанной копии)
>quilt refresh
Патч patches/libdc1394-v4l-2.6.38.patch обновлён