~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Martin Pool
  • Date: 2010-04-01 04:41:18 UTC
  • mto: This revision was merged to the branch mainline in revision 5128.
  • Revision ID: mbp@sourcefrog.net-20100401044118-shyctqc02ob08ngz
ignore .testrepository

Show diffs side-by-side

added added

removed removed

Lines of Context:
57
57
Debugging hooks
58
58
---------------
59
59
 
60
 
To get a list of installed hooks (and available hook points), use the hidden
61
 
``hooks`` command::
 
60
To get a list of installed hooks, use the hidden ``hooks`` command::
62
61
 
63
62
    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 AlwaysConflictXMLMerger(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