~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/HACKING.txt

  • Committer: Vincent Ladeuil
  • Date: 2008-12-04 17:12:46 UTC
  • mto: (3902.1.1 bzr.integration)
  • mto: This revision was merged to the branch mainline in revision 3903.
  • Revision ID: v.ladeuil+lp@free.fr-20081204171246-p28b3u0e2alz53iv
Fix bug #270863 by preserving 'bzr+http[s]' decorator.

* bzrlib/transport/remote.py:
(RemoteHTTPTransport._redirected_to): Specific implementation to
handle the redirections.

* bzrlib/transport/http/_urllib.py:
(HttpTransport_urllib.__init__): Fix parameter order.

* bzrlib/transport/http/_pycurl.py:
(PyCurlTransport.__init__): Fix parameter order.

* bzrlib/transport/http/__init__.py:
(HttpTransportBase.external_url): Semi drive-by fix, external_url
shouldn't expose the implementation qualifier (it's private to bzr
not externally usable).

* bzrlib/transport/decorator.py:
(TransportDecorator._redirected_to): Cleanup.

* bzrlib/tests/test_smart_transport.py:
(RemoteHTTPTransportTestCase): Add specific tests for
_redirected_to.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
document, send a merge request or new text to the mailing list.
13
13
 
14
14
The current version of this document is available in the file 
15
 
``doc/en/developer-guide/HACKING.txt`` in the source tree, or at
 
15
``doc/developers/HACKING.txt`` in the source tree, or at
16
16
http://doc.bazaar-vcs.org/bzr.dev/en/developer-guide/HACKING.html
17
17
 
18
18
See also:
46
46
If nothing else, perhaps you'll find inspiration in how other developers
47
47
have solved their challenges.
48
48
 
49
 
Finding Something To Do
50
 
=======================
51
 
 
52
 
Ad-hoc performance work can also be done. One useful tool is the 'evil' debug
53
 
flag. For instance running ``bzr -Devil commit -m "test"`` will log a backtrace
54
 
to the bzr log file for every method call which triggers a slow or non-scalable
55
 
part of the bzr library. So checking that a given command with ``-Devil`` has
56
 
no backtraces logged to the log file is a good way to find problem function
57
 
calls that might be nested deep in the code base.
58
49
 
59
50
Planning and Discussing Changes
60
51
===============================
198
189
 
199
190
Automatically-generated API reference information is available at 
200
191
<http://starship.python.net/crew/mwh/bzrlibapi/>.  
 
