/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-07-31 17:42:29 UTC
  • mto: This revision was merged to the branch mainline in revision 4611.
  • Revision ID: john@arbash-meinel.com-20090731174229-w2zdsdlfpeddk8gl
Now we got to the per-workingtree tests, etc.

The main causes seem to break down into:
  bzrdir.clone() is known to be broken wrt locking, this effects
  everything that tries to 'push'

  shelf code is not compatible with strict locking

  merge code seems to have an issue. This might actually be the
  root cause of the clone() problems.

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