вторник, 21 апреля 2009 г.

Плагины bzr: основые сведения

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

Плагины позволяют расширить возможности bzr за счет новых команд, либо за счет модификации поведения старых. Плагины могут регистрировать специальные обработчики событий (хуки/hooks), которые будут вызываться перед или после некоторых операций, например, commit, pull/push и т.д. Плагины могут добавлять новые алгоритмы обработки данных либо позволять работать с другими форматами репозиториев, например, предоставлять доступ к репозиториям других систем контроля версий. Наиболее знаменитым плагином в этом отношении является bzr-svn, который позволяет напрямую работать с svn.

Список плагинов

Список имеющихся плагинов для bzr приведен на странице BzrPlugins.

Для каждого плагина указано его краткое описание, информация об авторе (авторах) плагина, информация о совместимости с основными операционными системами (Linux/Windows/Mac). Также указан URL на страничку плагина либо bzr-ветку с его кодом.

Что представляют собой плагины

Плагины представляют собой модули или пакеты, написанные на языке программирования Python. Плагины должны писаться на Python, поскольку сама система bzr написана на Python, а плагины взаимодействуют напрямую с внутренним API bzr.

Как подключить плагин

При каждом запуске bzr ищет установленные плагины в следующих каталогах:
  1. Если установлена переменная окружения BZR_PLUGIN_PATH, то проводится поиск в списке каталогов из этой переменной
  2. Иначе проводится поиск плагинов в каталоге настроек приложения для текущего пользователя (на Linux/Mac это ~/.bazaar/plugins; на Windows это C:\Documents and Settings\USERNAME\Application Data\bazaar\2.0\plugins).
  3. Дополнительно проводится поиск в подкаталоге, где установлен bzr:
  • например на Linux это может быть /usr/lib/python2.5/site-packages/bzrlib/plugins
  • на Windows:
    • для случая установки standalone installer это будет C:\Program Files\Bazaar\plugins (если сам bzr установлен в каталоге C:\Program Files\Bazaar)
    • для случая установки как python-программы — аналогично Linux в каталоге site-packages/bzrlib/plugins
Если плагин находится в указанных каталогах, то он будет загружен. Никаких специальных настроек для разрешения или запрещения плагина не требуется. Для того чтобы отключить плагин достаточно удалить плагин из соответствующего каталога.

Установка плагинов

Многие популярные плагины имеют специальные пакеты для установки на Linux. Они могут быть установлены/удалены обычным образом при помощи менеджера пакетов.

Рассмотрим установку плагина из исходного кода.

Большинство плагинов работают прямо из исходного кода и не требуют специальных действий для установки. Достаточно просто поместить каталог (или ветку) с кодом плагина в каталог plugins. Однако все-таки стоит изучить имеющийся файл README или INSTALL на предмет дополнительных инструкций по установке.

Следует также помнить о том, что часто код плагинов размещается на сайте Launchpad.net, который предоставляет бесплатный хостинг для проектов и/или bzr-веток. В этом случае страница bzr-плагина зачастую имеет приставку "bzr-" в имени плагина (чтобы подчеркнуть свою принадлежность).  При установке плагина эту приставку нужно опустить, плюс все дефисы в названии поменять на знак подчеркивания. Так, например, плагин bzr-gtk должен устанавливаться в каталог gtk, а плагин bzr-x-bit в каталог x_bit. Каталог, в котором должен помещаться код плагина, часто жестко предопределен и при его изменении плагин в большинстве случаев оказывается неработоспособным.

Рассмотрим установку на примере плагина merge-into:
  • перейти в каталог plugins:
    cd ~/.bazaar/plugins
  • получить копию ветки с launchpad.net:
    bzr branch lp:bzr-merge-into merge_into
В каталоге merge_into будет создана копия ветки плагина. Таким образом вы сможете легко обновлять свою копию плагина, когда автор плагина опубликует новую функциональность или исправления найденных ошибок.

Чтобы убедиться в том, что плагин установлен корректно, запустите команду bzr plugins. Ваш плагин должен присутствовать в списке, который выдает эта команда:

C:\>bzr plugins
bzrtools 1.13
    Various useful commands for working with bzr.

launchpad
    Launchpad.net integration plugin for Bazaar.

merge_into
    Provide the 'merge-into' command.

Многие плагины содержат набор тестов, которые можно использовать для проверки работоспособности плагина на вашей платформе или для проверки совместимости с используемой версией bzr. Для запуска тестов конкретного плагина используйте команду selftest:

C:\>bzr selftest -s bp.merge_into
testing: C:/Program Files/Bazaar/bzr.EXE
   C:\Program Files\Bazaar\lib\library.zip\bzrlib (1.13.1 python2.5.4)

[5/5 in 4s] bzrlib.plugins.merge_into.test_bb_merge_into.TestMergeInto.test_smoke
----------------------------------------------------------------------
Ran 5 tests in 5.125s

OK
tests passed

Справочная информация о плагине

Для получения справки о плагине посмотрите файл README, поставляемый с кодом плагина, либо используйте команду help:

C:\>bzr help merge_into
Provide the 'merge-into' command.

This command allows you to merge other branches into subdirectories, rather
than always merging into root, and then needing to be moved around.

Некоторые плагины добавляют большое количество команд, не все из которых описаны в скудной справке к плагину. Отыскать все команды нам поможет команда bzr help commands и утилита grep. Например, найдем все команды, предоставляемые популярным плагином bzrtools:

C:\>bzr help commands | grep bzrtools
branch-history     Display the development history of a branch. [bzrtools]
branches           Scan a location for branches [bzrtools]
cbranch            Create a new checkout, associated with a new repository branch. [bzrtools]
cdiff              A color version of bzr's diff [bzrtools]
clean-tree         Remove unwanted files from working tree. [bzrtools]
fetch-ghosts       Attempt to retrieve ghosts from another branch. [bzrtools]
graph-ancestry     Produce ancestry graphs using dot. [bzrtools]
heads              Show all revisions in a repository not having descendants. [bzrtools]
import             Import sources from a directory, tarball or zip file [bzrtools]
link-tree          Hardlink matching files to another tree. [bzrtools]
multi-pull         Pull all the branches under a location, e.g. a repository. [bzrtools]
patch              Apply a named patch to the current tree. [bzrtools]
rspush             Upload this branch to another location using rsync. [bzrtools]
shelf1             Perform various operations on your shelved patches. See also shelve1. [bzrtools]
shell              Begin an interactive shell tailored for bzr. [bzrtools]
shelve1            Temporarily set aside some changes from the current tree. [bzrtools]
trees              Scan a location for trees [bzrtools]
unshelve1          Restore shelved changes. [bzrtools]
zap                Remove a lightweight checkout, if it can be done safely. [bzrtools]

Примечание: пользователям Windows необходимо установить утилиту grep самостоятельно.

Временное отключение плагинов

В некоторых (редких) случаях  может потребоваться запустить команду bzr без плагинов. В этом случае вы можете использовать глобальную опцию командной строки --no-plugins. Глобальные опции должны указываться после имени программы (bzr) и перед собственно командой. Так, например, следующая команда выведет список только встроенных команд:

bzr --no-plugins help commands

Имеется еще одна глобальная опция, воздействующая на плагины: --builtin. При использовании этой опции плагины загружаются как обычно, но при этом плагинам запрещается декорирование команд. Т.е. плагины не смогут зарегистрировать новую команду с именем, которое совпадает с именем встроенной команды. Эта опция полезна прежде всего для целей отладки.

Комментариев нет:

Отправить комментарий