Номера версий в CMFQuickInstaller

В статье идет речь о двух основных методах получения номеров версий. И объяснение появления странных номеров, отличающихся от реальных. Автор: Maurits van Rees.

История о двух версиях.

Если Вы пишете пакет расширений для Plone, то в настоящее время существует два способа написания инсталлятора: профиль GenericSetup (GS) и External Method (метод инсталляции в Extensions/install.py). Предпочтение в настоящее время отдается профилю GS; фактически, в транке Plone (который будет приблизительно через год Plone 4), профиль GS является единственным способом написания инсталлятора.

Но в то же время, если Вы зайдете в portal_quickinstaller (QI) в ZMI, или в раздел дополнительных Продуктов (Add-On Products section) на сайте Plone Setup (то же, что и QI, но отличается только пользовательским интерфейсом), Вы можете увидеть сбивающие с толку номера. Например, Вы предварительно установили FooBar 1.2 на вашем сайте Plone и теперь Вы обновили его до версии 1.3 на файловой системе, и служба быстрой установки (quick installer) сообщит вам, что доступно обновление "Профиль для FooBar с версии 1.2 до версии 700. Или еще какое-нибудь странное число, ниже 1.0. Что случилось с FooBar 1.3, который Вы недавно добавили к вашему buildout?

Хорошо, во-первых, этот продукт очевидно имеет профиль GS и QI не отображает название пакета (Продукта FooBar), а отображает название профиля GS (Профиль для FooBar). Логично. Но как насчет этих номеров версий?

Например, у Вас на самом деле пакет нормальной версии 1.3, а QI отображает версию профиля GS, который сильно отличается от номера пакета данной версии. Причина таких различий кроется в том, что этот новый пакет релиза имеет лишь некоторые незначительные изменения, например, в некоторых страничных шаблонах. Когда нет никаких изменений в профиле GS, то нет никакой потребности переустанавливать пакет, или профиль GS, поэтому версия профиля остается прежней. Так как версия пакета и профиля могут отличаться, то лучше, чтобы они отличались с самого начала. Для профиля версии хорошо бы просто использовать целые числа: 1, 2, 3.

В этом случае, что-то меняется в пакете и является причиной того, что версия профиля отображается там, где использовалась предварительная версия пакета; или возможно это номера с предыдущего релиза. Для лучшего понимания, давайте посмотрим на то, как разные релизы CMFQuickInstaller "приделывают" номера версий. Выводы находятся в конце статьи.

Во всех версиях:

  • Отображается имя профиля GS или имя пакета.
  • Если Вы не сможете найти версию методом getProductVersion QI, то список версий будет пуст.
  • Пакеты должны быть в пространстве имен Products, или использовать директиву five:registerPackage в zcml, иначе они не отображаются в разделе Управления Продуктом панели управления Zope.
  • Для получения номера версии из файла version.txt, пакет должен быть внесен в список в разделе Product Management. Для получения номера версии из файла setup.py или из профиля GS (файл metadata.xml) этого не требуется.
  • Пакеты, которые полагаются на внешний метод (т. е. без профиля GS) для инсталляции и которых нет в разделе Product Management не отображены в QI.
  • Обратите внимание, что раздел Products панели управления Zope ищет только version.txt, по крайней мере в версии Zope 2.10.

Plone 3.0

  • Plone 3.0.6 использует QI 2.0.4.
  • Узнать номер версии с помощью getProductVersion можно только из файла version.txt.
  • Версия GS-профиля никогда не отображается.
  • Пакеты должны находиться в пространстве имен Products или использовать директиву five:registerPackage, иначе они не отображаются в QI. Это верно только при этой версии QI  и для пакетов с внешним методом и для пакетов с профилем GS.

Plone 3.1/3.2

  • Plone 3.1.7 и 3.2.2 используют QI 2.1.6.
  • Узнать номер версии с помощью getProductVersion можно из файла version.txt; если это не удается, то из профиля GS.
  • Пакеты с профилем GS всегда отображаются в QI, даже если они не используют five:registerPackage и не находятся в пространстве имен Products.
  • Если версия профиля GS найдена, то эта версия отображается. Исключение: эта версия отображается тогда, когда используется five:registerPackage (или пространство имен Products) и существует файл version.txt.

Plone 3.3

  • Plone 3.3rc2 использует QI 2.1.7.
  • Узнать номер версии с помощью getProductVersion можно из файла setup.py и из файла version.txt. Но из профиля GS этого узнать нельзя.
  • Также используется setup.cfg, поэтому, если у Вас есть tag_build = dev в разделе egg_info, то за версией вы увидите 'dev'.

Заключение

Кажется, что существует универсальный способ получения номера версии во всех релизах Plone 3.x,  это из файла version.txt. Следуя этим принципам и, по крайней мере, изучив версии QI, номер версии всегда отображается из файла version.txt:

  • Используйте пространство имен Products, или директиву five:registerPackage. (при использовании paster для создания вашего пакета, ответьте Да на вопрос, 'Вы создаете Продукт Zope 2? ')
  • Используйте version.txt.
  • В setup.py используйте номер версии из version.txt в качестве версии пакета.

В этой стратегии можно использовать версии профиля GS, которые полностью отличаются от версии вашего пакета, не смущая пользователей. Определенно, теперь я буду использовать только целые числа для версий профиля GS, вместо десятичных, которые я главным образом использую сейчас.

И последнее: для Plone 3.0 (QI 2.0) помните, что, если Вы имеете только профиль GS, а не внешний метод инсталляции, то ваш пакет не будет отображаться в QI, так что Вам придется использовать  portal_setup вместо инструмента установки пакета.

Оригинал статьи на http://maurits.vanrees.org

Перевод ООО «Комтет» - профессиональный хостинг, komtet.ru

Вам также может помочь