Редактирование: PatchHowto

Перейти к: навигация, поиск

Внимание: Вы работаете как анонимный пользователь. Ваш IP-адрес будет записан в историю изменений этой страницы.

Правка может быть отменена. Пожалуйста, просмотрите сравнение версий, чтобы убедиться, что это именно те изменения, которые вас интересуют, и нажмите «Записать страницу», чтобы изменения вступили в силу.
Текущая версия Ваш текст
Строка 6: Строка 6:
 
Распаковать апстримные исходники. Допустим, что они распакованы в каталог {{path|name-1.0/}}
 
Распаковать апстримные исходники. Допустим, что они распакованы в каталог {{path|name-1.0/}}
  
Далее надо туда зайти. Перед изменением каждого файла надо создать его копию с расширением {{path|.orig}}.
+
Далее надо зайти в эту директорию. Перед изменением каждого файла надо создать его копию с расширением {{path|.orig}}<ref>Вторым вариантом является ''заранее'' создать копию исходного дерева в каталоге, скажем, {{path|name-1.0-orig/}} — и ''не'' создавать после этого копий исходных файлов в исправляемом дереве.</ref>.
  
 
То есть если собираешься менять {{path|Makefile.am}} — надо скопировать его как {{path|Makefile.am.orig}}, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}}
 
То есть если собираешься менять {{path|Makefile.am}} — надо скопировать его как {{path|Makefile.am.orig}}, например, командой {{cmd|cp -a src/Makefile.am{,.orig}<i></i>}}
  
Если масштаб вторжения заранее неизвестен, лучше скопировать сразу весь каталог: {{cmd|cp -a name-1.0{,.orig}<i></i>}}
+
После чего надо внести во все файлы необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки, и т. д.
 
 
После чего надо внести необходимые изменения. Можно даже собирать из этой директории, вносить дополнительные изменения по результатам пересборки и т.д., если вы не против отслеживать вручную список всех затронутых файлов<ref>...для чего вообще-то придуман [http://lists.altlinux.org/pipermail/devel/2012-October/195554.html git].</ref>.
 
  
 
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
 
Когда изменения будут готовы — наступает самое тяжелое. Надо придумать имя для патча.
  
[[ALT_Packaging_HOWTO#Наименование патчей.|ALT Packaging HOWTO]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
+
[[ALT_Packaging_HOWTO#Наименование патчей.]] рекомендует давать патчам имена, состоящие из имени пакета, версии, «происхождения» и причины патча.
  
 
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}}
 
Например, имя патча для нашего гипотетического пакета может быть {{path|name-1.0-alt-link-fixes.patch}}
  
Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками {{path|name-1.0/}}) и сказать {{cmd|gendiff name-1.0 .orig}}; на экран будет выведен патч, сгенерированный как разница между
+
Тогда надо выйти в «родительскую» директорию (где находится каталог с исходниками {{path|name-1.0/}}) и сказать {{cmd|gendiff name-1.0 .orig}}<ref>Для второго варианта — соответственно {{cmd|diff -Naur name-1.0-orig/ name-1.0/}}</ref>; на экран будет выведен патч, сгенерированный как разница между
 
сохраненными ранее файлами {{path|.orig}} и измененными файлами без {{path|.orig}}.
 
сохраненными ранее файлами {{path|.orig}} и измененными файлами без {{path|.orig}}.
  
Строка 26: Строка 24:
  
 
  gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
 
  gendiff name-1.0 .orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
 
Для варианта с полной копией соответственно:
 
 
diff -Naur name-1.0 name-1.0.orig > ~/RPM/SOURCES/name-1.0-alt-link-fixes.patch
 
  
 
Затем в спеке надо будет подключить этот патч в двух местах.
 
Затем в спеке надо будет подключить этот патч в двух местах.
Строка 39: Строка 33:
 
  Patch0: name-1.0-alt-link-fixes.patch
 
  Patch0: name-1.0-alt-link-fixes.patch
  
Вторая часть — собственно применение патча. Это надо делать в секции <tt>%prep</tt> после макроса <tt>%setup</tt>. Желательно использовать ключик <tt>-b</tt> ради той же понятности, он же будет использоваться для резервных копий исходных (непатченых) файлов при наложении.
+
Вторая часть — собственно применение патча. Это надо делать в секции <tt>%prep</tt> после макроса <tt>%setup</tt>. Желательно скопировать комментарий для патча из верхней части, чтобы было понятно, что патч делает и было легко его отключать.
  
 
Для патча, созданного через {{cmd|gendiff}} — надо написать следующее:
 
Для патча, созданного через {{cmd|gendiff}} — надо написать следующее:
Строка 45: Строка 39:
 
  # Name's upstream doesn't want my patch, so I'll place it here.
 
  # Name's upstream doesn't want my patch, so I'll place it here.
 
  # It makes all plugins properly linked.
 
  # It makes all plugins properly linked.
  %patch0 -p1 -b .link-fixes
+
  %patch0 -p1
  
 
Где номер 0 соответствует патчу номер 0.
 
Где номер 0 соответствует патчу номер 0.
  
Вот собственно и все. Если надо отключить патч, просто замените символ процента в <tt>%patch0</tt> на символ решетки (<tt>#</tt>). [[TypicalPackagingErrors/StrikeOutMacro|Тогда]] он станет комментарием.
+
Вот собственно и все. Если надо отключить патч, просто замените символ процента в <tt>%patch0</tt> на символ решетки (<tt>#</tt>). Тогда он станет комментарием.
  
 
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном {{path|/usr/local}}.
 
Надеюсь, это маленькое хауту поможет в благородном деле уменьшения количества обработанных напильником программ в вашем многострадальном {{path|/usr/local}}.
Строка 58: Строка 52:
 
* [[ALT Packaging HOWTO]]
 
* [[ALT Packaging HOWTO]]
  
=== Примечания ===
 
 
<references />
 
<references />

Обратите внимание, что все добавления и изменения текста статьи рассматриваются, как выпущенные на условиях лицензии CC-BY-SA-3.0.

В целях защиты вики от автоматического спама в правках просим вас решить следующую каптчу:

Отменить Справка по редактированию (в новом окне)
Вики-разметка
Заголовки: 1-го: == ==, 2-го: === ===, 3-го: ==== ==== уровня.
Быстрая вставка: «» | [[]] [[|]] {{}} {{|}} [[Категория:]] [[altbug:]] <source lang=""></source> <pre></pre> <!-- -->.
Определения: {{man|}} {{lists|}} {{cmd|}} {{path|}} {{prg|}} {{pkg|}} {{term|}} {{span||}} {{altbug|}}
Выделение: ''italics'', '''bold''', <tt>моноширинный</tt>, <code>код</code>.
Списки: * ненумерованный список, ** вложенный список, # нумерованный список, ## вложенный нумерованный список, *# вложенный смешанный список, ;список :определений.
Verbatim: Пробел в начале строки или <pre>Явный тэг</pre>
Ссылки: [http://www.altlinux.ru/ внешние], [[Main Page|внутренние]], [http://altlinux.ru], [[Main Page]]
Шаблоны: {{Crap}} {{D}} {{Policy}} {{DraftPolicy}} {{Merge|}} {{Улучшение}} {{Тимовец|}}

Шаблоны, используемые на этой странице: