Базар имеет множество команд для выполнения своих основых функций: для просмотра изменений, для фиксирования состояния файлов и каталогов в определенные моменты времени и для работы с историей изменений. И для большей части пользователей этого достаточно. Однако существуют ситуации, когда требуются дополнительные возможности от системы контроля версий, не предоставляемые стандартной поставкой. В этом случае на сцене появляются модули расширения или плагины (plugins) для bzr.
Плагины позволяют расширить возможности bzr за счет новых команд, либо за счет модификации поведения старых. Плагины могут регистрировать специальные обработчики событий (хуки/hooks), которые будут вызываться перед или после некоторых операций, например, commit, pull/push и т.д. Плагины могут добавлять новые алгоритмы обработки данных либо позволять работать с другими форматами репозиториев, например, предоставлять доступ к репозиториям других систем контроля версий. Наиболее знаменитым плагином в этом отношении является bzr-svn, который позволяет напрямую работать с svn.
Для каждого плагина указано его краткое описание, информация об авторе (авторах) плагина, информация о совместимости с основными операционными системами (Linux/Windows/Mac). Также указан URL на страничку плагина либо bzr-ветку с его кодом.
Список плагинов
Список имеющихся плагинов для bzr приведен на странице BzrPlugins.Для каждого плагина указано его краткое описание, информация об авторе (авторах) плагина, информация о совместимости с основными операционными системами (Linux/Windows/Mac). Также указан URL на страничку плагина либо bzr-ветку с его кодом.
Что представляют собой плагины
Плагины представляют собой модули или пакеты, написанные на языке программирования Python. Плагины должны писаться на Python, поскольку сама система bzr написана на Python, а плагины взаимодействуют напрямую с внутренним API bzr.Как подключить плагин
При каждом запуске bzr ищет установленные плагины в следующих каталогах:- Если установлена переменная окружения BZR_PLUGIN_PATH, то проводится поиск в списке каталогов из этой переменной
- Иначе проводится поиск плагинов в каталоге настроек приложения для текущего пользователя (на Linux/Mac это ~/.bazaar/plugins; на Windows это C:\Documents and Settings\USERNAME\Application Data\bazaar\2.0\plugins).
- Дополнительно проводится поиск в подкаталоге, где установлен 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:
Чтобы убедиться в том, что плагин установлен корректно, запустите команду 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
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]
Рассмотрим установку плагина из исходного кода.
Большинство плагинов работают прямо из исходного кода и не требуют специальных действий для установки. Достаточно просто поместить каталог (или ветку) с кодом плагина в каталог 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
Чтобы убедиться в том, что плагин установлен корректно, запустите команду 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. При использовании этой опции плагины загружаются как обычно, но при этом плагинам запрещается декорирование команд. Т.е. плагины не смогут зарегистрировать новую команду с именем, которое совпадает с именем встроенной команды. Эта опция полезна прежде всего для целей отладки.
bzr --no-plugins help commands
Имеется еще одна глобальная опция, воздействующая на плагины: --builtin. При использовании этой опции плагины загружаются как обычно, но при этом плагинам запрещается декорирование команд. Т.е. плагины не смогут зарегистрировать новую команду с именем, которое совпадает с именем встроенной команды. Эта опция полезна прежде всего для целей отладки.