/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: John Arbash Meinel
  • Date: 2009-06-18 18:18:36 UTC
  • mto: This revision was merged to the branch mainline in revision 4461.
  • Revision ID: john@arbash-meinel.com-20090618181836-biodfkat9a8eyzjz
The new add_inventory_by_delta is returning a CHKInventory when mapping from NULL
Which is completely valid, but 'broke' one of the tests.
So to fix it, changed the test to use CHKInventories on both sides, and add an __eq__
member. The nice thing is that CHKInventory.__eq__ is fairly cheap, since it only
has to check the root keys.

Show diffs side-by-side

added added

removed removed

Lines of Context:
8
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/hooks-help.html>`_ in the User Reference.
 
11
<../user-reference/bzr_man.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
 
see the `push-and-update plugin`_ that handles one special case of
 
14
see the `bzr-push-and-update`_ plugin that handles one special case of
15
15
server-side operations.)
16
16
 
17
 
.. _push-and-update plugin: http://doc.bazaar.canonical.com/plugins/en/push-and-update-plugin.html
 
17
.. _bzr-push-and-update: https://launchpad.net/bzr-push-and-update/
18
18
 
19
19
Using hooks
20
20
-----------
21
21
 
22
 
To use a hook, you should `write a plugin`_.  Instead of
 
22
To use a hook, you should `write a plugin <#writing-a-plugin>`_.  Instead of
23
23
creating a new command, this plugin will define and install the hook.  Here's
24
24
an example::
25
25
 
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
37
 
 
38
36
To use this example, create a file named ``push_hook.py``, and stick it in
39
37
``plugins`` subdirectory of your configuration directory.  (If you have never
40
38
installed any plugins, you may need to create the ``plugins`` directory).
57
55
Debugging hooks
58
56
---------------
59
57
 
60
 
To get a list of installed hooks (and available hook points), use the hidden
61
 
``hooks`` command::
 
58
To get a list of installed hooks, use the hidden ``hooks`` command::
62
59
 
63
60
    bzr hooks
64
 
 
65
 
 
66
 
Example: a merge plugin
67
 
-----------------------
68
 
 
69
 
Here's a complete plugin that demonstrates the ``Merger.merge_file_content``
70
 
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.
72
 
 
73
 
``merge_xml.py``::
74
 
 
75
 
  """Custom 'merge' logic for *.xml files.
76
 
  
77
 
  Always conflicts if both branches have changed the file.
78
 
  """
79
 
  
80
 
  from bzrlib.merge import PerFileMerger, Merger
81
 
  
82
 
  def merge_xml_files_hook(merger):
83
 
      """Hook to merge *.xml files"""
84
 
      return MergeXMLFiles(merger)
85
 
  
86
 
  class AlwaysConflictXMLMerger(PerFileMerger):
87
 
  
88
 
      def file_matches(self, params):
89
 
          filename = self.get_filename(params, self.merger.this_tree)
90
 
          return filename.endswith('.xml')
91
 
  
92
 
      def merge_matching(self, params):
93
 
          return 'conflicted', params.this_lines
94
 
  
95
 
  Merger.hooks.install_named_hook(
96
 
      'merge_file_content', merge_xml_files_hook, '*.xml file merge')
97
 
 
98
 
``merge_file_content`` hooks are executed for each file to be merged.  For
99
 
a more a complex example look at the ``news_merge`` plugin that's bundled with
100
 
Bazaar in the ``bzrlib/plugins`` directory.
101