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 |
General Guidelines |
363 |
================== |
|
364 |
||
365 |
Copyright |
|
366 |
--------- |
|
367 |
||
368 |
The copyright policy for bzr was recently made clear in this email (edited |
|
369 |
for grammatical correctness):: |
|
370 |
||
371 |
The attached patch cleans up the copyright and license statements in |
|
372 |
the bzr source. It also adds tests to help us remember to add them |
|
373 |
with the correct text. |
|
374 |
||
375 |
We had the problem that lots of our files were "Copyright Canonical |
|
376 |
Development Ltd" which is not a real company, and some other variations |
|
377 |
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 |
378 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
379 |
I want to be clear about the intent of this patch, since copyright can |
380 |
be a little controversial. |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
381 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
382 |
1) The big motivation for this is not to shut out the community, but |
383 |
just to clean up all of the invalid copyright statements. |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
384 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
385 |
2) It has been the general policy for bzr that we want a single |
386 |
copyright holder for all of the core code. This is following the model |
|
387 |
set by the FSF, which makes it easier to update the code to a new |
|
388 |
license in case problems are encountered. (For example, if we want to |
|
389 |
upgrade the project universally to GPL v3 it is much simpler if there is |
|
390 |
a single copyright holder). It also makes it clearer if copyright is |
|
391 |
ever debated, there is a single holder, which makes it easier to defend |
|
392 |
in court, etc. (I think the FSF position is that if you assign them |
|
393 |
copyright, they can defend it in court rather than you needing to, and |
|
394 |
I'm sure Canonical would do the same). |
|
395 |
As such, Canonical has requested copyright assignments from all of the |
|
396 |
major contributers. |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
397 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
398 |
3) If someone wants to add code and not attribute it to Canonical, there |
399 |
is a specific list of files that are excluded from this check. And the |
|
400 |
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 |
401 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
402 |
4) If anyone feels that I changed a copyright statement incorrectly, just |
403 |
let me know, and I'll be happy to correct it. Whenever you have large |
|
404 |
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 |
405 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
406 |
Just to reiterate, this is a community project, and it is meant to stay |
407 |
that way. Core bzr code is copyright Canonical for legal reasons, and |
|
408 |
the tests are just there to help us maintain that. |
|
409 |
||
410 |
||
411 |
Miscellaneous Topics |
|
412 |
#################### |
|
413 |
||
414 |
Debugging |
|
415 |
========= |
|
416 |
||
417 |
Bazaar has a few facilities to help debug problems by going into pdb_, the |
|
418 |
Python debugger. |
|
419 |
||
420 |
.. _pdb: http://docs.python.org/lib/debugger-commands.html |
|
421 |
||
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
422 |
If the ``BZR_PDB`` environment variable is set |
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
423 |
then bzr will go into pdb post-mortem mode when an unhandled exception |
424 |
occurs. |
|
425 |
||
4578.1.3
by John Arbash Meinel
NEWS and HACKING entries. |
426 |
If you send a SIGQUIT or SIGBREAK signal to bzr then it will drop into the |
427 |
debugger immediately. SIGQUIT can be generated by pressing Ctrl-\\ on |
|
428 |
Unix. SIGBREAK is generated with Ctrl-Pause on Windows (some laptops have |
|
429 |
this as Fn-Pause). You can continue execution by typing ``c``. This can |
|
430 |
be disabled if necessary by setting the environment variable |
|
431 |
``BZR_SIGQUIT_PDB=0``. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
432 |
|
433 |
||
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
434 |
Debug Flags |
435 |
=========== |
|
436 |
||
437 |
Bazaar accepts some global options starting with ``-D`` such as |
|
438 |
``-Dhpss``. These set a value in `bzrlib.debug.debug_flags`, and |
|
439 |
typically cause more information to be written to the trace file. Most |
|
440 |
`mutter` calls should be guarded by a check of those flags so that we |
|
441 |
don't write out too much information if it's not needed. |
|
442 |
||
443 |
Debug flags may have effects other than just emitting trace messages. |
|
444 |
||
445 |
Run ``bzr help global-options`` to see them all. |
|
446 |
||
4070.8.2
by Martin Pool
Initial support for debug_flags config option |
447 |
These flags may also be set as a comma-separated list in the |
448 |
``debug_flags`` option in e.g. ``~/.bazaar/bazaar.conf``. (Note that it |
|
449 |
must be in this global file, not in the branch or location configuration, |
|
450 |
because it's currently only loaded at startup time.) For instance you may |
|
451 |
want to always record hpss traces and to see full error tracebacks:: |
|
452 |
||
453 |
debug_flags = hpss, error |
|
454 |
||
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
455 |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
456 |
Jargon |
457 |
====== |
|
458 |
||
459 |
revno |
|
460 |
Integer identifier for a revision on the main line of a branch. |
|
461 |
Revision 0 is always the null revision; others are 1-based |
|
462 |
indexes into the branch's revision history. |
|
463 |
||
464 |
||
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
465 |
Unicode and Encoding Support |
466 |
============================ |
|
467 |
||
468 |
This section discusses various techniques that Bazaar uses to handle |
|
469 |
characters that are outside the ASCII set. |
|
470 |
||
471 |
``Command.outf`` |
|
472 |
---------------- |
|
473 |
||
474 |
When a ``Command`` object is created, it is given a member variable |
|
475 |
accessible by ``self.outf``. This is a file-like object, which is bound to |
|
476 |
``sys.stdout``, and should be used to write information to the screen, |
|
477 |
rather than directly writing to ``sys.stdout`` or calling ``print``. |
|
478 |
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 |
479 |
representation, based on the console encoding. Also, the class attribute |
480 |
``encoding_type`` will effect how unprintable characters will be |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
481 |
handled. This parameter can take one of 3 values: |
482 |
||
483 |
replace |
|
1711.2.96
by John Arbash Meinel
cleanup from suggestions by Robert and Martin |
484 |
Unprintable characters will be represented with a suitable replacement |
485 |
marker (typically '?'), and no exception will be raised. This is for |
|
486 |
any command which generates text for the user to review, rather than |
|
487 |
for automated processing. |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
488 |
For example: ``bzr log`` should not fail if one of the entries has text |
489 |
that cannot be displayed. |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
490 |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
491 |
strict |
2063.3.1
by wang
fix typos |
492 |
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. |
493 |
This is for commands that are intended more as scripting support, rather |
494 |
than plain user review. |
|
4595.5.2
by Neil Martinsen-Burrell
Include bazaar-vcs.org/BzrGivingBack in HACKING.txt; fix typos in HACKING.txt |
495 |
For example: ``bzr ls`` is designed to be used with shell scripting. One |
496 |
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. |
497 |
printed a filename with a '?', the wrong file could be deleted. (At the |
498 |
very least, the correct file would not be deleted). An error is used to |
|
499 |
indicate that the requested action could not be performed. |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
500 |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
501 |
exact |
502 |
Do not attempt to automatically convert Unicode strings. This is used |
|
503 |
for commands that must handle conversion themselves. |
|
504 |
For example: ``bzr diff`` needs to translate Unicode paths, but should |
|
505 |
not change the exact text of the contents of the files. |
|
506 |
||
507 |
||
508 |
``bzrlib.urlutils.unescape_for_display`` |
|
509 |
---------------------------------------- |
|
510 |
||
511 |
Because Transports work in URLs (as defined earlier), printing the raw URL |
|
512 |
to the user is usually less than optimal. Characters outside the standard |
|
513 |
set are printed as escapes, rather than the real character, and local |
|
5538.2.3
by Zearin
Continued capitalization fixes. (URL, URLs) |
514 |
paths would be printed as ``file://`` URLs. The function |
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
515 |
``unescape_for_display`` attempts to unescape a URL, such that anything |
516 |
that cannot be printed in the current encoding stays an escaped URL, but |
|
517 |
valid characters are generated where possible. |
|
518 |
||
519 |
||
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
520 |
C Extension Modules |
521 |
=================== |
|
522 |
||
523 |
We write some extensions in C using pyrex. We design these to work in |
|
524 |
three scenarios: |
|
2449.1.1
by Alexander Belchenko
fix RSTX wrong formatting in HACKING |
525 |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
526 |
* User with no C compiler |
527 |
* User with C compiler |
|
528 |
* Developers |
|
529 |
||
530 |
The recommended way to install bzr is to have a C compiler so that the |
|
531 |
extensions can be built, but if no C compiler is present, the pure python |
|
532 |
versions we supply will work, though more slowly. |
|
533 |
||
534 |
For developers we recommend that pyrex be installed, so that the C |
|
535 |
extensions can be changed if needed. |
|
536 |
||
537 |
For the C extensions, the extension module should always match the |
|
538 |
original python one in all respects (modulo speed). This should be |
|
539 |
maintained over time. |
|
540 |
||
541 |
To create an extension, add rules to setup.py for building it with pyrex, |
|
542 |
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 |
543 |
"include 'yourmodule.py'". This will import the contents of foo.py into this |
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
544 |
file at build time - remember that only one module will be loaded at |
545 |
runtime. Now you can subclass classes, or replace functions, and only your |
|
546 |
changes need to be present in the .pyx file. |
|
547 |
||
548 |
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 |
549 |
syntax changes may be required. I.e. |
2449.1.1
by Alexander Belchenko
fix RSTX wrong formatting in HACKING |
550 |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
551 |
- 'from foo import (bar, gam)' needs to change to not use the brackets. |
552 |
- '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 |
553 |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
554 |
If the changes are too dramatic, consider |
555 |
maintaining the python code twice - once in the .pyx, and once in the .py, |
|
556 |
and no longer including the .py file. |
|
557 |
||
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
558 |
|
559 |
Making Installers for OS Windows |
|
1861.2.19
by Alexander Belchenko
HACKING: mention where to get instructions for building windows installers |
560 |
================================ |
1861.2.20
by Alexander Belchenko
English |
561 |
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. |
562 |
http://wiki.bazaar.canonical.com/BzrWin32Installer |
1861.2.19
by Alexander Belchenko
HACKING: mention where to get instructions for building windows installers |
563 |
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
564 |
Core Developer Tasks |
565 |
#################### |
|
566 |
||
567 |
Overview |
|
568 |
======== |
|
569 |
||
570 |
What is a Core Developer? |
|
571 |
------------------------- |
|
572 |
||
573 |
While everyone in the Bazaar community is welcome and encouraged to |
|
574 |
propose and submit changes, a smaller team is reponsible for pulling those |
|
575 |
changes together into a cohesive whole. In addition to the general developer |
|
576 |
stuff covered above, "core" developers have responsibility for: |
|
577 |
||
578 |
* reviewing changes |
|
579 |
* reviewing blueprints |
|
580 |
* planning releases |
|
5261.2.1
by Parth Malwankar
added 'Portability Tip' on explicitly closing file to code-style. |
581 |
* 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 |
582 |
|
583 |
.. note:: |
|
584 |
Removing barriers to community participation is a key reason for adopting |
|
585 |
distributed VCS technology. While DVCS removes many technical barriers, |
|
586 |
a small number of social barriers are often necessary instead. |
|
587 |
By documenting how the above things are done, we hope to |
|
588 |
encourage more people to participate in these activities, keeping the |
|
589 |
differences between core and non-core contributors to a minimum. |
|
590 |
||
591 |
||
592 |
Communicating and Coordinating |
|
593 |
------------------------------ |
|
594 |
||
595 |
While it has many advantages, one of the challenges of distributed |
|
596 |
development is keeping everyone else aware of what you're working on. |
|
597 |
There are numerous ways to do this: |
|
598 |
||
599 |
#. Assign bugs to yourself in Launchpad |
|
600 |
#. Mention it on the mailing list |
|
601 |
#. Mention it on IRC |
|
602 |
||
603 |
As well as the email notifcations that occur when merge requests are sent |
|
604 |
and reviewed, you can keep others informed of where you're spending your |
|
605 |
energy by emailing the **bazaar-commits** list implicitly. To do this, |
|
606 |
install and configure the Email plugin. One way to do this is add these |
|
607 |
configuration settings to your central configuration file (e.g. |
|
5278.1.5
by Martin Pool
Correct more sloppy use of the term 'Linux' |
608 |
``~/.bazaar/bazaar.conf``):: |
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
609 |
|
610 |
[DEFAULT] |
|
611 |
email = Joe Smith <joe.smith@internode.on.net> |
|
612 |
smtp_server = mail.internode.on.net:25 |
|
613 |
||
614 |
Then add these lines for the relevant branches in ``locations.conf``:: |
|
615 |
||
616 |
post_commit_to = bazaar-commits@lists.canonical.com |
|
617 |
post_commit_mailer = smtplib |
|
618 |
||
619 |
While attending a sprint, RobertCollins' Dbus plugin is useful for the |
|
620 |
same reason. See the documentation within the plugin for information on |
|
621 |
how to set it up and configure it. |
|
622 |
||
623 |
||
624 |
||
625 |
Planning Releases |
|
626 |
================= |
|
627 |
||
628 |
||
629 |
Bug Triage |
|
630 |
---------- |
|
631 |
||
632 |
Keeping on top of bugs reported is an important part of ongoing release |
|
633 |
planning. Everyone in the community is welcome and encouraged to raise |
|
634 |
bugs, confirm bugs raised by others, and nominate a priority. Practically |
|
635 |
though, a good percentage of bug triage is often done by the core |
|
636 |
developers, partially because of their depth of product knowledge. |
|
637 |
||
638 |
With respect to bug triage, core developers are encouraged to play an |
|
639 |
active role with particular attention to the following tasks: |
|
640 |
||
641 |
* keeping the number of unconfirmed bugs low |
|
642 |
* ensuring the priorities are generally right (everything as critical - or |
|
643 |
medium - is meaningless) |
|
644 |
* looking out for regressions and turning those around sooner rather than later. |
|
645 |
||
646 |
.. note:: |
|
647 |
As well as prioritizing bugs and nominating them against a |
|
648 |
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 |
649 |
fixing them. |
3314.1.1
by Martin Pool
Add Developer's Guide text about PPA builds |
650 |
|
651 |
||
2475.2.4
by Martin Pool
HACKING rest fixes from jam |
652 |
.. |
653 |
vim: ft=rst tw=74 ai |