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