bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
1 |
====================== |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
2 |
Breezy Developer Guide |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
3 |
====================== |
|
974.1.26
by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472 |
4 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
5 |
This document describes the Breezy internals and the development process. |
6 |
It's meant for people interested in developing Breezy, and some parts will |
|
7 |
also be useful to people developing Breezy plugins. |
|
|
3314.1.1
by Martin Pool
Add Developer's Guide text about PPA builds |
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 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
11 |
the Breezy mailing list. To propose a correction or addition to this |
|
3314.1.1
by Martin Pool
Add Developer's Guide text about PPA builds |
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 |
|
7192.3.6
by Jelmer Vernooij
Update lots of URLs. |
15 |
https://www.breezy-vcs.org/developers/. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
16 |
|
17 |
Getting Started |
|
18 |
############### |
|
19 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
20 |
Exploring the Breezy Platform |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
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 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
29 |
overall Breezy Platform. Here are some links to browse: |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
30 |
|
|
7530
by Gustav Hartvigsson
Fixed HACKING.txt |
31 |
.. FIXME: A new page is needed for brz plugins. |
32 |
||
33 |
* The old Bazaar Plugins page on the Wiki - http://wiki.bazaar.canonical.com/BzrPlugins |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
34 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
35 |
* The Breezy product family on Launchpad - https://launchpad.net/breezy |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
36 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
37 |
* Bug Tracker for the core product - https://bugs.launchpad.net/brz/ |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
38 |
|
39 |
If nothing else, perhaps you'll find inspiration in how other developers |
|
40 |
have solved their challenges. |
|
41 |
||
|
4424.1.1
by Martin Pool
Trim some outdated performance drive documentation, and the performance.png graph |
42 |
Finding Something To Do |
43 |
======================= |
|
44 |
||
45 |
Ad-hoc performance work can also be done. One useful tool is the 'evil' debug |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
46 |
flag. For instance running ``brz -Devil commit -m "test"`` will log a backtrace |
47 |
to the Breezy log file for every method call which triggers a slow or non-scalable |
|
48 |
part of the breezy library. So checking that a given command with ``-Devil`` has |
|
|
4424.1.1
by Martin Pool
Trim some outdated performance drive documentation, and the performance.png graph |
49 |
no backtraces logged to the log file is a good way to find problem function |
50 |
calls that might be nested deep in the code base. |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
51 |
|
52 |
Planning and Discussing Changes |
|
53 |
=============================== |
|
54 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
55 |
There is a very active community around Breezy. Mostly we meet on IRC |
56 |
(#bzr on irc.freenode.net) and on the mailing list. To join the Breezy |
|
|
7192.3.6
by Jelmer Vernooij
Update lots of URLs. |
57 |
community, see https://www.breezy-vcs.org/pages/support.html. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
58 |
|
59 |
If you are planning to make a change, it's a very good idea to mention it |
|
60 |
on the IRC channel and/or on the mailing list. There are many advantages |
|
61 |
to involving the community before you spend much time on a change. |
|
62 |
These include: |
|
63 |
||
|
4926.2.1
by Toon Nolten
Corrected two typos in HACKING.txt |
64 |
* you get to build on the wisdom of others, saving time |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
65 |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
66 |
* 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 |
67 |
|
68 |
* it assists everyone in coordinating direction, priorities and effort. |
|
69 |
||
70 |
In summary, maximising the input from others typically minimises the |
|
71 |
total effort required to get your changes merged. The community is |
|
72 |
friendly, helpful and always keen to welcome newcomers. |
|
73 |
||
74 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
75 |
Breezy Development in a Nutshell |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
76 |
================================ |
77 |
||
|
5050.22.1
by John Arbash Meinel
Lots of documentation updates. |
78 |
.. was from http://wiki.bazaar.canonical.com/BzrGivingBack |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
79 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
80 |
One of the fun things about working on a version control system like Breezy is |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
81 |
that the users have a high level of proficiency in contributing back into |
82 |
the tool. Consider the following very brief introduction to contributing back |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
83 |
to Breezy. More detailed instructions are in the following sections. |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
84 |
|
85 |
Making the change |
|
86 |
----------------- |
|
87 |
||
88 |
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 |
89 |
copy of bzr.dev?`_.) |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
90 |
:: |
91 |
||
|
7385.2.1
by Jelmer Vernooij
Rename init-repo to init-shared-repo. |
92 |
$ brz init-shared-repo ~/bzr |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
93 |
$ cd ~/bzr |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
94 |
$ brz branch lp:brz bzr.dev |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
95 |
|
96 |
Now make your own branch:: |
|
97 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
98 |
$ brz branch bzr.dev 123456-my-bugfix |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
99 |
|
|
4595.5.3
by John Arbash Meinel
Suggest a task-specific branch, rather than a generic 'giveback' branch. |
100 |
This will give you a branch called "123456-my-bugfix" that you can work on |
101 |
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 |
102 |
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 |
103 |
|
104 |
Documentation improvements are an easy place to get started giving back to the |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
105 |
Breezy project. The documentation is in the `doc/` subdirectory of the Breezy |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
106 |
source tree. |
107 |
||
108 |
When you are done, make sure that you commit your last set of changes as well! |
|
109 |
Once you are happy with your changes, ask for them to be merged, as described |
|
110 |
below. |
|
111 |
||
112 |
Making a Merge Proposal |
|
113 |
----------------------- |
|
114 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
115 |
The Breezy developers use Launchpad to further enable a truly distributed |
116 |
style of development. Anyone can propose a branch for merging into the Breezy |
|
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
117 |
trunk. To start this process, you need to push your branch to Launchpad. To |
118 |
do this, you will need a Launchpad account and user name, e.g. |
|
119 |
`your_lp_username`. You can push your branch to Launchpad directly from |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
120 |
Breezy:: |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
121 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
122 |
$ brz push lp:~<your_lp_username>/bzr/meaningful_name_here |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
123 |
|
124 |
After you have pushed your branch, you will need to propose it for merging to |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
125 |
the Breezy trunk. Go to |
|
5954.1.1
by Vincent Ladeuil
Cleanup some obviously obsolete references in HACKING and code-review. |
126 |
<https://launchpad.net/~<your_lp_username>/bzr/meaningful_name_here> and choose |
127 |
"Propose for merging into another branch". Select "lp:bzr" to hand |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
128 |
your changes off to the Breezy developers for review and merging. |
|
5016.2.1
by Vincent Ladeuil
Try getting better banch names for submissions. |
129 |
|
|
7211.13.4
by Jelmer Vernooij
Remove references to lp-propose. |
130 |
Alternatively, after pushing you can use the ``propose`` command to |
|
5225.2.7
by Martin Pool
Clean up and improve code review and contribution guidelines. |
131 |
create the merge proposal. |
132 |
||
|
5016.2.1
by Vincent Ladeuil
Try getting better banch names for submissions. |
133 |
Using a meaningful name for your branch will help you and the reviewer(s) |
134 |
better track the submission. Use a very succint description of your submission |
|
135 |
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 !! |
136 |
for example). Alternatively, you can suffix with the bug number |
137 |
(lp:~jameinel/bzr/export-file-511987). |
|
138 |
||
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
139 |
|
|
5225.2.7
by Martin Pool
Clean up and improve code review and contribution guidelines. |
140 |
Review cover letters |
141 |
-------------------- |
|
142 |
||
143 |
Please put a "cover letter" on your merge request explaining: |
|
144 |
||
145 |
* the reason **why** you're making this change |
|
146 |
||
147 |
* **how** this change achieves this purpose |
|
148 |
||
149 |
* anything else you may have fixed in passing |
|
150 |
||
151 |
* anything significant that you thought of doing, such as a more |
|
152 |
extensive fix or a different approach, but didn't or couldn't do now |
|
153 |
||
154 |
A good cover letter makes reviewers' lives easier because they can decide |
|
155 |
from the letter whether they agree with the purpose and approach, and then |
|
156 |
assess whether the patch actually does what the cover letter says. |
|
157 |
Explaining any "drive-by fixes" or roads not taken may also avoid queries |
|
158 |
from the reviewer. All in all this should give faster and better reviews. |
|
159 |
Sometimes writing the cover letter helps the submitter realize something |
|
160 |
else they need to do. The size of the cover letter should be proportional |
|
161 |
to the size and complexity of the patch. |
|
162 |
||
163 |
||
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
164 |
Why make a local copy of bzr.dev? |
165 |
--------------------------------- |
|
166 |
||
167 |
Making a local mirror of bzr.dev is not strictly necessary, but it means |
|
168 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
169 |
- You can use that copy of bzr.dev as your main brz executable, and keep it |
170 |
up-to-date using ``brz pull``. |
|
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
171 |
- Certain operations are faster, and can be done when offline. For example: |
172 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
173 |
- ``brz bundle`` |
174 |
- ``brz diff -r ancestor:...`` |
|
175 |
- ``brz merge`` |
|
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
176 |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
177 |
- 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 |
178 |
have further contributions to make, you should do them in their own branch:: |
179 |
||
180 |
$ cd ~/bzr |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
181 |
$ brz branch bzr.dev additional_fixes |
|
4595.5.1
by Neil Martinsen-Burrell
added giving back introduction from the wiki |
182 |
$ cd additional_fixes # hack, hack, hack |
183 |
||
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
184 |
|
185 |
||
186 |
Understanding the Development Process |
|
187 |
===================================== |
|
188 |
||
|
3683.1.1
by Martin Pool
Improved review process docs and separate out architectural overview |
189 |
The development team follows many practices including: |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
190 |
|
191 |
* a public roadmap and planning process in which anyone can participate |
|
192 |
||
|
2466.6.2
by Ian Clatworthy
Incorporate feedback from LarstiQ |
193 |
* time based milestones everyone can work towards and plan around |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
194 |
|
195 |
* extensive code review and feedback to contributors |
|
196 |
||
197 |
* complete and rigorous test coverage on any code contributed |
|
198 |
||
199 |
* automated validation that all tests still pass before code is merged |
|
200 |
into the main code branch. |
|
201 |
||
202 |
The key tools we use to enable these practices are: |
|
203 |
||
204 |
* Launchpad - https://launchpad.net/ |
|
205 |
||
|
6650.1.1
by Jelmer Vernooij
Update homepage URL. |
206 |
* Breezy - https://www.breezy-vcs.org/ |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
207 |
|
208 |
* Patch Queue Manager - https://launchpad.net/pqm/ |
|
209 |
||
|
7531
by Gustav Hartvigsson
Added 'Case Preserving Working Tree Use Cases' from Canonical Wiki |
210 |
For further information, see https://www.breezy-vcs.org/developers/. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
211 |
|
212 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
213 |
Preparing a Sandbox for Making Changes to Breezy |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
214 |
================================================ |
215 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
216 |
Breezy 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 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
227 |
brz branch lp:brz 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 |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
230 |
it up to date (by using brz pull) |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
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 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
250 |
The command you run to start Breezy itself. This script is pretty |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
251 |
short and just does some checks then jumps into bzrlib. |
252 |
||
|
6929.2.2
by Jelmer Vernooij
README -> README.rst in more places. |
253 |
README.rst |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
254 |
This file covers a brief introduction to Breezy 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 |
setup.py |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
258 |
Installs Breezy system-wide or to your home directory. To perform |
259 |
development work on Breezy it is not required to run this file - you |
|
260 |
can simply run the Breezy command from the top level directory of your |
|
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
261 |
development copy. Note: That if you run setup.py this will create a |
262 |
'build' directory in your development branch. There's nothing wrong |
|
263 |
with this but don't be confused by it. The build process puts a copy |
|
264 |
of the main code base into this build directory, along with some other |
|
265 |
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 |
266 |
guide. |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
267 |
|
268 |
bzrlib |
|
269 |
Possibly the most exciting folder of all, bzrlib holds the main code |
|
270 |
base. This is where you will go to edit python files and contribute to |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
271 |
Breezy. |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
272 |
|
273 |
doc |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
274 |
Holds documentation on a whole range of things on Breezy from the |
275 |
origination of ideas within the project to information on Breezy |
|
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
276 |
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 |
277 |
for each translation into a human language. All the documentation |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
278 |
is in the ReStructuredText markup language. |
279 |
||
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
280 |
doc/developers |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
281 |
Documentation specifically targeted at Breezy and plugin developers. |
|
3464.3.4
by Martin Pool
Merge part of the NewDeveloperIntroduction into HACKING |
282 |
(Including this document.) |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
283 |
|
|
5954.1.1
by Vincent Ladeuil
Cleanup some obviously obsolete references in HACKING and code-review. |
284 |
doc/en/release-notes/ |
285 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
286 |
Detailed changes in each Breezy release (there is one file by series: |
|
5954.1.1
by Vincent Ladeuil
Cleanup some obviously obsolete references in HACKING and code-review. |
287 |
bzr-2.3.txt, bzr-2.4.txt, etc) that can affect users or plugin |
288 |
developers. |
|
289 |
||
290 |
doc/en/whats-new/ |
|
291 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
292 |
High-level summaries of changes in each Breezy release (there is one |
|
5954.1.1
by Vincent Ladeuil
Cleanup some obviously obsolete references in HACKING and code-review. |
293 |
file by series: whats-new-in-2.3.txt, whats-new-in-2.4.txt, etc). |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
294 |
|
295 |
||
296 |
Automatically-generated API reference information is available at |
|
|
7531
by Gustav Hartvigsson
Added 'Case Preserving Working Tree Use Cases' from Canonical Wiki |
297 |
https://www.breezy-vcs.org/developers/api/. |
|
3683.1.1
by Martin Pool
Improved review process docs and separate out architectural overview |
298 |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
299 |
See also the `Breezy Architectural Overview |
|
7192.3.6
by Jelmer Vernooij
Update lots of URLs. |
300 |
<https://www.breezy-vcs.org/developers/overview.html>`_. |
|
3683.1.1
by Martin Pool
Improved review process docs and separate out architectural overview |
301 |
|
302 |
||
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
303 |
Core Topics |
304 |
########### |
|
305 |
||
306 |
Evolving Interfaces |
|
307 |
=================== |
|
308 |
||
|
4719.2.1
by Martin Pool
Tweak documentation about stable interfaces |
309 |
We don't change APIs in stable branches: any supported symbol in a stable |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
310 |
release of Breezy 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 |
311 |
breaking existing code that uses it. That means that method names, |
312 |
parameter ordering, parameter names, variable and attribute names etc must |
|
313 |
not be changed without leaving a 'deprecated forwarder' behind. This even |
|
314 |
applies to modules and classes. |
|
315 |
||
316 |
If you wish to change the behaviour of a supported API in an incompatible |
|
317 |
way, you need to change its name as well. For instance, if I add an optional keyword |
|
318 |
parameter to branch.commit - that's fine. On the other hand, if I add a |
|
319 |
keyword parameter to branch.commit which is a *required* transaction |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
320 |
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 |
321 |
|
|
4719.2.1
by Martin Pool
Tweak documentation about stable interfaces |
322 |
(Actually, that may break code that provides a new implementation of |
323 |
``commit`` and doesn't expect to receive the parameter.) |
|
324 |
||
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
325 |
When renaming such supported API's, be sure to leave a deprecated_method (or |
326 |
_function or ...) behind which forwards to the new API. See the |
|
327 |
bzrlib.symbol_versioning module for decorators that take care of the |
|
328 |
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 |
329 |
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 |
330 |
|
331 |
For unsupported API's, it does not hurt to follow this discipline, but it's |
|
332 |
not required. Minimally though, please try to rename things so that |
|
333 |
callers will at least get an AttributeError rather than weird results. |
|
334 |
||
335 |
||
336 |
Deprecation decorators |
|
337 |
---------------------- |
|
338 |
||
339 |
``bzrlib.symbol_versioning`` provides decorators that can be attached to |
|
340 |
methods, functions, and other interfaces to indicate that they should no |
|
|
3408.1.9
by Martin Pool
Use new-style deprecated_in |
341 |
longer be used. For example:: |
342 |
||
343 |
@deprecated_method(deprecated_in((0, 1, 4))) |
|
344 |
def foo(self): |
|
345 |
return self._new_foo() |
|
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
346 |
|
347 |
To deprecate a static method you must call ``deprecated_function`` |
|
348 |
(**not** method), after the staticmethod call:: |
|
349 |
||
350 |
@staticmethod |
|
|
3408.1.9
by Martin Pool
Use new-style deprecated_in |
351 |
@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 |
352 |
def create_repository(base, shared=False, format=None): |
353 |
||
354 |
When you deprecate an API, you should not just delete its tests, because |
|
355 |
then we might introduce bugs in them. If the API is still present at all, |
|
356 |
it should still work. The basic approach is to use |
|
357 |
``TestCase.applyDeprecated`` which in one step checks that the API gives |
|
358 |
the expected deprecation message, and also returns the real result from |
|
359 |
the method, so that tests can keep running. |
|
360 |
||
|
3427.5.9
by John Arbash Meinel
merge bzr.dev, move update to new location in HACKING |
361 |
Deprecation warnings will be suppressed for final releases, but not for |
362 |
development versions or release candidates, or when running ``bzr |
|
363 |
selftest``. This gives developers information about whether their code is |
|
364 |
using deprecated functions, but avoids confusing users about things they |
|
365 |
can't fix. |
|
366 |
||
|
3408.1.7
by Martin Pool
Move coding standards to be a top-level section in the developer guide |
367 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
368 |
General Guidelines |
369 |
================== |
|
370 |
||
371 |
Miscellaneous Topics |
|
372 |
#################### |
|
373 |
||
374 |
Debugging |
|
375 |
========= |
|
376 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
377 |
Breezy has a few facilities to help debug problems by going into pdb_, the |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
378 |
Python debugger. |
379 |
||
380 |
.. _pdb: http://docs.python.org/lib/debugger-commands.html |
|
381 |
||
|
7490.130.1
by Jelmer Vernooij
Rename bzr to brz in a few more places. |
382 |
If the ``BRZ_PDB`` environment variable is set |
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
383 |
then brz will go into pdb post-mortem mode when an unhandled exception |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
384 |
occurs. |
385 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
386 |
If you send a SIGQUIT or SIGBREAK signal to brz then it will drop into the |
|
4578.1.3
by John Arbash Meinel
NEWS and HACKING entries. |
387 |
debugger immediately. SIGQUIT can be generated by pressing Ctrl-\\ on |
388 |
Unix. SIGBREAK is generated with Ctrl-Pause on Windows (some laptops have |
|
389 |
this as Fn-Pause). You can continue execution by typing ``c``. This can |
|
390 |
be disabled if necessary by setting the environment variable |
|
|
7490.130.1
by Jelmer Vernooij
Rename bzr to brz in a few more places. |
391 |
``BRZ_SIGQUIT_PDB=0``. |
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
392 |
|
|
6082.3.3
by Vincent Ladeuil
Update HACKING.txt. |
393 |
All tests inheriting from bzrlib.tests.TestCase can use ``self.debug()`` |
394 |
instead of the longer ``import pdb; pdb.set_trace()``. The former also works |
|
395 |
when ``stdin/stdout`` are redirected (by using the original ``stdin/stdout`` |
|
396 |
file handles at the start of the ``bzr`` script) while the later doesn't. |
|
397 |
``bzrlib.debug.set_trace()`` also uses the original ``stdin/stdout`` file |
|
398 |
handles. |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
399 |
|
|
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
400 |
Debug Flags |
401 |
=========== |
|
402 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
403 |
Breezy accepts some global options starting with ``-D`` such as |
|
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
404 |
``-Dhpss``. These set a value in `bzrlib.debug.debug_flags`, and |
405 |
typically cause more information to be written to the trace file. Most |
|
406 |
`mutter` calls should be guarded by a check of those flags so that we |
|
407 |
don't write out too much information if it's not needed. |
|
408 |
||
409 |
Debug flags may have effects other than just emitting trace messages. |
|
410 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
411 |
Run ``brz help global-options`` to see them all. |
|
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
412 |
|
|
4070.8.2
by Martin Pool
Initial support for debug_flags config option |
413 |
These flags may also be set as a comma-separated list in the |
|
6740.1.1
by Jelmer Vernooij
Rename bazaar.conf to breezy.conf. |
414 |
``debug_flags`` option in e.g. ``~/.config/breezy/breezy.conf``. (Note |
415 |
that it must be in this global file, not in the branch or location |
|
416 |
configuration, because it's currently only loaded at startup time.) For |
|
417 |
instance you may want to always record hpss traces and to see full error |
|
418 |
tracebacks:: |
|
|
4070.8.2
by Martin Pool
Initial support for debug_flags config option |
419 |
|
420 |
debug_flags = hpss, error |
|
421 |
||
|
3959.1.2
by Martin Pool
Brief developer docs about debug flags |
422 |
|
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
423 |
Jargon |
424 |
====== |
|
425 |
||
426 |
revno |
|
427 |
Integer identifier for a revision on the main line of a branch. |
|
428 |
Revision 0 is always the null revision; others are 1-based |
|
429 |
indexes into the branch's revision history. |
|
430 |
||
431 |
||
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
432 |
Unicode and Encoding Support |
433 |
============================ |
|
434 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
435 |
This section discusses various techniques that Breezy uses to handle |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
436 |
characters that are outside the ASCII set. |
437 |
||
438 |
``Command.outf`` |
|
439 |
---------------- |
|
440 |
||
441 |
When a ``Command`` object is created, it is given a member variable |
|
442 |
accessible by ``self.outf``. This is a file-like object, which is bound to |
|
443 |
``sys.stdout``, and should be used to write information to the screen, |
|
444 |
rather than directly writing to ``sys.stdout`` or calling ``print``. |
|
445 |
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 |
446 |
representation, based on the console encoding. Also, the class attribute |
447 |
``encoding_type`` will effect how unprintable characters will be |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
448 |
handled. This parameter can take one of 3 values: |
449 |
||
450 |
replace |
|
|
1711.2.96
by John Arbash Meinel
cleanup from suggestions by Robert and Martin |
451 |
Unprintable characters will be represented with a suitable replacement |
452 |
marker (typically '?'), and no exception will be raised. This is for |
|
453 |
any command which generates text for the user to review, rather than |
|
454 |
for automated processing. |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
455 |
For example: ``brz log`` should not fail if one of the entries has text |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
456 |
that cannot be displayed. |
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
457 |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
458 |
strict |
|
2063.3.1
by wang
fix typos |
459 |
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. |
460 |
This is for commands that are intended more as scripting support, rather |
461 |
than plain user review. |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
462 |
For example: ``brz ls`` is designed to be used with shell scripting. One |
463 |
use would be ``brz ls --null --unknowns | xargs -0 rm``. If ``bzr`` |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
464 |
printed a filename with a '?', the wrong file could be deleted. (At the |
465 |
very least, the correct file would not be deleted). An error is used to |
|
466 |
indicate that the requested action could not be performed. |
|
|
4853.1.1
by Patrick Regan
Removed trailing whitespace from files in doc directory |
467 |
|
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
468 |
exact |
469 |
Do not attempt to automatically convert Unicode strings. This is used |
|
470 |
for commands that must handle conversion themselves. |
|
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
471 |
For example: ``brz diff`` needs to translate Unicode paths, but should |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
472 |
not change the exact text of the contents of the files. |
473 |
||
474 |
||
475 |
``bzrlib.urlutils.unescape_for_display`` |
|
476 |
---------------------------------------- |
|
477 |
||
478 |
Because Transports work in URLs (as defined earlier), printing the raw URL |
|
479 |
to the user is usually less than optimal. Characters outside the standard |
|
480 |
set are printed as escapes, rather than the real character, and local |
|
|
5538.2.3
by Zearin
Continued capitalization fixes. (URL, URLs) |
481 |
paths would be printed as ``file://`` URLs. The function |
|
1711.2.95
by John Arbash Meinel
Add HACKING note for the self.outf parameter. |
482 |
``unescape_for_display`` attempts to unescape a URL, such that anything |
483 |
that cannot be printed in the current encoding stays an escaped URL, but |
|
484 |
valid characters are generated where possible. |
|
485 |
||
486 |
||
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
487 |
C Extension Modules |
488 |
=================== |
|
489 |
||
|
6665.1.1
by Jelmer Vernooij
Drop pyrex support. |
490 |
We write some extensions in C using Cython. We design these to work in |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
491 |
three scenarios: |
|
2449.1.1
by Alexander Belchenko
fix RSTX wrong formatting in HACKING |
492 |
|
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
493 |
* User with no C compiler |
494 |
* User with C compiler |
|
495 |
* Developers |
|
496 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
497 |
The recommended way to install Breezy is to have a C compiler so that the |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
498 |
extensions can be built, but if no C compiler is present, the pure python |
499 |
versions we supply will work, though more slowly. |
|
500 |
||
|
6665.1.1
by Jelmer Vernooij
Drop pyrex support. |
501 |
For developers we recommend that Cython be installed, so that the C |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
502 |
extensions can be changed if needed. |
503 |
||
504 |
For the C extensions, the extension module should always match the |
|
505 |
original python one in all respects (modulo speed). This should be |
|
506 |
maintained over time. |
|
507 |
||
|
6665.1.1
by Jelmer Vernooij
Drop pyrex support. |
508 |
To create an extension, add rules to setup.py for building it with Cython , |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
509 |
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 |
510 |
"include 'yourmodule.py'". This will import the contents of foo.py into this |
|
1739.1.2
by Robert Collins
More pyrex finesse, documentation. |
511 |
file at build time - remember that only one module will be loaded at |
512 |
runtime. Now you can subclass classes, or replace functions, and only your |
|
513 |
changes need to be present in the .pyx file. |
|
514 |
||
|
2466.6.1
by Ian Clatworthy
Expand HACKING into Bazaar Developer Guide |
515 |
Making Installers for OS Windows |
|
1861.2.19
by Alexander Belchenko
HACKING: mention where to get instructions for building windows installers |
516 |
================================ |
|
1861.2.20
by Alexander Belchenko
English |
517 |
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. |
518 |
http://wiki.bazaar.canonical.com/BzrWin32Installer |
|
1861.2.19
by Alexander Belchenko
HACKING: mention where to get instructions for building windows installers |
519 |
|
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
520 |
Core Developer Tasks |
521 |
#################### |
|
522 |
||
523 |
Overview |
|
524 |
======== |
|
525 |
||
526 |
What is a Core Developer? |
|
527 |
------------------------- |
|
528 |
||
|
6803.1.1
by Jelmer Vernooij
Bunch of developer docs changes: |
529 |
While everyone in the Breezy community is welcome and encouraged to |
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
530 |
propose and submit changes, a smaller team is reponsible for pulling those |
531 |
changes together into a cohesive whole. In addition to the general developer |
|
532 |
stuff covered above, "core" developers have responsibility for: |
|
533 |
||
534 |
* reviewing changes |
|
535 |
* planning releases |
|
|
7192.3.6
by Jelmer Vernooij
Update lots of URLs. |
536 |
* managing releases (see `Releasing Breezy <https://www.breezy-vcs.org/developers/releasing.html>`_) |
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
537 |
|
538 |
.. note:: |
|
539 |
Removing barriers to community participation is a key reason for adopting |
|
540 |
distributed VCS technology. While DVCS removes many technical barriers, |
|
541 |
a small number of social barriers are often necessary instead. |
|
542 |
By documenting how the above things are done, we hope to |
|
543 |
encourage more people to participate in these activities, keeping the |
|
544 |
differences between core and non-core contributors to a minimum. |
|
545 |
||
546 |
||
547 |
Communicating and Coordinating |
|
548 |
------------------------------ |
|
549 |
||
550 |
While it has many advantages, one of the challenges of distributed |
|
551 |
development is keeping everyone else aware of what you're working on. |
|
552 |
There are numerous ways to do this: |
|
553 |
||
554 |
#. Assign bugs to yourself in Launchpad |
|
555 |
#. Mention it on the mailing list |
|
556 |
#. Mention it on IRC |
|
557 |
||
558 |
As well as the email notifcations that occur when merge requests are sent |
|
559 |
and reviewed, you can keep others informed of where you're spending your |
|
560 |
energy by emailing the **bazaar-commits** list implicitly. To do this, |
|
561 |
install and configure the Email plugin. One way to do this is add these |
|
562 |
configuration settings to your central configuration file (e.g. |
|
|
6740.1.1
by Jelmer Vernooij
Rename bazaar.conf to breezy.conf. |
563 |
``~/.config/breezy/breezy.conf``):: |
|
2797.1.1
by Ian Clatworthy
Merge Core Developer Hanbook into HACKING |
564 |
|
565 |
[DEFAULT] |
|
566 |
email = Joe Smith <joe.smith@internode.on.net> |
|
567 |
smtp_server = mail.internode.on.net:25 |
|
568 |
||
569 |
Then add these lines for the relevant branches in ``locations.conf``:: |
|
570 |
||
571 |
post_commit_to = bazaar-commits@lists.canonical.com |
|
572 |
post_commit_mailer = smtplib |
|
573 |
||
574 |
While attending a sprint, RobertCollins' Dbus plugin is useful for the |
|
575 |
same reason. See the documentation within the plugin for information on |
|
576 |
how to set it up and configure it. |
|
577 |
||
578 |
||
579 |
||
580 |
Planning Releases |
|
581 |
================= |
|
582 |
||
583 |
||
584 |
Bug Triage |
|
585 |
---------- |
|
586 |
||
587 |
Keeping on top of bugs reported is an important part of ongoing release |
|
588 |
planning. Everyone in the community is welcome and encouraged to raise |
|
589 |
bugs, confirm bugs raised by others, and nominate a priority. Practically |
|
590 |
though, a good percentage of bug triage is often done by the core |
|
591 |
developers, partially because of their depth of product knowledge. |
|
592 |
||
593 |
With respect to bug triage, core developers are encouraged to play an |
|
594 |
active role with particular attention to the following tasks: |
|
595 |
||
596 |
* keeping the number of unconfirmed bugs low |
|
597 |
* ensuring the priorities are generally right (everything as critical - or |
|
598 |
medium - is meaningless) |
|
599 |
* looking out for regressions and turning those around sooner rather than later. |
|
600 |
||
601 |
.. note:: |
|
602 |
As well as prioritizing bugs and nominating them against a |
|
603 |
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 |
604 |
fixing them. |
|
3314.1.1
by Martin Pool
Add Developer's Guide text about PPA builds |
605 |
|
606 |
||
|
2475.2.4
by Martin Pool
HACKING rest fixes from jam |
607 |
.. |
608 |
vim: ft=rst tw=74 ai |