~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/HACKING.txt

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-06 06:48:25 UTC
  • mfrom: (4070.8.6 debug-config)
  • Revision ID: pqm@pqm.ubuntu.com-20090306064825-kbpwggw21dygeix6
(mbp) debug_flags configuration option

Show diffs side-by-side

added added

removed removed

Lines of Context:
699
699
=============
700
700
 
701
701
All code should be exercised by the test suite.  See `Guide to Testing
702
 
Bazaar <../../developers/testing.html>`_ for detailed information about writing tests.
 
702
Bazaar <testing.html>`_ for detailed information about writing tests.
703
703
 
704
704
 
705
705
Core Topics
824
824
should be only in the command-line tool.
825
825
 
826
826
 
827
 
Progress and Activity Indications
828
 
---------------------------------
829
 
 
830
 
bzrlib has a way for code to display to the user that stuff is happening
831
 
during a long operation.  There are two particular types: *activity* which
832
 
means that IO is happening on a Transport, and *progress* which means that
833
 
higher-level application work is occurring.  Both are drawn together by
834
 
the `ui_factory`.
835
 
 
836
 
Transport objects are responsible for calling `report_transport_activity`
837
 
when they do IO.
838
 
 
839
 
Progress uses a model/view pattern: application code acts on a
840
 
`ProgressTask` object, which notifies the UI when it needs to be
841
 
displayed.  Progress tasks form a stack.  To create a new progress task on
842
 
top of the stack, call `bzrlib.ui.ui_factory.nested_progress_bar()`, then
843
 
call `update()` on the returned ProgressTask.  It can be updated with just
844
 
a text description, with a numeric count, or with a numeric count and
845
 
expected total count.  If an expected total count is provided the view
846
 
can show the progress moving along towards the expected total.
847
 
 
848
 
The user should call `finish` on the `ProgressTask` when the logical
849
 
operation has finished, so it can be removed from the stack.
850
 
 
851
 
Progress tasks have a complex relatioship with generators: it's a very
852
 
good place to use them, but because python2.4 does not allow ``finally``
853
 
blocks in generators it's hard to clean them up properly.  In this case
854
 
it's probably better to have the code calling the generator allocate a
855
 
progress task for its use and then call `finalize` when it's done, which
856
 
will close it if it was not already closed.  The generator should also
857
 
finish the progress task when it exits, because it may otherwise be a long
858
 
time until the finally block runs.
859
 
 
860
827
 
861
828
Displaying help
862
829
===============