[devel] diff in .gear-rules

Pavel Wolneykien =?iso-8859-1?q?manowar_=CE=C1_altlinux=2Eorg?=
Пт Окт 17 18:45:45 MSD 2008


Grigory Batalov <bga на altlinux.org> wrote:
> Можно ли заставить директиву diff из .gear-rules игнорировать появление
> новых файлов? Т.е. вместо "diff -ruN" запускать "diff -ru".
> И если нельзя, то как сделать, чтобы было можно? =)

  Пользуясь случаем, хочу поделиться опытом, как я вчера
бэкпортировал xlock.

  Значит дело было так. 

                                * * *

  Жил был репозиторий и было у него 3 бранча:

  upstream
  add-icons
  pam.d

  В первом лежали исходные файлы заморские, с tux.org взятые, версии
5.27. В втором иконки расписные, разных размеров. А в третьем файлы
конфигурационные большой важности.

  И было у Апстрима два сына:

  -- upstream
   |-- fix-install-mode
   |-- pam-integration

   И хранили они копии файлов, доставшихся им от отца. Первый сын был
по натуре консерватором и только один файл у него был изменён для
лучшей установки. А второй сын потокал прогрессу и новый код добавил сразу
в три файла.

  И настало время сборки и пришёл тогда Повелитель.

  * master
    upstream
      fix-install-mode
      pam-integration
    add-icons
    pam.d

  Расставил он теги по бранчам, обозначив тем самым кому на сборку
приходить. 

  upstream v5.27
    fix-install-mode imode-5.27
    pam-integration pam-integ-1.0
  add-icons icons-1.0
  pam.d pam.d-1.0

  И взял он тогда Шестерни могучие и приказал им:

  tar.gz: v на version@:xlockmore
  tar.gz: icons-1.0:icons name=@name на -@version на -icons
  tar: pam.d-1.0:pam.d name=@name на -@version на -pam.d
  diff: v на version@:xlockmore imode-5.27:xlockmore name=install-mode.patch
  diff: v на version@:xlockmore pam-integ-1.0:xlockmore name=pam-integration.patch

  Словом "@version@" значение "5.27" обозначив.

  Заскрежетали Шестерни и остановились, сказав: "Tag is not an ancestor
of current HEAD".

  Взял тогда Повелитель и соединил всех кого отметил вместе, и заключил в
себе:

  * master: v5.27--icons-1.0--pam.d-1.0--imode-5.27--pam-integ-1.0--HEAD

  Завертелись тогда Шестерни и собрался пакет новёхонький, пропатченный.

  Прошёл день, два и захотелось собрать пакет старый, надёжный, но тоже
на манер нового пропатченный. И появился тогда в репозитории новый
бранч в который были записаны исходные файлы старые, проверенные:

  * branch-4.0 v5.22
    master
    upstream v5.27
      fix-install-mode imode-5.27
      pam-integration pam-integ-1.0
    add-icons icons-1.0
    pam.d pam.d-1.0

  И задумал Четвёртый как Повелитель, всё в себе объединить. Сначала
взял он "icons-1.0" и "pam.d-1.0", и возрадовался уже, так всё у него
шло хорошо! Но вот пришёл к нему "imode-5.27" и захлестнула бедного
Четвёртого волна изменений конфликтных, и сгинул он под ней!

  И решено тогда было на помощь премудрость машинную призвать. И снова
появился Четвёртый, но не сам по себе, а как потомок Апстрима:

  master
  upstream v5.27
    fix-install-mode imode-5.27
    pam-integration pam-integ-1.0
    * branch-4.0
  add-icons icons-1.0
  pam.d pam.d-1.0

  Имел новый Четвёртый слабость к версиям старым, надёжным. Поэтому
заменил он множество новых файлов, доставшихся ему от отца, старыми,
понизив версию дистрибутива до 5.22, о чём провозгласил, тег установив с
аннотацией в красочной рамке.

  * branch-4.0 v5.22.

  Дальше нужно ему было в себе всех своих братьев и друзей объединить, к
сборке готовясь. Сначала как и прежде, взял он "icons-1.0" и
"pam.d-1.0", которые влились в него без возражений. И вот подошёл
"imode-5.27", но будучи братом кровным Четвёртого, только отличие своё
от отца ему передал, сработала премудрость машинная! Четвёртый обозначил
этот знаменательный момент тегом "v5.22-p0". Другой его брат,
"pam-integ-1.0" так же поступить хотел, и лишь небольшой конфликт у них
возник. Поспорили братья немного и помирились, свою дружбу другим тегом
отметив: "v5.22-p1". Так Четвёртый, подобно Повелителю, объединил в себе
всех для сборки отобранных:

  * branch-4.0: v5.27--(v5.22)--icons-1.0--pam.d-1.0--imode-5.27(v5.22-p0)--pam-integ-1.0(v5.22-p1)--HEAD

  И взял он Шестерни могучие и приказал им:

  tar.gz: v на version@:xlockmore
  tar.gz: icons-1.0:icons name=@name на -@version на -icons
  tar: pam.d-1.0:pam.d name=@name на -@version на -pam.d
  diff: v на version@:xlockmore v на version@-p0:xlockmore name=install-mode.patch
  diff: v на version@-p0:xlockmore v на version@-p1:xlockmore name=pam-integration.patch

  Словом "@version@" значение "5.22" обозначив.

  И завертелись Шестерни, и последовательно между собой теги сравнивая,
патчей наделали. И не было в тех патчах ничего лишнего, и накатились они
славно. И собрался пакет, хоть и старый, но надёжный, с новыми заплатами.

  С тех пор так и повелось. Если какому сыну захотелось пакет собрать,
он братьев своих к себе на пир созывает, с каждым спорит, но неизменно
мириться и тег устанавливает. Шестерни потом с этих тегов патчи творят,
последовательно их между собой сравнивая. И выходят у них пакеты
славные. А чужаку со стороны так пакет не в жизнь не собрать!


                                * * *

  Вот собственно и всё. Не уверен что это универсальный и вообще верный
рецепт, но я вчера использовал именно его. Результат можно увидеть в
/people/manowar/xlockmore.git. Поддержку и конструктивную критику приму
с радостью!

  Павел.


Подробная информация о списке рассылки Devel