/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: Jelmer Vernooij
  • Date: 2020-04-05 19:11:34 UTC
  • mto: (7490.7.16 work)
  • mto: This revision was merged to the branch mainline in revision 7501.
  • Revision ID: jelmer@jelmer.uk-20200405191134-0aebh8ikiwygxma5
Populate the .gitignore file.

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 Bazaar's behaviour is with *hooks*.  Hooks allow you to
8
 
perform actions before or after certain Bazaar operations.  The operations
 
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
9
9
include ``commit``, ``push``, ``pull``, and ``uncommit``.
10
10
For a complete list of hooks and their parameters, see `Hooks
11
 
<../user-reference/hooks-help.html>`_ in the User Reference.
 
11
<../user-reference/index.html#hooks>`_ 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 bzrlib import branch
 
26
    from breezy 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: http://doc.bazaar.canonical.com/plugins/en/plugin-development.html
 
36
.. _write a plugin: ../../developers/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
 
57
71
Debugging hooks
58
72
---------------
59
73
 
60
74
To get a list of installed hooks (and available hook points), use the hidden
61
75
``hooks`` command::
62
76
 
63
 
    bzr hooks
 
77
    brz hooks
64
78
 
65
79
 
66
80
Example: a merge plugin
68
82
 
69
83
Here's a complete plugin that demonstrates the ``Merger.merge_file_content``
70
84
hook.  It installs a hook that forces any merge of a file named ``*.xml``
71
 
to be a conflict, even if Bazaar thinks it can merge it cleanly.
 
85
to be a conflict, even if Breezy thinks it can merge it cleanly.
72
86
 
73
87
``merge_xml.py``::
74
88
 
77
91
  Always conflicts if both branches have changed the file.
78
92
  """
79
93
  
80
 
  from bzrlib.merge import PerFileMerger, Merger
 
94
  from breezy.merge import PerFileMerger, Merger
81
95
  
82
96
  def merge_xml_files_hook(merger):
83
97
      """Hook to merge *.xml files"""
84
 
      return MergeXMLFiles(merger)
 
98
      return AlwaysConflictXMLMerger(merger)
85
99
  
86
100
  class AlwaysConflictXMLMerger(PerFileMerger):
87
101
  
97
111
 
98
112
``merge_file_content`` hooks are executed for each file to be merged.  For
99
113
a more a complex example look at the ``news_merge`` plugin that's bundled with
100
 
Bazaar in the ``bzrlib/plugins`` directory.
 
114
Breezy in the ``breezy/plugins`` directory.
101
115