/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to doc/en/user-guide/hooks.txt

  • Committer: Marius Kruger
  • Date: 2010-07-10 21:28:56 UTC
  • mto: (5384.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 5385.
  • Revision ID: marius.kruger@enerweb.co.za-20100710212856-uq4ji3go0u5se7hx
* Update documentation
* add NEWS

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
What is a hook?
5
5
---------------
6
6
 
7
 
One way to customize Breezy's behaviour is with *hooks*.  Hooks allow you to
8
 
perform actions before or after certain Breezy operations.  The operations
 
7
One way to customize Bazaar's behaviour is with *hooks*.  Hooks allow you to
 
8
perform actions before or after certain Bazaar operations.  The operations
9
9
include ``commit``, ``push``, ``pull``, and ``uncommit``.
10
10
For a complete list of hooks and their parameters, see `Hooks
11
 
<../user-reference/index.html#hooks>`_ in the User Reference.
 
11
<../user-reference/hooks-help.html>`_ in the User Reference.
12
12
 
13
13
Most hooks are run on the client, but a few are run on the server.  (Also
14
14
see the `push-and-update plugin`_ that handles one special case of
23
23
creating a new command, this plugin will define and install the hook.  Here's
24
24
an example::
25
25
 
26
 
    from breezy import branch
 
26
    from bzrlib import branch
27
27
 
28
28
 
29
29
    def post_push_hook(push_result):
33
33
    branch.Branch.hooks.install_named_hook('post_push', post_push_hook,
34
34
                                     'My post_push hook')
35
35
 
36
 
.. _write a plugin: ../../developers/plugin-development.html
 
36
.. _write a plugin: http://doc.bazaar.canonical.com/plugins/en/plugin-development.html
37
37
 
38
38
To use this example, create a file named ``push_hook.py``, and stick it in
39
39
``plugins`` subdirectory of your configuration directory.  (If you have never
54
54
itself.  The third argument is a name ``'My post_push hook'``, which can be
55
55
used in progress messages and error messages.
56
56
 
57
 
To reduce the start-up time of Breezy it is also possible to "lazily" install hooks,
58
 
using the ``breezy.hooks.install_lazy_named_hook`` function. This removes the need
59
 
to load the module that contains the hook point just to install the hook. Here's lazy
60
 
version of the example above::
61
 
 
62
 
    from breezy import hooks
63
 
 
64
 
    def post_push_hook(push_result):
65
 
        print "The new revno is %d" % push_result.new_revno
66
 
 
67
 
 
68
 
    hooks.install_lazy_named_hook('breezy.branch', 'Branch.hooks',
69
 
        'post_push', post_push_hook, 'My post_push hook')
70
 
 
71
57
Debugging hooks
72
58
---------------
73
59
 
74
60
To get a list of installed hooks (and available hook points), use the hidden
75
61
``hooks`` command::
76
62
 
77
 
    brz hooks
 
63
    bzr hooks
78
64
 
79
65
 
80
66
Example: a merge plugin
82
68
 
83
69
Here's a complete plugin that demonstrates the ``Merger.merge_file_content``
84
70
hook.  It installs a hook that forces any merge of a file named ``*.xml``
85
 
to be a conflict, even if Breezy thinks it can merge it cleanly.
 
71
to be a conflict, even if Bazaar thinks it can merge it cleanly.
86
72
 
87
73
``merge_xml.py``::
88
74
 
91
77
  Always conflicts if both branches have changed the file.
92
78
  """
93
79
  
94
 
  from breezy.merge import PerFileMerger, Merger
 
80
  from bzrlib.merge import PerFileMerger, Merger
95
81
  
96
82
  def merge_xml_files_hook(merger):
97
83
      """Hook to merge *.xml files"""
98
 
      return AlwaysConflictXMLMerger(merger)
 
84
      return MergeXMLFiles(merger)
99
85
  
100
86
  class AlwaysConflictXMLMerger(PerFileMerger):
101
87
  
111
97
 
112
98
``merge_file_content`` hooks are executed for each file to be merged.  For
113
99
a more a complex example look at the ``news_merge`` plugin that's bundled with
114
 
Breezy in the ``breezy/plugins`` directory.
 
100
Bazaar in the ``bzrlib/plugins`` directory.
115
101