~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to doc/developers/HACKING.txt

  • Committer: Andrew Bennetts
  • Date: 2008-08-07 00:25:38 UTC
  • mfrom: (3612 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3613.
  • Revision ID: andrew.bennetts@canonical.com-20080807002538-mtl1fcgy2fdabha4
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
406
406
    subprocess you can use ``run_bzr_subprocess``. By default the spawned
407
407
    process will not load plugins unless ``--allow-plugins`` is supplied.
408
408
 
 
409
When writing library functionality, it is often necessary to set up a
 
410
branch with a certain history. Most current tests do this by inheriting
 
411
from ``TestCaseWithTransport`` and using the ``make_branch_and_tree``
 
412
helper to give them a ``WorkingTree`` that they can commit to. However,
 
413
there is a newer api available from ``TestCaseWithMemoryTransport`` using
 
414
the ``make_branch_builder`` helper. This helper is preferred, because it
 
415
can build the changes in memory, rather than on disk. Tests that are
 
416
explictly testing how we work with disk objects should, of course, use a
 
417
real ``WorkingTree``. See ``bzrlib/branch_builder.py`` for how to use the
 
418
class.
 
419
 
409
420
 
410
421
Doctests
411
422
--------
895
906
associated information such as a help string or description.
896
907
 
897
908
 
 
909
InterObject and multiple dispatch
 
910
=================================
 
911
 
 
912
The ``InterObject`` provides for two-way `multiple dispatch`__: matching
 
913
up for example a source and destination repository to find the right way
 
914
to transfer data between them. 
 
915
 
 
916
.. __: http://en.wikipedia.org/wiki/Multiple_dispatch
 
917
 
 
918
There is a subclass ``InterObject`` classes for each type of object that is
 
919
dispatched this way, e.g. ``InterRepository``.  Calling ``.get()`` on this
 
920
class will return an ``InterObject`` instance providing the best match for 
 
921
those parameters, and this instance then has methods for operations
 
922
between the objects.
 
923
 
 
924
  inter = InterRepository.get(source_repo, target_repo)
 
925
  inter.fetch(revision_id)
 
926
 
 
927
``InterRepository`` also acts as a registry-like object for its
 
928
subclasses, and they can be added through ``.register_optimizer``.  The
 
929
right one to run is selected by asking each class, in reverse order of
 
930
registration, whether it ``.is_compatible`` with the relevant objects.
 
931
 
898
932
Lazy Imports
899
933
============
900
934