192
(There is an experimental editable version at 
 
193
<http://starship.python.net/crew/mwh/bzrlibapi-oe/>.)
201
194
 
202
195
See also the `Bazaar Architectural Overview  <../../developers/overview.html>`_.
203
196
 
218
211
 
219
212
 
220
213
 
 
214
Sending patches for review
 
215
==========================
 
216
 
 
217
If you'd like to propose a change, please post to the
 
218
bazaar@lists.canonical.com list with a bundle, patch, or link to a
 
219
branch. Put ``[PATCH]`` or ``[MERGE]`` in the subject so Bundle Buggy
 
220
can pick it out, and explain the change in the email message text.
 
221
Remember to update the NEWS file as part of your change if it makes any
 
222
changes visible to users or plugin developers. Please include a diff
 
223
against mainline if you're giving a link to a branch.
 
224
 
 
225
You can generate a merge request like this::
 
226
 
 
227
  bzr send -o bug-1234.patch
 
228
  
 
229
A ``.patch`` extension is recommended instead of .bundle as many mail clients
 
230
will send the latter as a binary file.
 
231
 
 
232
``bzr send`` can also send mail directly if you prefer; see the help.
 
233
 
 
234
Please do **NOT** put [PATCH] or [MERGE] in the subject line if you don't
 
235
want it to be merged. If you want comments from developers rather than
 
236
to be merged, you can put ``[RFC]`` in the subject line.
 
237
 
 
238
If this change addresses a bug, please put the bug number in the subject
 
239
line too, in the form ``[#1]`` so that Bundle Buggy can recognize it.
 
240
 
 
241
If the change is intended for a particular release mark that in the
 
242
subject too, e.g. ``[1.6]``.
221
243
 
222
244
 
223
245
Review cover letters
227
249
 
228
250
* the reason **why** you're making this change
229
251
 
230
 
* **how** this change achieves this purpose
 
252
* **how** this change acheives this purpose
231
253
 
232
254
* anything else you may have fixed in passing 
233
255
 
312
334
* (your ideas here...)
313
335
 
314
336
 
315
 
Reviews on Launchpad
316
 
====================
317
 
 
318
 
From May 2009 on, we prefer people to propose code reviews through
319
 
Launchpad.  
320
 
 
321
 
 * <https://launchpad.net/+tour/code-review>
322
 
 
323
 
 * <https://help.launchpad.net/Code/Review>
324
 
 
325
 
Anyone can propose or comment on a merge propsal just by creating a
326
 
Launchpad account.
327
 
 
328
 
There are two ways to create a new merge proposal: through the web
329
 
interface or by email.
330
 
 
331
 
 
332
 
Proposing a merge through the web
333
 
---------------------------------
334
 
 
335
 
To create the propsal through the web: push your branch to Launchpad, eg::
336
 
 
337
 
  bzr push lp:~mbp/bzr/doc
338
 
 
339
 
then go to the branch's web page, which in this case would be
340
 
<https://code.launchpad.net/~mbp/bzr/doc>.  You can automate that by just
341
 
running ::
342
 
 
343
 
  bzr lp-open
344
 
 
345
 
You can then click "Propose for merging into another branch", and enter a
346
 
cover letter into the web form.  Typically you'll want to merge into
347
 
``~bzr/bzr/trunk`` which will be the default; you might also want to
348
 
nominate merging into a release branch for a bug fix.  There is the option
349
 
to specify a specific reviewer or type of review, and you shouldn't
350
 
normally change those.
351
 
 
352
 
Submitting the form takes you to the new page about the merge proposal
353
 
containing the diff of the changes, comments by interested people, and
354
 
controls to comment or vote on the change.
355
 
 
356
 
Proposing a merge by mail
357
 
-------------------------
358
 
 
359
 
To propose a merge by mail, send a bundle to ``merge@code.launchpad.net``.
360
 
 
361
 
You can generate a merge request like this::
362
 
 
363
 
  bzr send -o bug-1234.diff
364
 
  
365
 
``bzr send`` can also send mail directly if you prefer; see the help.
366
 
 
367
 
Reviewing changes
368
 
-----------------
369
 
 
370
 
From <https://code.launchpad.net/bzr/+activereviews> you can see all
371
 
currently active reviews, and choose one to comment on.  This page also
372
 
shows proposals that are now approved and should be merged by someone with
373
 
PQM access.
374
 
 
375
 
 
376
 
Reviews through Bundle Buggy
377
 
============================
378
 
 
379
 
The Bundle Buggy tool used up to May 2009 is still available as a review
380
 
mechanism.
381
 
 
382
 
Sending patches for review
383
 
--------------------------
384
 
 
385
 
If you'd like to propose a change, please post to the
386
 
bazaar@lists.canonical.com list with a bundle, patch, or link to a
387
 
branch. Put ``[PATCH]`` or ``[MERGE]`` in the subject so Bundle Buggy
388
 
can pick it out, and explain the change in the email message text.
389
 
Remember to update the NEWS file as part of your change if it makes any
390
 
changes visible to users or plugin developers. Please include a diff
391
 
against mainline if you're giving a link to a branch.
392
 
 
393
 
You can generate a merge request like this::
394
 
 
395
 
  bzr send -o bug-1234.patch
396
 
  
397
 
A ``.patch`` extension is recommended instead of .bundle as many mail clients
398
 
will send the latter as a binary file.
399
 
 
400
 
``bzr send`` can also send mail directly if you prefer; see the help.
401
 
 
402
 
Please do **NOT** put [PATCH] or [MERGE] in the subject line if you don't
403
 
want it to be merged. If you want comments from developers rather than
404
 
to be merged, you can put ``[RFC]`` in the subject line.
405
 
 
406
 
If this change addresses a bug, please put the bug number in the subject
407
 
line too, in the form ``[#1]`` so that Bundle Buggy can recognize it.
408
 
 
409
 
If the change is intended for a particular release mark that in the
410
 
subject too, e.g. ``[1.6]``.
 
337
Bundle Buggy and review outcomes
 
338
================================
 
339
 
411
340
Anyone can "vote" on the mailing list by expressing an opinion. Core
412
341
developers can also vote using Bundle Buggy. Here are the voting codes and
413
342
their explanations.
458
387
We use 4 space indents for blocks, and never use tab characters.  (In vim,
459
388
``set expandtab``.)
460
389
 
461
 
Trailing white space should be avoided, but is allowed.
462
 
You should however not make lots of unrelated white space changes.
463
 
 
464
 
Unix style newlines (LF) are used.
465
 
 
466
 
Each file must have a newline at the end of it.
467
 
 
468
390
Lines should be no more than 79 characters if at all possible.
469
391
Lines that continue a long statement may be indented in either of 
470
392
two ways:
773
695
=============
774
696
 
775
697
All code should be exercised by the test suite.  See `Guide to Testing
776
 
Bazaar <../../developers/testing.html>`_ for detailed information about writing tests.
 
698
Bazaar <testing.html>`_ for detailed information about writing tests.
777
699
 
778
700
 
779
701
Core Topics
898
820
should be only in the command-line tool.
899
821
 
900
822
 
901
 
Progress and Activity Indications
902
 
---------------------------------
903
 
 
904
 
bzrlib has a way for code to display to the user that stuff is happening
905
 
during a long operation.  There are two particular types: *activity* which
906
 
means that IO is happening on a Transport, and *progress* which means that
907
 
higher-level application work is occurring.  Both are drawn together by
908
 
the `ui_factory`.
909
 
 
910
 
Transport objects are responsible for calling `report_transport_activity`
911
 
when they do IO.
912
 
 
913
 
Progress uses a model/view pattern: application code acts on a
914
 
`ProgressTask` object, which notifies the UI when it needs to be
915
 
displayed.  Progress tasks form a stack.  To create a new progress task on
916
 
top of the stack, call `bzrlib.ui.ui_factory.nested_progress_bar()`, then
917
 
call `update()` on the returned ProgressTask.  It can be updated with just
918
 
a text description, with a numeric count, or with a numeric count and
919
 
expected total count.  If an expected total count is provided the view
920
 
can show the progress moving along towards the expected total.
921
 
 
922
 
The user should call `finish` on the `ProgressTask` when the logical
923
 
operation has finished, so it can be removed from the stack.
924
 
 
925
 
Progress tasks have a complex relatioship with generators: it's a very
926
 
good place to use them, but because python2.4 does not allow ``finally``
927
 
blocks in generators it's hard to clean them up properly.  In this case
928
 
it's probably better to have the code calling the generator allocate a
929
 
progress task for its use and then call `finalize` when it's done, which
930
 
will close it if it was not already closed.  The generator should also
931
 
finish the progress task when it exits, because it may otherwise be a long
932
 
time until the finally block runs.
933
 
 
934
823
 
935
824
Displaying help
936
825
===============
997
886
that exception specifically, or when it needs a substantially different
998
887
format string.
999
888
 
1000
 
#. If it is something that a caller can recover from, a custom exception
1001
 
   is reasonable. 
1002
 
 
1003
 
#. If it is a data consistency issue, using a builtin like
1004
 
   ``ValueError``/``TypeError`` is reasonable. 
1005
 
 
1006
 
#. If it is a programmer error (using an api incorrectly)
1007
 
   ``AssertionError`` is reasonable. 
1008
 
 
1009
 
#. Otherwise, use ``BzrError`` or ``InternalBzrError``.
1010
 
 
1011
889
Exception strings should start with a capital letter and should not have a
1012
890
final fullstop.  If long, they may contain newlines to break the text.
1013
891
 
1173
1051
by setting the environment variable ``BZR_SIGQUIT_PDB=0``.
1174
1052
 
1175
1053
 
1176
 
Debug Flags
1177
 
===========
1178
 
 
1179
 
Bazaar accepts some global options starting with ``-D`` such as
1180
 
``-Dhpss``.  These set a value in `bzrlib.debug.debug_flags`, and
1181
 
typically cause more information to be written to the trace file.  Most
1182
 
`mutter` calls should be guarded by a check of those flags so that we
1183
 
don't write out too much information if it's not needed.
1184
 
 
1185
 
Debug flags may have effects other than just emitting trace messages.
1186
 
 
1187
 
Run ``bzr help global-options`` to see them all.
1188
 
 
1189
 
These flags may also be set as a comma-separated list in the
1190
 
``debug_flags`` option in e.g.  ``~/.bazaar/bazaar.conf``.  (Note that it
1191
 
must be in this global file, not in the branch or location configuration,
1192
 
because it's currently only loaded at startup time.)  For instance you may
1193
 
want to always record hpss traces and to see full error tracebacks::
1194
 
 
1195
 
    debug_flags = hpss, error
1196
 
 
1197
 
 
1198
1054
Jargon
1199
1055
======
1200
1056
 
1558
1414
Planning Releases
1559
1415
=================
1560
1416
 
 
1417
Roadmaps
 
1418
--------
 
1419
 
 
1420
As the two senior developers, Martin Pool and Robert Collins coordinate
 
1421
the overall Bazaar product development roadmap. Core developers provide
 
1422
input and review into this, particularly during sprints. It's totally
 
1423
expected that community members ought to be working on things that
 
1424
interest them the most. The roadmap is valuable though because it provides
 
1425
context for understanding where the product is going as a whole and why.
 
1426
 
1561
1427
 
1562
1428
Using Releases and Milestones in Launchpad
1563
1429
------------------------------------------