LINUX.ORG.RU

Автоматический патч ебилда

 , ,


1

1

Когда нужно пропатчить сорцы всё решается просто: кладем патч в /etc/portage/patches/<имя_пакета> и он автоматом применяется перед сборкой.

Есть ли какой-нибудь способ автоматического применения патча не к сорцам, а к ебилду?

★★★★
Ответ на: комментарий от annulen

Какой патч? Он хочет платить ebuild. Проблема патчей вообще в том, что они могут не применяться из-за слишком сильных отличий.

Зачем ему ради пары ebuild держать целую ветку?

В его локальную ветку и так никто не влезет, а ребейз ему не поможет обновить свои ebuild до новых версий автоматически, с наложением патчей на сами ebuild’ы.

grem ★★★★★
()
Последнее исправление: grem (всего исправлений: 1)
Ответ на: комментарий от grem

Делаешь свою ревизию в локальной репе и всё

И какая разница, локальная репа или официальная? Всё равно надо обновлять ебилд, а где он лежит в /var/db/repos/gentoo или /var/db/repos/local совершенно без разницы.

Это прокатило бы, если один раз пропатчил и затем не обновляешь пакет. Но обновлять нужно

Chord ★★★★
() автор топика
Последнее исправление: Chord (всего исправлений: 1)

Пока вижу только костыль - после emerge --sync запускать скрипт (не патч, ибо патч может не сработать при изменениях в ебилде), который ищет паттерн в ебилде и вырезает его.

Но может есть какой-то бескостыльный способ?

Chord ★★★★
() автор топика
Ответ на: комментарий от grem

а ребейз ему не поможет обновить свои ebuild до новых версий автоматически, с наложением патчей на сами ebuild’ы

Поможет

Проблема патчей вообще в том, что они могут не применяться из-за слишком сильных отличий.

git частично решает эту проблему, так как при ребейзе видит историю изменений. А если конфликты не решатся автоматически, то можно «дорешать» оставшиеся ёлочки вручную.

annulen ★★★★★
()
Ответ на: комментарий от grem

git rebase автоматизирует процесс адаптации патча к изменениям настолько, насколько это доступно человеческим технологиям на сегодняшний день:)

Можно ещё git rerere включить, чтобы учитывать предыдущий опыт разрешения конфликтов.

annulen ★★★★★
()
Ответ на: комментарий от Chord

никакой магии нет - в package.provided ты кладешь atom(category/package-version) и emerge воспринимает это, как будто он у тебя безальтернативно установлен.

Но если ты положишь туда например category/package-1.0, а потом когда-нибудь выйдет package-1.1 - emerge предложит его «обновить»

Вариант - указать максимально возможную версию, которой никогда не будет у пакета. Т.к. live ebuild-ы в Gentoo имеют версию 9999, то достаточно указать 10000.

Правда я уже видел пару исключений в дереве, но это в основном служебные пакеты

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Chord

Это просто достаточно большое число, соответствующее формату версии пакета из Package Manager Specification. Если где-то будет выпущена версия 10001 для какого-то пакета - он попытается «обновиться».

Так можно и 39156.999 и 64723.2.0 указать - никто не запрещает.

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 2)