~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-05-20 09:27:48 UTC
  • mfrom: (5241.2.2 trunk)
  • Revision ID: pqm@pqm.ubuntu.com-20100520092748-oa7knubtqio8l2rc
(lifeless) Merge 2.1 into trunk with a number of fixes including pyrex 0.9.9
 support. (Robert Collins)

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