bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
1 |
====================== |
2 |
Bazaar Developer Guide |
|
3 |
====================== |
|
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
4 |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
5 |
This document describes the Bazaar internals and the development process. |
|
3314.1.1
by Martin Pool
Add Developer's Guide text about PPA builds |
6 |
It's meant for people interested in developing Bazaar, and some parts will |
7 |
also be useful to people developing Bazaar plugins. |
|
8 |
||
9 |
If you have any questions or something seems to be incorrect, unclear or |
|
10 |
missing, please talk to us in ``irc://irc.freenode.net/#bzr``, or write to |
|
11 |
the Bazaar mailing list. To propose a correction or addition to this |
|
12 |
document, send a merge request or new text to the mailing list. |
|
13 |
||
|
4634.39.12
by Ian Clatworthy
pdf generation of the Developer Guide |
14 |
The latest developer documentation can be found online at |
15 |
http://doc.bazaar-vcs.org/developers/. |
|
|
1393.1.53
by Martin Pool
- notes from coding-convention discussion |
16 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
17 |
|
18 |
Getting Started |
|
19 |
############### |
|
20 |
||
21 |
Exploring the Bazaar Platform |
|
22 |
============================= |
|
23 |
||
24 |
Before making changes, it's a good idea to explore the work already |
|
25 |
done by others. Perhaps the new feature or improvement you're looking |
|
26 |
for is available in another plug-in already? If you find a bug, |
|
27 |
perhaps someone else has already fixed it? |
|
28 |
||
29 |
To answer these questions and more, take a moment to explore the |
|
30 |
overall Bazaar Platform. Here are some links to browse: |
|
31 |
||
32 |
* The Plugins page on the Wiki - http://bazaar-vcs.org/BzrPlugins |
|
33 |
||
|
2466.6.3
by Ian Clatworthy
Incorporate feedback from Aaron B. & Alex B. |
34 |
* The Bazaar product family on Launchpad - https://launchpad.net/bazaar |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
35 |
|
36 |
* Bug Tracker for the core product - https://bugs.launchpad.net/bzr/ |
|
37 |
||
38 |
If nothing else, perhaps you'll find inspiration in how other developers |
|
39 |
have solved their challenges. |
|
40 |
||
|
4424.1.1
by Martin Pool
Trim some outdated performance drive documentation, and the performance.png graph |
41 |
Finding Something To Do |
42 |
======================= |
|
43 |
||
44 |
Ad-hoc performance work can also be done. One useful tool is the 'evil' debug |
|
45 |
flag. For instance running ``bzr -Devil commit -m "test"`` will log a backtrace |
|
46 |
to the bzr log file for every method call which triggers a slow or non-scalable |
|
47 |
part of the bzr library. So checking that a given command with ``-Devil`` has |
|
48 |
no backtraces logged to the log file is a good way to find problem function |
|
49 |
calls that might be nested deep in the code base. |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
50 |
|
51 |
Planning and Discussing Changes |
|
52 |
=============================== |
|
53 |
||
54 |
There is a very active community around Bazaar. Mostly we meet on IRC |
|
55 |
(#bzr on irc.freenode.net) and on the mailing list. To join the Bazaar |
|
56 |
community, see http://bazaar-vcs.org/BzrSupport. |
|
57 |
||
58 |
If you are planning to make a change, it's a very good idea to mention it |
|
59 |
on the IRC channel and/or on the mailing list. There are many advantages |
|
60 |
to involving the community before you spend much time on a change. |
|
61 |
These include: |
|
62 |
||
|
4926.2.1
by Toon Nolten
Corrected two typos in HACKING.txt |
63 |
* you get to build on the wisdom of others, saving time |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
64 |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
65 |
* if others can direct you to similar code, it minimises the work to be done |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
66 |
|
67 |
* it assists everyone in coordinating direction, priorities and effort. |
|
68 |
||
69 |
In summary, maximising the input from others typically minimises the |
|
70 |
total effort required to get your changes merged. The community is |
|
71 |
friendly, helpful and always keen to welcome newcomers. |
|
72 |
||
73 |
||
74 |
Bazaar Development in a Nutshell |
|
75 |
================================ |
|
76 |
||
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
77 |
.. was from bazaar-vcs.org/BzrGivingBack |
78 |
||
79 |
One of the fun things about working on a version control system like Bazaar is |
|
80 |
that the users have a high level of proficiency in contributing back into |
|
81 |
the tool. Consider the following very brief introduction to contributing back |
|
82 |
to Bazaar. More detailed instructions are in the following sections. |
|
83 |
||
84 |
Making the change |
|
85 |
----------------- |
|
86 |
||
87 |
First, get a local copy of the development mainline (See `Why make a local |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
88 |
copy of bzr.dev?`_.) |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
89 |
:: |
90 |
||
91 |
$ bzr init-repo ~/bzr |
|
92 |
$ cd ~/bzr |
|
93 |
$ bzr branch http://bazaar-vcs.org/bzr/bzr.dev/ bzr.dev |
|
94 |
||
95 |
Now make your own branch:: |
|
96 |
||
|
4595.5.3
by John Arbash Meinel
Suggest a task-specific branch, rather than a generic 'giveback' branch. |
97 |
$ bzr branch bzr.dev 123456-my-bugfix |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
98 |
|
|
4595.5.3
by John Arbash Meinel
Suggest a task-specific branch, rather than a generic 'giveback' branch. |
99 |
This will give you a branch called "123456-my-bugfix" that you can work on |
100 |
and commit in. Here, you can study the code, make a fix or a new feature. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
101 |
Feel free to commit early and often (after all, it's your branch!). |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
102 |
|
103 |
Documentation improvements are an easy place to get started giving back to the |
|
104 |
Bazaar project. The documentation is in the `doc/` subdirectory of the Bazaar |
|
105 |
source tree. |
|
106 |
||
107 |
When you are done, make sure that you commit your last set of changes as well! |
|
108 |
Once you are happy with your changes, ask for them to be merged, as described |
|
109 |
below. |
|
110 |
||
111 |
Making a Merge Proposal |
|
112 |
----------------------- |
|
113 |
||
114 |
The Bazaar developers use Launchpad to further enable a truly distributed |
|
115 |
style of development. Anyone can propose a branch for merging into the Bazaar |
|
116 |
trunk. To start this process, you need to push your branch to Launchpad. To |
|
117 |
do this, you will need a Launchpad account and user name, e.g. |
|
118 |
`your_lp_username`. You can push your branch to Launchpad directly from |
|
119 |
Bazaar:: |
|
120 |
||
|
5016.2.1
by Vincent Ladeuil
Try getting better banch names for submissions. |
121 |
$ bzr push lp:~your_lp_username/bzr/meaningful_name_here |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
122 |
|
123 |
After you have pushed your branch, you will need to propose it for merging to |
|
|
5016.2.1
by Vincent Ladeuil
Try getting better banch names for submissions. |
124 |
the Bazaar trunk. Go to |
125 |
<https://launchpad.net/your_lp_username/bzr/meaningful_name_here> and choose |
|
126 |
"Propose for merging into another branch". Select "~bzr/bzr/trunk" to hand |
|
127 |
your changes off to the Bazaar developers for review and merging. |
|
128 |
||
|
5225.2.7
by Martin Pool
Clean up and improve code review and contribution guidelines. |
129 |
Alternatively, after pushing you can use the ``lp-propose`` command to |
130 |
create the merge proposal. |
|
131 |
||
|
5016.2.1
by Vincent Ladeuil
Try getting better banch names for submissions. |
132 |
Using a meaningful name for your branch will help you and the reviewer(s) |
133 |
better track the submission. Use a very succint description of your submission |
|
134 |
and prefix it with bug number if needed (lp:~mbp/bzr/484558-merge-directory |
|
|
5016.2.2
by Vincent Ladeuil
Review comment: let's bikeshed !! |
135 |
for example). Alternatively, you can suffix with the bug number |
136 |
(lp:~jameinel/bzr/export-file-511987). |
|
137 |
||
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
138 |
|
|
5225.2.7
by Martin Pool
Clean up and improve code review and contribution guidelines. |
139 |
Review cover letters |
140 |
-------------------- |
|
141 |
||
142 |
Please put a "cover letter" on your merge request explaining: |
|
143 |
||
144 |
* the reason **why** you're making this change |
|
145 |
||
146 |
* **how** this change achieves this purpose |
|
147 |
||
148 |
* anything else you may have fixed in passing |
|
149 |
||
150 |
* anything significant that you thought of doing, such as a more |
|
151 |
extensive fix or a different approach, but didn't or couldn't do now |
|
152 |
||
153 |
A good cover letter makes reviewers' lives easier because they can decide |
|
154 |
from the letter whether they agree with the purpose and approach, and then |
|
155 |
assess whether the patch actually does what the cover letter says. |
|
156 |
Explaining any "drive-by fixes" or roads not taken may also avoid queries |
|
157 |
from the reviewer. All in all this should give faster and better reviews. |
|
158 |
Sometimes writing the cover letter helps the submitter realize something |
|
159 |
else they need to do. The size of the cover letter should be proportional |
|
160 |
to the size and complexity of the patch. |
|
161 |
||
162 |
||
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
163 |
Why make a local copy of bzr.dev? |
164 |
--------------------------------- |
|
165 |
||
166 |
Making a local mirror of bzr.dev is not strictly necessary, but it means |
|
167 |
||
168 |
- You can use that copy of bzr.dev as your main bzr executable, and keep it |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
169 |
up-to-date using ``bzr pull``. |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
170 |
- Certain operations are faster, and can be done when offline. For example: |
171 |
||
172 |
- ``bzr bundle`` |
|
173 |
- ``bzr diff -r ancestor:...`` |
|
174 |
- ``bzr merge`` |
|
175 |
||
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
176 |
- When it's time to create your next branch, it's more convenient. When you |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
177 |
have further contributions to make, you should do them in their own branch:: |
178 |
||
179 |
$ cd ~/bzr |
|
180 |
$ bzr branch bzr.dev additional_fixes |
|
181 |
$ cd additional_fixes # hack, hack, hack |
|
182 |
||
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
183 |
|
184 |
||
185 |
Understanding the Development Process |
|
186 |
===================================== |
|
187 |
||
|
3683.1.1
by Martin Pool
Improved review process docs and separate out architectural overview |
188 |
The development team follows many practices including: |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
189 |
|
190 |
* a public roadmap and planning process in which anyone can participate |
|
191 |
||
|
2466.6.2
by Ian Clatworthy
Incorporate feedback from LarstiQ |
192 |
* time based milestones everyone can work towards and plan around |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
193 |
|
194 |
* extensive code review and feedback to contributors |
|
195 |
||
196 |
* complete and rigorous test coverage on any code contributed |
|
197 |
||
198 |
* automated validation that all tests still pass before code is merged |
|
199 |
into the main code branch. |
|
200 |
||
201 |
The key tools we use to enable these practices are: |
|
202 |
||
203 |
* Launchpad - https://launchpad.net/ |
|
204 |
||
205 |
* Bazaar - http://bazaar-vcs.org/ |
|
206 |
||
207 |
* Patch Queue Manager - https://launchpad.net/pqm/ |
|
208 |
||
|
5225.2.2
by Martin Pool
Bundle buggy's no longer in use |
209 |
For further information, see <http://wiki.bazaar.canonical.com/BzrDevelopment>. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
210 |
|
211 |
||
212 |
||
213 |
||
214 |
Preparing a Sandbox for Making Changes to Bazaar |
|
215 |
================================================ |
|
216 |
||
|
2466.6.2
by Ian Clatworthy
Incorporate feedback from LarstiQ |
217 |
Bazaar supports many ways of organising your work. See |
218 |
http://bazaar-vcs.org/SharedRepositoryLayouts for a summary of the |
|
219 |
popular alternatives. |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
220 |
|
221 |
Of course, the best choice for you will depend on numerous factors: |
|
222 |
the number of changes you may be making, the complexity of the changes, etc. |
|
223 |
As a starting suggestion though: |
|
224 |
||
225 |
* create a local copy of the main development branch (bzr.dev) by using |
|
|
2475.2.4
by Martin Pool
HACKING rest fixes from jam |
226 |
this command:: |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
227 |
|
|
2475.2.4
by Martin Pool
HACKING rest fixes from jam |
228 |
bzr branch http://bazaar-vcs.org/bzr/bzr.dev/ bzr.dev |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
229 |
|
|
4595.5.2
by Neil Martinsen-Burrell
Include bazaar-vcs.org/BzrGivingBack in HACKING.txt; fix typos in HACKING.txt |
230 |
* keep your copy of bzr.dev pristine (by not developing in it) and keep |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
231 |
it up to date (by using bzr pull) |
232 |
||
233 |
* create a new branch off your local bzr.dev copy for each issue |
|
234 |
(bug or feature) you are working on. |
|
235 |
||
236 |
This approach makes it easy to go back and make any required changes |
|
237 |
after a code review. Resubmitting the change is then simple with no |
|
|
4595.5.2
by Neil Martinsen-Burrell
Include bazaar-vcs.org/BzrGivingBack in HACKING.txt; fix typos in HACKING.txt |
238 |
risk of accidentally including edits related to other issues you may |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
239 |
be working on. After the changes for an issue are accepted and merged, |
240 |
the associated branch can be deleted or archived as you wish. |
|
241 |
||
242 |
||
243 |
Navigating the Code Base |
|
244 |
======================== |
|
245 |
||
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
246 |
.. Was at <http://bazaar-vcs.org/NewDeveloperIntroduction> |
247 |
||
248 |
Some of the key files in this directory are: |
|
249 |
||
250 |
bzr |
|
251 |
The command you run to start Bazaar itself. This script is pretty |
|
252 |
short and just does some checks then jumps into bzrlib. |
|
253 |
||
254 |
README |
|
255 |
This file covers a brief introduction to Bazaar and lists some of its |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
256 |
key features. |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
257 |
|
258 |
NEWS |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
259 |
Summary of changes in each Bazaar release that can affect users or |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
260 |
plugin developers. |
261 |
||
262 |
setup.py |
|
263 |
Installs Bazaar system-wide or to your home directory. To perform |
|
264 |
development work on Bazaar it is not required to run this file - you |
|
265 |
can simply run the bzr command from the top level directory of your |
|
266 |
development copy. Note: That if you run setup.py this will create a |
|
267 |
'build' directory in your development branch. There's nothing wrong |
|
268 |
with this but don't be confused by it. The build process puts a copy |
|
269 |
of the main code base into this build directory, along with some other |
|
270 |
files. You don't need to go in here for anything discussed in this |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
271 |
guide. |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
272 |
|
273 |
bzrlib |
|
274 |
Possibly the most exciting folder of all, bzrlib holds the main code |
|
275 |
base. This is where you will go to edit python files and contribute to |
|
276 |
Bazaar. |
|
277 |
||
278 |
doc |
|
279 |
Holds documentation on a whole range of things on Bazaar from the |
|
280 |
origination of ideas within the project to information on Bazaar |
|
281 |
features and use cases. Within this directory there is a subdirectory |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
282 |
for each translation into a human language. All the documentation |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
283 |
is in the ReStructuredText markup language. |
284 |
||
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
285 |
doc/developers |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
286 |
Documentation specifically targeted at Bazaar and plugin developers. |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
287 |
(Including this document.) |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
288 |
|
289 |
||
290 |
||
291 |
Automatically-generated API reference information is available at |
|
292 |
<http://starship.python.net/crew/mwh/bzrlibapi/>. |
|
|
3683.1.1
by Martin Pool
Improved review process docs and separate out architectural overview |
293 |
|
|
4634.39.36
by Ian Clatworthy
Get plain-style documentation generation working again |
294 |
See also the `Bazaar Architectural Overview |
295 |
<http://doc.bazaar-vcs.org/developers/overview.html>`_. |
|
|
3683.1.1
by Martin Pool
Improved review process docs and separate out architectural overview |
296 |
|
297 |
||
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
298 |
Core Topics |
299 |
########### |
|
300 |
||
301 |
Evolving Interfaces |
|
302 |
=================== |
|
303 |
||
|
4719.2.1
by Martin Pool
Tweak documentation about stable interfaces |
304 |
We don't change APIs in stable branches: any supported symbol in a stable |
305 |
release of bzr must not be altered in any way that would result in |
|
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
306 |
breaking existing code that uses it. That means that method names, |
307 |
parameter ordering, parameter names, variable and attribute names etc must |
|
308 |
not be changed without leaving a 'deprecated forwarder' behind. This even |
|
309 |
applies to modules and classes. |
|
310 |
||
311 |
If you wish to change the behaviour of a supported API in an incompatible |
|
312 |
way, you need to change its name as well. For instance, if I add an optional keyword |
|
313 |
parameter to branch.commit - that's fine. On the other hand, if I add a |
|
314 |
keyword parameter to branch.commit which is a *required* transaction |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
315 |
object, I should rename the API - i.e. to 'branch.commit_transaction'. |
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
316 |
|
|
4719.2.1
by Martin Pool
Tweak documentation about stable interfaces |
317 |
(Actually, that may break code that provides a new implementation of |
318 |
``commit`` and doesn't expect to receive the parameter.) |
|
319 |
||
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
320 |
When renaming such supported API's, be sure to leave a deprecated_method (or |
321 |
_function or ...) behind which forwards to the new API. See the |
|
322 |
bzrlib.symbol_versioning module for decorators that take care of the |
|
323 |
details for you - such as updating the docstring, and issuing a warning |
|
|
4595.5.2
by Neil Martinsen-Burrell
Include bazaar-vcs.org/BzrGivingBack in HACKING.txt; fix typos in HACKING.txt |
324 |
when the old API is used. |
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
325 |
|
326 |
For unsupported API's, it does not hurt to follow this discipline, but it's |
|
327 |
not required. Minimally though, please try to rename things so that |
|
328 |
callers will at least get an AttributeError rather than weird results. |
|
329 |
||
330 |
||
331 |
Deprecation decorators |
|
332 |
---------------------- |
|
333 |
||
334 |
``bzrlib.symbol_versioning`` provides decorators that can be attached to |
|
335 |
methods, functions, and other interfaces to indicate that they should no |
|
|
3408.1.9
by Martin Pool
Use new-style deprecated_in |
336 |
longer be used. For example:: |
337 |
||
338 |
@deprecated_method(deprecated_in((0, 1, 4))) |
|
339 |
def foo(self): |
|
340 |
return self._new_foo() |
|
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
341 |
|
342 |
To deprecate a static method you must call ``deprecated_function`` |
|
343 |
(**not** method), after the staticmethod call:: |
|
344 |
||
345 |
@staticmethod |
|
|
3408.1.9
by Martin Pool
Use new-style deprecated_in |
346 |
@deprecated_function(deprecated_in((0, 1, 4))) |
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
347 |
def create_repository(base, shared=False, format=None): |
348 |
||
349 |
When you deprecate an API, you should not just delete its tests, because |
|
350 |
then we might introduce bugs in them. If the API is still present at all, |
|
351 |
it should still work. The basic approach is to use |
|
352 |
``TestCase.applyDeprecated`` which in one step checks that the API gives |
|
353 |
the expected deprecation message, and also returns the real result from |
|
354 |
the method, so that tests can keep running. |
|
355 |
||
|
3427.5.9
by John Arbash Meinel
merge bzr.dev, move update to new location in HACKING |
356 |
Deprecation warnings will be suppressed for final releases, but not for |
357 |
development versions or release candidates, or when running ``bzr |
|
358 |
selftest``. This gives developers information about whether their code is |
|
359 |
using deprecated functions, but avoids confusing users about things they |
|
360 |
can't fix. |
|
361 |
||
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
362 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
363 |
Getting Input |
364 |
============= |
|
365 |
||
366 |
Processing Command Lines |
|
367 |
------------------------ |
|
368 |
||
369 |
bzrlib has a standard framework for parsing command lines and calling |
|
370 |
processing routines associated with various commands. See builtins.py |
|
|
2466.6.2
by Ian Clatworthy
Incorporate feedback from LarstiQ |
371 |
for numerous examples. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
372 |
|
373 |
||
374 |
Standard Parameter Types |
|
375 |
------------------------ |
|
376 |
||
377 |
There are some common requirements in the library: some parameters need to be |
|
378 |
unicode safe, some need byte strings, and so on. At the moment we have |
|
379 |
only codified one specific pattern: Parameters that need to be unicode |
|
380 |
should be checked via ``bzrlib.osutils.safe_unicode``. This will coerce the |
|
381 |
input into unicode in a consistent fashion, allowing trivial strings to be |
|
382 |
used for programmer convenience, but not performing unpredictably in the |
|
383 |
presence of different locales. |
|
384 |
||
385 |
||
386 |
Writing Output |
|
|
1098
by Martin Pool
- notes on how output is written |
387 |
============== |
388 |
||
389 |
(The strategy described here is what we want to get to, but it's not |
|
390 |
consistently followed in the code at the moment.) |
|
391 |
||
392 |
bzrlib is intended to be a generically reusable library. It shouldn't |
|
393 |
write messages to stdout or stderr, because some programs that use it |
|
394 |
might want to display that information through a GUI or some other |
|
395 |
mechanism. |
|
396 |
||
397 |
We can distinguish two types of output from the library: |
|
398 |
||
399 |
1. Structured data representing the progress or result of an |
|
400 |
operation. For example, for a commit command this will be a list |
|
401 |
of the modified files and the finally committed revision number |
|
402 |
and id. |
|
403 |
||
404 |
These should be exposed either through the return code or by calls |
|
405 |
to a callback parameter. |
|
406 |
||
407 |
A special case of this is progress indicators for long-lived |
|
408 |
operations, where the caller should pass a ProgressBar object. |
|
409 |
||
410 |
2. Unstructured log/debug messages, mostly for the benefit of the |
|
411 |
developers or users trying to debug problems. This should always |
|
412 |
be sent through ``bzrlib.trace`` and Python ``logging``, so that |
|
413 |
it can be redirected by the client. |
|
414 |
||
415 |
The distinction between the two is a bit subjective, but in general if |
|
416 |
there is any chance that a library would want to see something as |
|
417 |
structured data, we should make it so. |
|
418 |
||
419 |
The policy about how output is presented in the text-mode client |
|
420 |
should be only in the command-line tool. |
|
|
1092.1.22
by Robert Collins
update hacking with some test foo |
421 |
|
|
1418
by Robert Collins
merge martins latest |
422 |
|
|
4110.2.20
by Martin Pool
Developer docs of progress bars |
423 |
Progress and Activity Indications |
424 |
--------------------------------- |
|
425 |
||
426 |
bzrlib has a way for code to display to the user that stuff is happening |
|
427 |
during a long operation. There are two particular types: *activity* which |
|
428 |
means that IO is happening on a Transport, and *progress* which means that |
|
429 |
higher-level application work is occurring. Both are drawn together by |
|
430 |
the `ui_factory`. |
|
431 |
||
432 |
Transport objects are responsible for calling `report_transport_activity` |
|
433 |
when they do IO. |
|
434 |
||
435 |
Progress uses a model/view pattern: application code acts on a |
|
436 |
`ProgressTask` object, which notifies the UI when it needs to be |
|
437 |
displayed. Progress tasks form a stack. To create a new progress task on |
|
438 |
top of the stack, call `bzrlib.ui.ui_factory.nested_progress_bar()`, then |
|
439 |
call `update()` on the returned ProgressTask. It can be updated with just |
|
440 |
a text description, with a numeric count, or with a numeric count and |
|
441 |
expected total count. If an expected total count is provided the view |
|
442 |
can show the progress moving along towards the expected total. |
|
443 |
||
444 |
The user should call `finish` on the `ProgressTask` when the logical |
|
445 |
operation has finished, so it can be removed from the stack. |
|
446 |
||
|
4595.5.2
by Neil Martinsen-Burrell
Include bazaar-vcs.org/BzrGivingBack in HACKING.txt; fix typos in HACKING.txt |
447 |
Progress tasks have a complex relationship with generators: it's a very |
|
4110.2.20
by Martin Pool
Developer docs of progress bars |
448 |
good place to use them, but because python2.4 does not allow ``finally`` |
449 |
blocks in generators it's hard to clean them up properly. In this case |
|
450 |
it's probably better to have the code calling the generator allocate a |
|
451 |
progress task for its use and then call `finalize` when it's done, which |
|
452 |
will close it if it was not already closed. The generator should also |
|
453 |
finish the progress task when it exits, because it may otherwise be a long |
|
454 |
time until the finally block runs. |
|
455 |
||
|
5117.2.2
by Martin Pool
Clear up UI style guideline |
456 |
|
457 |
Message guidelines |
|
458 |
------------------ |
|
|
5117.2.1
by Martin Pool
Document quoting of filenames |
459 |
|
460 |
When filenames or similar variables are presented inline within a message, |
|
461 |
they should be enclosed in double quotes (ascii 0x22, not chiral unicode |
|
462 |
quotes):: |
|
463 |
||
|
5117.2.2
by Martin Pool
Clear up UI style guideline |
464 |
bzr: ERROR: No such file "asdf" |
|
5117.2.1
by Martin Pool
Document quoting of filenames |
465 |
|
466 |
When we print just a list of filenames there should not be any quoting: |
|
|
5117.2.3
by Martin Pool
ReST typo correct |
467 |
see `bug 544297`_. |
|
5117.2.1
by Martin Pool
Document quoting of filenames |
468 |
|
469 |
.. _bug 544297: https://bugs.launchpad.net/bugs/544297 |
|
470 |
||
|
5117.2.2
by Martin Pool
Clear up UI style guideline |
471 |
https://wiki.ubuntu.com/UnitsPolicy provides a good explanation about |
472 |
which unit should be used when. Roughly speaking, IEC standard applies |
|
473 |
for base-2 units and SI standard applies for base-10 units: |
|
474 |
||
|
5117.2.4
by Martin Pool
fix typo |
475 |
* for network bandwidth and disk sizes, use base-10 (Mbits/s, kB/s, GB) |
|
5117.2.2
by Martin Pool
Clear up UI style guideline |
476 |
|
477 |
* for RAM sizes, use base-2 (GiB, TiB) |
|
478 |
||
479 |
||
|
5117.2.1
by Martin Pool
Document quoting of filenames |
480 |
|
|
2598.1.1
by Martin Pool
Add test for and documentation of option style, fix up existing options to comply |
481 |
Displaying help |
482 |
=============== |
|
483 |
||
484 |
Bazaar has online help for various topics through ``bzr help COMMAND`` or |
|
485 |
equivalently ``bzr command -h``. We also have help on command options, |
|
486 |
and on other help topics. (See ``help_topics.py``.) |
|
487 |
||
488 |
As for python docstrings, the first paragraph should be a single-sentence |
|
|
5131.2.2
by Martin
Catch a couple of missed plugin module docstrings, note need for assignment to __doc__ in developer documentation and NEWS |
489 |
synopsis of the command. These are user-visible and should be prefixed with |
490 |
``__doc__ =`` so help works under ``python -OO`` with docstrings stripped. |
|
|
2598.1.1
by Martin Pool
Add test for and documentation of option style, fix up existing options to comply |
491 |
|
492 |
The help for options should be one or more proper sentences, starting with |
|
493 |
a capital letter and finishing with a full stop (period). |
|
494 |
||
495 |
All help messages and documentation should have two spaces between |
|
496 |
sentences. |
|
497 |
||
498 |
||
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
499 |
Handling Errors and Exceptions |
500 |
============================== |
|
501 |
||
502 |
Commands should return non-zero when they encounter circumstances that |
|
503 |
the user should really pay attention to - which includes trivial shell |
|
504 |
pipelines. |
|
505 |
||
506 |
Recommended values are: |
|
507 |
||
508 |
0. OK. |
|
509 |
1. Conflicts in merge-like operations, or changes are present in |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
510 |
diff-like operations. |
511 |
2. Unrepresentable diff changes (i.e. binary files that we cannot show |
|
|
2475.2.4
by Martin Pool
HACKING rest fixes from jam |
512 |
a diff of). |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
513 |
3. An error or exception has occurred. |
|
2713.2.2
by Martin Pool
Add mention of exitcode 4 for internal errors |
514 |
4. An internal error occurred (one that shows a traceback.) |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
515 |
|
516 |
Errors are handled through Python exceptions. Exceptions should be defined |
|
517 |
inside bzrlib.errors, so that we can see the whole tree at a glance. |
|
518 |
||
519 |
We broadly classify errors as either being either internal or not, |
|
|
3882.4.2
by Martin Pool
Tweak documentation of exception classes |
520 |
depending on whether ``internal_error`` is set or not. If we think it's our |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
521 |
fault, we show a backtrace, an invitation to report the bug, and possibly |
522 |
other details. This is the default for errors that aren't specifically |
|
523 |
recognized as being caused by a user error. Otherwise we show a briefer |
|
524 |
message, unless -Derror was given. |
|
525 |
||
526 |
Many errors originate as "environmental errors" which are raised by Python |
|
527 |
or builtin libraries -- for example IOError. These are treated as being |
|
528 |
our fault, unless they're caught in a particular tight scope where we know |
|
529 |
that they indicate a user errors. For example if the repository format |
|
530 |
is not found, the user probably gave the wrong path or URL. But if one of |
|
531 |
the files inside the repository is not found, then it's our fault -- |
|
532 |
either there's a bug in bzr, or something complicated has gone wrong in |
|
533 |
the environment that means one internal file was deleted. |
|
534 |
||
535 |
Many errors are defined in ``bzrlib/errors.py`` but it's OK for new errors |
|
536 |
to be added near the place where they are used. |
|
537 |
||
538 |
Exceptions are formatted for the user by conversion to a string |
|
539 |
(eventually calling their ``__str__`` method.) As a convenience the |
|
540 |
``._fmt`` member can be used as a template which will be mapped to the |
|
541 |
error's instance dict. |
|
542 |
||
543 |
New exception classes should be defined when callers might want to catch |
|
544 |
that exception specifically, or when it needs a substantially different |
|
545 |
format string. |
|
546 |
||
|
3882.4.1
by Martin Pool
Developer documentation about when to add new exception classes |
547 |
#. If it is something that a caller can recover from, a custom exception |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
548 |
is reasonable. |
|
3882.4.1
by Martin Pool
Developer documentation about when to add new exception classes |
549 |
|
550 |
#. If it is a data consistency issue, using a builtin like |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
551 |
``ValueError``/``TypeError`` is reasonable. |
|
3882.4.1
by Martin Pool
Developer documentation about when to add new exception classes |
552 |
|
553 |
#. If it is a programmer error (using an api incorrectly) |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
554 |
``AssertionError`` is reasonable. |
|
3882.4.1
by Martin Pool
Developer documentation about when to add new exception classes |
555 |
|
|
3882.4.2
by Martin Pool
Tweak documentation of exception classes |
556 |
#. Otherwise, use ``BzrError`` or ``InternalBzrError``. |
|
3882.4.1
by Martin Pool
Developer documentation about when to add new exception classes |
557 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
558 |
Exception strings should start with a capital letter and should not have a |
559 |
final fullstop. If long, they may contain newlines to break the text. |
|
560 |
||
561 |
||
|
3376.2.3
by Martin Pool
Updated info about assertions |
562 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
563 |
Documenting Changes |
564 |
=================== |
|
565 |
||
566 |
When you change bzrlib, please update the relevant documentation for the |
|
567 |
change you made: Changes to commands should update their help, and |
|
568 |
possibly end user tutorials; changes to the core library should be |
|
569 |
reflected in API documentation. |
|
570 |
||
571 |
NEWS File |
|
572 |
--------- |
|
573 |
||
574 |
If you make a user-visible change, please add a note to the NEWS file. |
|
575 |
The description should be written to make sense to someone who's just |
|
576 |
a user of bzr, not a developer: new functions or classes shouldn't be |
|
577 |
mentioned, but new commands, changes in behaviour or fixed nontrivial |
|
578 |
bugs should be listed. See the existing entries for an idea of what |
|
579 |
should be done. |
|
580 |
||
581 |
Within each release, entries in the news file should have the most |
|
582 |
user-visible changes first. So the order should be approximately: |
|
583 |
||
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
584 |
* changes to existing behaviour - the highest priority because the |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
585 |
user's existing knowledge is incorrect |
586 |
* new features - should be brought to their attention |
|
587 |
* bug fixes - may be of interest if the bug was affecting them, and |
|
588 |
should include the bug number if any |
|
|
4980.1.2
by Neil Martinsen-Burrell
clarify where docs bugs go |
589 |
* major documentation changes, including fixed documentation bugs |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
590 |
* changes to internal interfaces |
591 |
||
592 |
People who made significant contributions to each change are listed in |
|
593 |
parenthesis. This can include reporting bugs (particularly with good |
|
594 |
details or reproduction recipes), submitting patches, etc. |
|
595 |
||
|
4980.1.1
by Neil Martinsen-Burrell
mention a sort order for NEWS entries |
596 |
To help with merging, NEWS entries should be sorted lexicographically |
597 |
within each section. |
|
598 |
||
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
599 |
Commands |
600 |
-------- |
|
601 |
||
602 |
The docstring of a command is used by ``bzr help`` to generate help output |
|
603 |
for the command. The list 'takes_options' attribute on a command is used by |
|
604 |
``bzr help`` to document the options for the command - the command |
|
605 |
docstring does not need to document them. Finally, the '_see_also' |
|
606 |
attribute on a command can be used to reference other related help topics. |
|
607 |
||
608 |
API Documentation |
|
609 |
----------------- |
|
610 |
||
611 |
Functions, methods, classes and modules should have docstrings |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
612 |
describing how they are used. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
613 |
|
614 |
The first line of the docstring should be a self-contained sentence. |
|
615 |
||
616 |
For the special case of Command classes, this acts as the user-visible |
|
617 |
documentation shown by the help command. |
|
618 |
||
619 |
The docstrings should be formatted as reStructuredText_ (like this |
|
620 |
document), suitable for processing using the epydoc_ tool into HTML |
|
621 |
documentation. |
|
622 |
||
623 |
.. _reStructuredText: http://docutils.sourceforge.net/rst.html |
|
624 |
.. _epydoc: http://epydoc.sourceforge.net/ |
|
625 |
||
626 |
||
627 |
General Guidelines |
|
628 |
================== |
|
629 |
||
630 |
Copyright |
|
631 |
--------- |
|
632 |
||
633 |
The copyright policy for bzr was recently made clear in this email (edited |
|
634 |
for grammatical correctness):: |
|
635 |
||
636 |
The attached patch cleans up the copyright and license statements in |
|
637 |
the bzr source. It also adds tests to help us remember to add them |
|
638 |
with the correct text. |
|
639 |
||
640 |
We had the problem that lots of our files were "Copyright Canonical |
|
641 |
Development Ltd" which is not a real company, and some other variations |
|
642 |
on this theme. Also, some files were missing the GPL statements. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
643 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
644 |
I want to be clear about the intent of this patch, since copyright can |
645 |
be a little controversial. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
646 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
647 |
1) The big motivation for this is not to shut out the community, but |
648 |
just to clean up all of the invalid copyright statements. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
649 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
650 |
2) It has been the general policy for bzr that we want a single |
651 |
copyright holder for all of the core code. This is following the model |
|
652 |
set by the FSF, which makes it easier to update the code to a new |
|
653 |
license in case problems are encountered. (For example, if we want to |
|
654 |
upgrade the project universally to GPL v3 it is much simpler if there is |
|
655 |
a single copyright holder). It also makes it clearer if copyright is |
|
656 |
ever debated, there is a single holder, which makes it easier to defend |
|
657 |
in court, etc. (I think the FSF position is that if you assign them |
|
658 |
copyright, they can defend it in court rather than you needing to, and |
|
659 |
I'm sure Canonical would do the same). |
|
660 |
As such, Canonical has requested copyright assignments from all of the |
|
661 |
major contributers. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
662 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
663 |
3) If someone wants to add code and not attribute it to Canonical, there |
664 |
is a specific list of files that are excluded from this check. And the |
|
665 |
test failure indicates where that is, and how to update it. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
666 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
667 |
4) If anyone feels that I changed a copyright statement incorrectly, just |
668 |
let me know, and I'll be happy to correct it. Whenever you have large |
|
669 |
mechanical changes like this, it is possible to make some mistakes. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
670 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
671 |
Just to reiterate, this is a community project, and it is meant to stay |
672 |
that way. Core bzr code is copyright Canonical for legal reasons, and |
|
673 |
the tests are just there to help us maintain that. |
|
674 |
||
675 |
||
676 |
Miscellaneous Topics |
|
677 |
#################### |
|
678 |
||
679 |
Debugging |
|
680 |
========= |
|
681 |
||
682 |
Bazaar has a few facilities to help debug problems by going into pdb_, the |
|
683 |
Python debugger. |
|
684 |
||
685 |
.. _pdb: http://docs.python.org/lib/debugger-commands.html |
|
686 |
||
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
687 |
If the ``BZR_PDB`` environment variable is set |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
688 |
then bzr will go into pdb post-mortem mode when an unhandled exception |
689 |
occurs. |
|
690 |
||
|
4578.1.3
by John Arbash Meinel
NEWS and HACKING entries. |
691 |
If you send a SIGQUIT or SIGBREAK signal to bzr then it will drop into the |
692 |
debugger immediately. SIGQUIT can be generated by pressing Ctrl-\\ on |
|
693 |
Unix. SIGBREAK is generated with Ctrl-Pause on Windows (some laptops have |
|
694 |
this as Fn-Pause). You can continue execution by typing ``c``. This can |
|
695 |
be disabled if necessary by setting the environment variable |
|
696 |
``BZR_SIGQUIT_PDB=0``. |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
697 |
|
698 |
||
|
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
699 |
Debug Flags |
700 |
=========== |
|
701 |
||
702 |
Bazaar accepts some global options starting with ``-D`` such as |
|
703 |
``-Dhpss``. These set a value in `bzrlib.debug.debug_flags`, and |
|
704 |
typically cause more information to be written to the trace file. Most |
|
705 |
`mutter` calls should be guarded by a check of those flags so that we |
|
706 |
don't write out too much information if it's not needed. |
|
707 |
||
708 |
Debug flags may have effects other than just emitting trace messages. |
|
709 |
||
710 |
Run ``bzr help global-options`` to see them all. |
|
711 |
||
|
4070.8.2
by Martin Pool
Initial support for debug_flags config option |
712 |
These flags may also be set as a comma-separated list in the |
713 |
``debug_flags`` option in e.g. ``~/.bazaar/bazaar.conf``. (Note that it |
|
714 |
must be in this global file, not in the branch or location configuration, |
|
715 |
because it's currently only loaded at startup time.) For instance you may |
|
716 |
want to always record hpss traces and to see full error tracebacks:: |
|
717 |
||
718 |
debug_flags = hpss, error |
|
719 |
||
|
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
720 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
721 |
Jargon |
722 |
====== |
|
723 |
||
724 |
revno |
|
725 |
Integer identifier for a revision on the main line of a branch. |
|
726 |
Revision 0 is always the null revision; others are 1-based |
|
727 |
indexes into the branch's revision history. |
|
728 |
||
729 |
||
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
730 |
Unicode and Encoding Support |
731 |
============================ |
|
732 |
||
733 |
This section discusses various techniques that Bazaar uses to handle |
|
734 |
characters that are outside the ASCII set. |
|
735 |
||
736 |
``Command.outf`` |
|
737 |
---------------- |
|
738 |
||
739 |
When a ``Command`` object is created, it is given a member variable |
|
740 |
accessible by ``self.outf``. This is a file-like object, which is bound to |
|
741 |
``sys.stdout``, and should be used to write information to the screen, |
|
742 |
rather than directly writing to ``sys.stdout`` or calling ``print``. |
|
743 |
This file has the ability to translate Unicode objects into the correct |
|
|
1711.2.96
by John Arbash Meinel
cleanup from suggestions by Robert and Martin |
744 |
representation, based on the console encoding. Also, the class attribute |
745 |
``encoding_type`` will effect how unprintable characters will be |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
746 |
handled. This parameter can take one of 3 values: |
747 |
||
748 |
replace |
|
|
1711.2.96
by John Arbash Meinel
cleanup from suggestions by Robert and Martin |
749 |
Unprintable characters will be represented with a suitable replacement |
750 |
marker (typically '?'), and no exception will be raised. This is for |
|
751 |
any command which generates text for the user to review, rather than |
|
752 |
for automated processing. |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
753 |
For example: ``bzr log`` should not fail if one of the entries has text |
754 |
that cannot be displayed. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
755 |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
756 |
strict |
|
2063.3.1
by wang
fix typos |
757 |
Attempting to print an unprintable character will cause a UnicodeError. |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
758 |
This is for commands that are intended more as scripting support, rather |
759 |
than plain user review. |
|
|
4595.5.2
by Neil Martinsen-Burrell
Include bazaar-vcs.org/BzrGivingBack in HACKING.txt; fix typos in HACKING.txt |
760 |
For example: ``bzr ls`` is designed to be used with shell scripting. One |
761 |
use would be ``bzr ls --null --unknowns | xargs -0 rm``. If ``bzr`` |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
762 |
printed a filename with a '?', the wrong file could be deleted. (At the |
763 |
very least, the correct file would not be deleted). An error is used to |
|
764 |
indicate that the requested action could not be performed. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
765 |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
766 |
exact |
767 |
Do not attempt to automatically convert Unicode strings. This is used |
|
768 |
for commands that must handle conversion themselves. |
|
769 |
For example: ``bzr diff`` needs to translate Unicode paths, but should |
|
770 |
not change the exact text of the contents of the files. |
|
771 |
||
772 |
||
773 |
``bzrlib.urlutils.unescape_for_display`` |
|
774 |
---------------------------------------- |
|
775 |
||
776 |
Because Transports work in URLs (as defined earlier), printing the raw URL |
|
777 |
to the user is usually less than optimal. Characters outside the standard |
|
778 |
set are printed as escapes, rather than the real character, and local |
|
779 |
paths would be printed as ``file://`` urls. The function |
|
780 |
``unescape_for_display`` attempts to unescape a URL, such that anything |
|
781 |
that cannot be printed in the current encoding stays an escaped URL, but |
|
782 |
valid characters are generated where possible. |
|
783 |
||
784 |
||
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
785 |
C Extension Modules |
786 |
=================== |
|
787 |
||
788 |
We write some extensions in C using pyrex. We design these to work in |
|
789 |
three scenarios: |
|
|
2449.1.1
by Alexander Belchenko
fix RSTX wrong formatting in HACKING |
790 |
|
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
791 |
* User with no C compiler |
792 |
* User with C compiler |
|
793 |
* Developers |
|
794 |
||
795 |
The recommended way to install bzr is to have a C compiler so that the |
|
796 |
extensions can be built, but if no C compiler is present, the pure python |
|
797 |
versions we supply will work, though more slowly. |
|
798 |
||
799 |
For developers we recommend that pyrex be installed, so that the C |
|
800 |
extensions can be changed if needed. |
|
801 |
||
802 |
For the C extensions, the extension module should always match the |
|
803 |
original python one in all respects (modulo speed). This should be |
|
804 |
maintained over time. |
|
805 |
||
806 |
To create an extension, add rules to setup.py for building it with pyrex, |
|
807 |
and with distutils. Now start with an empty .pyx file. At the top add |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
808 |
"include 'yourmodule.py'". This will import the contents of foo.py into this |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
809 |
file at build time - remember that only one module will be loaded at |
810 |
runtime. Now you can subclass classes, or replace functions, and only your |
|
811 |
changes need to be present in the .pyx file. |
|
812 |
||
813 |
Note that pyrex does not support all 2.4 programming idioms, so some |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
814 |
syntax changes may be required. I.e. |
|
2449.1.1
by Alexander Belchenko
fix RSTX wrong formatting in HACKING |
815 |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
816 |
- 'from foo import (bar, gam)' needs to change to not use the brackets. |
817 |
- 'import foo.bar as bar' needs to be 'import foo.bar; bar = foo.bar' |
|
|
2449.1.1
by Alexander Belchenko
fix RSTX wrong formatting in HACKING |
818 |
|
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
819 |
If the changes are too dramatic, consider |
820 |
maintaining the python code twice - once in the .pyx, and once in the .py, |
|
821 |
and no longer including the .py file. |
|
822 |
||
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
823 |
|
824 |
Making Installers for OS Windows |
|
|
1861.2.19
by Alexander Belchenko
HACKING: mention where to get instructions for building windows installers |
825 |
================================ |
|
1861.2.20
by Alexander Belchenko
English |
826 |
To build a win32 installer, see the instructions on the wiki page: |
|
1861.2.19
by Alexander Belchenko
HACKING: mention where to get instructions for building windows installers |
827 |
http://bazaar-vcs.org/BzrWin32Installer |
828 |
||
829 |
||
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
830 |
Core Developer Tasks |
831 |
#################### |
|
832 |
||
833 |
Overview |
|
834 |
======== |
|
835 |
||
836 |
What is a Core Developer? |
|
837 |
------------------------- |
|
838 |
||
839 |
While everyone in the Bazaar community is welcome and encouraged to |
|
840 |
propose and submit changes, a smaller team is reponsible for pulling those |
|
841 |
changes together into a cohesive whole. In addition to the general developer |
|
842 |
stuff covered above, "core" developers have responsibility for: |
|
843 |
||
844 |
* reviewing changes |
|
845 |
* reviewing blueprints |
|
846 |
* planning releases |
|
|
4634.39.36
by Ian Clatworthy
Get plain-style documentation generation working again |
847 |
* managing releases (see `Releasing Bazaar <http://doc.bazaar-vcs.org/developers/releasing.html>`_) |
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
848 |
|
849 |
.. note:: |
|
850 |
Removing barriers to community participation is a key reason for adopting |
|
851 |
distributed VCS technology. While DVCS removes many technical barriers, |
|
852 |
a small number of social barriers are often necessary instead. |
|
853 |
By documenting how the above things are done, we hope to |
|
854 |
encourage more people to participate in these activities, keeping the |
|
855 |
differences between core and non-core contributors to a minimum. |
|
856 |
||
857 |
||
858 |
Communicating and Coordinating |
|
859 |
------------------------------ |
|
860 |
||
861 |
While it has many advantages, one of the challenges of distributed |
|
862 |
development is keeping everyone else aware of what you're working on. |
|
863 |
There are numerous ways to do this: |
|
864 |
||
865 |
#. Assign bugs to yourself in Launchpad |
|
866 |
#. Mention it on the mailing list |
|
867 |
#. Mention it on IRC |
|
868 |
||
869 |
As well as the email notifcations that occur when merge requests are sent |
|
870 |
and reviewed, you can keep others informed of where you're spending your |
|
871 |
energy by emailing the **bazaar-commits** list implicitly. To do this, |
|
872 |
install and configure the Email plugin. One way to do this is add these |
|
873 |
configuration settings to your central configuration file (e.g. |
|
874 |
``~/.bazaar/bazaar.conf`` on Linux):: |
|
875 |
||
876 |
[DEFAULT] |
|
877 |
email = Joe Smith <joe.smith@internode.on.net> |
|
878 |
smtp_server = mail.internode.on.net:25 |
|
879 |
||
880 |
Then add these lines for the relevant branches in ``locations.conf``:: |
|
881 |
||
882 |
post_commit_to = bazaar-commits@lists.canonical.com |
|
883 |
post_commit_mailer = smtplib |
|
884 |
||
885 |
While attending a sprint, RobertCollins' Dbus plugin is useful for the |
|
886 |
same reason. See the documentation within the plugin for information on |
|
887 |
how to set it up and configure it. |
|
888 |
||
889 |
||
890 |
Submitting Changes |
|
891 |
================== |
|
892 |
||
893 |
An Overview of PQM |
|
894 |
------------------ |
|
895 |
||
896 |
Of the many workflows supported by Bazaar, the one adopted for Bazaar |
|
897 |
development itself is known as "Decentralized with automatic gatekeeper". |
|
898 |
To repeat the explanation of this given on |
|
899 |
http://bazaar-vcs.org/Workflows: |
|
900 |
||
901 |
.. pull-quote:: |
|
902 |
In this workflow, each developer has their own branch or |
|
903 |
branches, plus read-only access to the mainline. A software gatekeeper |
|
904 |
(e.g. PQM) has commit rights to the main branch. When a developer wants |
|
905 |
their work merged, they request the gatekeeper to merge it. The gatekeeper |
|
906 |
does a merge, a compile, and runs the test suite. If the code passes, it |
|
907 |
is merged into the mainline. |
|
908 |
||
909 |
In a nutshell, here's the overall submission process: |
|
910 |
||
911 |
#. get your work ready (including review except for trivial changes) |
|
912 |
#. push to a public location |
|
913 |
#. ask PQM to merge from that location |
|
914 |
||
915 |
.. note:: |
|
916 |
At present, PQM always takes the changes to merge from a branch |
|
917 |
at a URL that can be read by it. For Bazaar, that means a public, |
|
918 |
typically http, URL. |
|
919 |
||
920 |
As a result, the following things are needed to use PQM for submissions: |
|
921 |
||
922 |
#. A publicly available web server |
|
923 |
#. Your OpenPGP key registered with PQM (contact RobertCollins for this) |
|
924 |
#. The PQM plugin installed and configured (not strictly required but |
|
925 |
highly recommended). |
|
926 |
||
927 |
||
928 |
Selecting a Public Branch Location |
|
929 |
---------------------------------- |
|
930 |
||
931 |
If you don't have your own web server running, branches can always be |
|
932 |
pushed to Launchpad. Here's the process for doing that: |
|
933 |
||
934 |
Depending on your location throughout the world and the size of your |
|
935 |
repository though, it is often quicker to use an alternative public |
|
936 |
location to Launchpad, particularly if you can set up your own repo and |
|
937 |
push into that. By using an existing repo, push only needs to send the |
|
938 |
changes, instead of the complete repository every time. Note that it is |
|
939 |
easy to register branches in other locations with Launchpad so no benefits |
|
940 |
are lost by going this way. |
|
941 |
||
942 |
.. note:: |
|
943 |
For Canonical staff, http://people.ubuntu.com/~<user>/ is one |
|
944 |
suggestion for public http branches. Contact your manager for information |
|
945 |
on accessing this system if required. |
|
946 |
||
947 |
It should also be noted that best practice in this area is subject to |
|
948 |
change as things evolve. For example, once the Bazaar smart server on |
|
949 |
Launchpad supports server-side branching, the performance situation will |
|
950 |
be very different to what it is now (Jun 2007). |
|
951 |
||
952 |
||
953 |
Configuring the PQM Plug-In |
|
954 |
--------------------------- |
|
955 |
||
956 |
While not strictly required, the PQM plugin automates a few things and |
|
957 |
reduces the chance of error. Before looking at the plugin, it helps to |
|
958 |
understand a little more how PQM operates. Basically, PQM requires an |
|
959 |
email indicating what you want it to do. The email typically looks like |
|
960 |
this:: |
|
961 |
||
962 |
star-merge source-branch target-branch |
|
963 |
||
964 |
For example:: |
|
965 |
||
966 |
star-merge http://bzr.arbash-meinel.com/branches/bzr/jam-integration http://bazaar-vcs.org/bzr/bzr.dev |
|
967 |
||
968 |
Note that the command needs to be on one line. The subject of the email |
|
969 |
will be used for the commit message. The email also needs to be ``gpg`` |
|
970 |
signed with a key that PQM accepts. |
|
971 |
||
972 |
The advantages of using the PQM plugin are: |
|
973 |
||
974 |
#. You can use the config policies to make it easy to set up public |
|
975 |
branches, so you don't have to ever type the full paths you want to merge |
|
976 |
from or into. |
|
977 |
||
978 |
#. It checks to make sure the public branch last revision matches the |
|
979 |
local last revision so you are submitting what you think you are. |
|
980 |
||
981 |
#. It uses the same public_branch and smtp sending settings as bzr-email, |
|
982 |
so if you have one set up, you have the other mostly set up. |
|
983 |
||
984 |
#. Thunderbird refuses to not wrap lines, and request lines are usually |
|
985 |
pretty long (you have 2 long URLs in there). |
|
986 |
||
987 |
Here are sample configuration settings for the PQM plugin. Here are the |
|
988 |
lines in bazaar.conf:: |
|
989 |
||
990 |
[DEFAULT] |
|
991 |
email = Joe Smith <joe.smith@internode.on.net> |
|
992 |
smtp_server=mail.internode.on.net:25 |
|
993 |
||
994 |
And here are the lines in ``locations.conf`` (or ``branch.conf`` for |
|
995 |
dirstate-tags branches):: |
|
996 |
||
997 |
[/home/joe/bzr/my-integration] |
|
998 |
push_location = sftp://joe-smith@bazaar.launchpad.net/%7Ejoe-smith/bzr/my-integration/ |
|
999 |
push_location:policy = norecurse |
|
1000 |
public_branch = http://bazaar.launchpad.net/~joe-smith/bzr/my-integration/ |
|
1001 |
public_branch:policy = appendpath |
|
1002 |
pqm_email = Bazaar PQM <pqm@bazaar-vcs.org> |
|
1003 |
pqm_branch = http://bazaar-vcs.org/bzr/bzr.dev |
|
1004 |
||
1005 |
Note that the push settings will be added by the first ``push`` on |
|
1006 |
a branch. Indeed the preferred way to generate the lines above is to use |
|
1007 |
``push`` with an argument, then copy-and-paste the other lines into |
|
1008 |
the relevant file. |
|
1009 |
||
1010 |
||
1011 |
Submitting a Change |
|
1012 |
------------------- |
|
1013 |
||
1014 |
Here is one possible recipe once the above environment is set up: |
|
1015 |
||
1016 |
#. pull bzr.dev => my-integration |
|
1017 |
#. merge patch => my-integration |
|
1018 |
#. fix up any final merge conflicts (NEWS being the big killer here). |
|
1019 |
#. commit |
|
1020 |
#. push |
|
1021 |
#. pqm-submit |
|
1022 |
||
1023 |
.. note:: |
|
1024 |
The ``push`` step is not required if ``my-integration`` is a checkout of |
|
1025 |
a public branch. |
|
1026 |
||
1027 |
Because of defaults, you can type a single message into commit and |
|
1028 |
pqm-commit will reuse that. |
|
1029 |
||
1030 |
||
1031 |
Tracking Change Acceptance |
|
1032 |
-------------------------- |
|
1033 |
||
1034 |
The web interface to PQM is https://pqm.bazaar-vcs.org/. After submitting |
|
1035 |
a change, you can visit this URL to confirm it was received and placed in |
|
1036 |
PQM's queue. |
|
1037 |
||
1038 |
When PQM completes processing a change, an email is sent to you with the |
|
1039 |
results. |
|
1040 |
||
1041 |
||
1042 |
Planning Releases |
|
1043 |
================= |
|
1044 |
||
1045 |
||
1046 |
Bug Triage |
|
1047 |
---------- |
|
1048 |
||
1049 |
Keeping on top of bugs reported is an important part of ongoing release |
|
1050 |
planning. Everyone in the community is welcome and encouraged to raise |
|
1051 |
bugs, confirm bugs raised by others, and nominate a priority. Practically |
|
1052 |
though, a good percentage of bug triage is often done by the core |
|
1053 |
developers, partially because of their depth of product knowledge. |
|
1054 |
||
1055 |
With respect to bug triage, core developers are encouraged to play an |
|
1056 |
active role with particular attention to the following tasks: |
|
1057 |
||
1058 |
* keeping the number of unconfirmed bugs low |
|
1059 |
* ensuring the priorities are generally right (everything as critical - or |
|
1060 |
medium - is meaningless) |
|
1061 |
* looking out for regressions and turning those around sooner rather than later. |
|
1062 |
||
1063 |
.. note:: |
|
1064 |
As well as prioritizing bugs and nominating them against a |
|
1065 |
target milestone, Launchpad lets core developers offer to mentor others in |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
1066 |
fixing them. |
|
3314.1.1
by Martin Pool
Add Developer's Guide text about PPA builds |
1067 |
|
1068 |
||
|
2475.2.4
by Martin Pool
HACKING rest fixes from jam |
1069 |
.. |
1070 |
vim: ft=rst tw=74 ai |