1
1
=======================
2
Integrating with Bazaar
2
Integrating with Breezy
3
3
=======================
5
This page should hopefully become a quick guide to integrating other
6
(Python-based) software with Bazaar.
5
This document provides some general observations on integrating with
6
Breezy and some recipes for typical tasks. It is intended to be useful to
7
someone developing either a plugin or some other piece of software that
8
integrates with brz. If you want to know about a topic that's not covered
20
When using breezy within the ``brz`` program (for instance as a brz
21
plugin), breezy's global state is already available for use.
26
To use breezy outside of ``brz`` some global state needs to be setup.
27
breezy needs ways to handle user input, passwords, a place to emit
28
progress bars, logging setup appropriately for your program. The easiest
29
way to set all this up in the same fashion ``brz`` does is to call
30
``breezy.initialize``.
32
This returns a context manager within which breezy functions will work
33
correctly. See the pydoc for ``breezy.initialize`` for more information.
34
(You can get away without entering the context manager, because the setup
35
work happens directly from ``initialize``.)
41
To run command-line commands in-process::
43
from breezy.commands import get_command
45
cmd = get_command('version')
48
This will send output through the current UIFactory; you can redirect this
49
elsewhere through the parameters to `breezy.initialize`.
8
52
Manipulating the Working Tree
9
53
=============================
10
Most objects in Bazaar are in files, named after the class they contain.
54
Most objects in Breezy are in files, named after the class they contain.
11
55
To manipulate the Working Tree we need a valid WorkingTree object, which
12
56
is loaded from the workingtree.py file, eg::
14
from bzrlib import workingtree
15
wt = workingtree.WorkingTree.open('/home/jebw/bzrtest')
58
from breezy import workingtree
59
wt = workingtree.WorkingTree.open('/home/jebw/brztest')
18
62
This gives us a WorkingTree object, which has various methods spread over
19
itself, and its parent classes MutableTree and Tree - its worth having a
63
itself, and its parent classes MutableTree and Tree - it's worth having a
20
64
look through these three files (workingtree.py, mutabletree.py and tree.py)
21
65
to see which methods are available.
25
70
There are two methods for comparing trees: ``changes_from`` and
26
71
``iter_changes``. ``iter_changes`` is more regular and precise, but it is
27
72
somewhat harder to work with. See the API documentation for more details.
29
74
``changes_from`` creates a Delta object showing changes::
31
from bzrlib import delta
76
from breezy import delta
32
77
changes = wt.changes_from(wt.basis_tree())
34
79
This gives us a Delta object, which has several lists of files for each type of
59
If you want to add files the same way ``bzr add`` does, you can use
104
If you want to add files the same way ``brz add`` does, you can use
60
105
MutableTree.smart_add. By default, this is recursive. Paths can either be
61
106
absolute or relative to the workingtree::
63
108
wt.smart_add(['dir1/filea.txt', 'fileb.txt',
64
'/home/jebw/bzrtesttree/filec.txt'])
109
'/home/jebw/brztesttree/filec.txt'])
67
112
For more precise control over which files to add, use MutableTree.add::
69
wt.add(['dir1/filea.txt', 'fileb.txt', '/home/jebw/bzrtesttree/filec.txt'])
114
wt.add(['dir1/filea.txt', 'fileb.txt', '/home/jebw/brztesttree/filec.txt'])
75
120
You can remove multiple files at once. The file paths need to be relative
76
121
to the workingtree::
128
173
Generating a log is, in itself, simple. Grab a branch (see below) and pass
129
174
it to show_log together with a log formatter, eg::
131
from bzrlib import log
132
from bzrlib import branch
176
from breezy import log
177
from breezy import branch
134
179
b = branch.Branch.open('/path/to/bazaar/branch')
135
180
lf = log.LongLogFormatter(to_file=sys.stdout)
136
181
log.show_log(b, lf)
139
Three log formatters are included with bzrlib: LongLogFormatter,
184
Three log formatters are included with breezy: LongLogFormatter,
140
185
ShortLogFormatter and LineLogFormatter. These provide long, short and
141
186
single-line log output formats. It's also possible to write your own in
142
187
very little code.
182
227
To work with a branch you need a branch object, created from your branch::
184
from bzrlib import branch
229
from breezy import branch
186
b = branch.Branch.open('/home/jebw/bzrtest')
231
b = branch.Branch.open('/home/jebw/brztest')
189
234
Branching from an existing branch
190
=================================
235
---------------------------------
192
237
To branch you create a branch object representing the branch you are
193
238
branching from, and supply a path/url to the new branch location.
194
The following code clones the bzr.dev branch (the latest copy of the Bazaar
239
The following code clones the brz trunk branch (the latest copy of the Breezy
195
240
source code) - be warned it has to download 60meg so takes a while to run
196
241
with no feedback::
198
from bzrlib import branch
200
b = branch.Branch.open('http://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev')
201
nb = b.bzrdir.sprout('/tmp/newBzrBranch').open_branch()
204
This provides no feedback, since Bazaar automatically uses the 'silent' UI.
243
from breezy import branch
245
b = branch.Branch.open('bzr+ssh://bazaar.launchpad.net/+branch/brz/')
246
nb = b.controldir.sprout('/tmp/newBrzBzranch').open_branch()
249
This provides no feedback, since Breezy automatically uses the 'silent' UI.
207
252
Pushing and pulling branches
208
============================
253
----------------------------
210
255
To push a branch you need to open the source and destination branches, then
211
256
just call push with the other branch as a parameter::
213
from bzrlib import branch
258
from breezy import branch
215
260
b1 = branch.Branch.open('file:///home/user/mybranch')
216
b2 = branch.Branch.open('http://bazaar.launchpad.net/~bzr-pqm/bzr/bzr.dev')
261
b2 = branch.Branch.open('bzr+ssh://bazaar.launchpad.net/+branch/brz/')
235
280
This performs a Lightweight checkout from an existing Branch::
237
from bzrlib import bzrdir
282
from breezy import bzrdir
239
284
accelerator_tree, source = bzrdir.BzrDir.open_tree_or_branch('http:URL')
240
source.create_checkout('/tmp/newBzrCheckout', None, True, accelerator_tree)
285
source.create_checkout('/tmp/newBrzCheckout', None, True, accelerator_tree)
243
288
To make a heavyweight checkout, change the last line to::
245
source.create_checkout('/tmp/newBzrCheckout', None, False, accelerator_tree
290
source.create_checkout('/tmp/newBrzCheckout', None, False, accelerator_tree
248
293
History Operations