~jelmer/ubuntu/maverick/bzr/2.2.5

« back to all changes in this revision

Viewing changes to doc/developers/plugin-api.txt

  • Committer: Bazaar Package Importer
  • Author(s): Jelmer Vernooij
  • Date: 2009-03-10 14:11:59 UTC
  • mfrom: (1.2.1 upstream) (3.1.68 jaunty)
  • Revision ID: james.westby@ubuntu.com-20090310141159-lwzzo5c1fwrtzgj4
New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2
2
Plugin API
3
3
==========
4
4
 
5
 
Status
6
 
======
7
 
 
8
 
:Date: 2008-02-29
 
5
 
 
6
 
 
7
:Date: 2009-01-23
 
8
 
 
9
.. contents::
 
10
 
 
11
Introduction
 
12
============
9
13
 
10
14
bzrlib has a very flexible internal structure allowing plugins for many
11
15
operations. Plugins can add commands, new storage formats, diff and merge
12
16
features and more. This document provides an overview of the API and
13
17
conventions for plugin authors.
14
18
 
15
 
.. contents::
 
19
If you're writing a plugin and have questions not addressed by this
 
20
document, please ask us.
 
21
 
 
22
See also
 
23
--------
 
24
 
 
25
 * `Bazaar Developer Documentation Catalog <index.html>`_.
 
26
 * <http://bazaar-vcs.org/WritingPlugins> wiki page with many more
 
27
   suggestions about particular APIs
16
28
 
17
29
 
18
30
Structure of a plugin
157
169
Plugin metadata after installation
158
170
==================================
159
171
 
160
 
After a plugin has been installed, metadata can be more easily obtained.
161
 
Currently the only metadata used is for API versioning.
 
172
After a plugin has been installed, metadata can be more easily obtained by
 
173
looking inside the module object -- in other words, for variables defined
 
174
in the plugin's ``__init__.py``.
 
175
 
 
176
Help and documentation
 
177
----------------------
 
178
 
 
179
The module docstring is used as the plugin description shown by ``bzr
 
180
plugins``.  As with all Python docstrings, the first line should be a
 
181
short complete sentence summarizing the plugin.  The full docstring is
 
182
shown by ``bzr help PLUGIN_NAME``.
 
183
 
 
184
Remember that to be effective, the module docstring must be the first
 
185
statement in the file.  It may come after comments but it must be before
 
186
any import statements.
162
187
 
163
188
API version
164
189
-----------
165
190
 
166
 
Please see `API versioning <api-versioning.html>`_ for details on the API
 
191
Plugins can and should declare that they depend on a particular version of
 
192
bzrlib like so::
 
193
 
 
194
    from bzrlib.api import require_api
 
195
 
 
196
    require_api(bzrlib, (1, 11, 0))
 
197
 
 
198
Please see `API versioning <api-versioning.html>`_ for more details on the API
167
199
metadata protocol used by bzrlib.
168
200
 
 
201
Plugin version
 
202
--------------
 
203
 
 
204
The plugin should expose a version tuple to describe its own version.
 
205
Some plugins use a version number that corresponds to the version of bzr
 
206
they're released against, but you can use whatever you want.  For example::
 
207
 
 
208
    version_info = (1, 10, 0)
 
209
 
 
210
 
 
211
Detecting whether code's being loaded as a plugin
 
212
-------------------------------------------------
 
213
 
 
214
You may have a Python module that can be used as a bzr plugin and also in
 
215
other places.  To detect whether the module is being loaded by bzr, use
 
216
something like this::
 
217
 
 
218
    if __name__ == 'bzrlib.plugins.loggerhead':
 
219
        # register with bzrlib...
 
220
 
 
221
 
 
222
Plugin performance
 
223
==================
 
224
 
 
225
Plugins should avoid doing work or loading code from the plugin or
 
226
external libraries, if they're just installed but not actually active,
 
227
because this slows down every invocation of bzr.  The bzrlib APIs
 
228
generally allow the plugin to 'lazily' register methods to invoke if a
 
229
particular disk format or seen or a particular command is run.
 
230
 
 
231
 
 
232
Plugin registrations
 
233
====================
 
234
 
 
235
The plugin ``__init__.py`` runs when the plugin is loaded during bzr
 
236
startup.  Generally the plugin won't want to actually do anything at this
 
237
time other than register or override functions to be called later.
 
238
 
 
239
The plugin can import bzrlib and call any function.
 
240
Some interesting APIs are described in <http://bazaar-vcs.org/WritingPlugins>
 
241
 
 
242
 
 
243
Publishing your plugin
 
244
======================
 
245
 
 
246
When your plugin is basically working you might like to share it with
 
247
other people.  Here are some steps to consider:
 
248
 
 
249
 * make a project on Launchpad.net like
 
250
   <https://launchpad.net/bzr-fastimport>
 
251
   and publish the branches or tarballs there
 
252
 
 
253
 * include the plugin in <http://bazaar-vcs.org/BzrPlugins>
 
254
 
 
255
 * post about it to the ``bazaar-announce`` list at ``lists.canonical.com``
169
256
 
170
257
..
171
 
   vim: ft=rst tw=74 ai
172
 
 
173
 
 
 
258
   vim: ft=rst tw=74 ai shiftwidth=4