bzr branch
http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
1 |
Using hooks |
|
2977.1.1
by Ian Clatworthy
First cut at new look User Guide including chapters 1 and 2 |
2 |
=========== |
3 |
||
4 |
What is a hook? |
|
5 |
--------------- |
|
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
6 |
|
|
6622.1.24
by Jelmer Vernooij
More doc renames. |
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 |
|
|
2767.2.2
by Aaron Bentley
Split hooks doc into guide and reference |
9 |
include ``commit``, ``push``, ``pull``, and ``uncommit``. |
|
3786.1.1
by mernst at mit
This patch improves the User Guide's documentation of hooks. |
10 |
For a complete list of hooks and their parameters, see `Hooks |
|
4634.164.2
by Alexander Belchenko
change links to user-reference/bzr_man.html to user-reference/index.html everywhere in the User Guide. |
11 |
<../user-reference/index.html#hooks>`_ in the User Reference. |
|
3786.1.1
by mernst at mit
This patch improves the User Guide's documentation of hooks. |
12 |
|
13 |
Most hooks are run on the client, but a few are run on the server. (Also |
|
|
4927.2.5
by Ian Clatworthy
improve links in hooks documentation |
14 |
see the `push-and-update plugin`_ that handles one special case of |
|
3786.1.1
by mernst at mit
This patch improves the User Guide's documentation of hooks. |
15 |
server-side operations.) |
16 |
||
|
4927.2.5
by Ian Clatworthy
improve links in hooks documentation |
17 |
.. _push-and-update plugin: http://doc.bazaar.canonical.com/plugins/en/push-and-update-plugin.html |
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
18 |
|
|
2977.1.1
by Ian Clatworthy
First cut at new look User Guide including chapters 1 and 2 |
19 |
Using hooks |
20 |
----------- |
|
21 |
||
|
4927.2.5
by Ian Clatworthy
improve links in hooks documentation |
22 |
To use a hook, you should `write a plugin`_. Instead of |
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
23 |
creating a new command, this plugin will define and install the hook. Here's |
24 |
an example:: |
|
25 |
||
|
6622.1.34
by Jelmer Vernooij
Rename brzlib => breezy. |
26 |
from breezy import branch |
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
27 |
|
28 |
||
|
2767.2.2
by Aaron Bentley
Split hooks doc into guide and reference |
29 |
def post_push_hook(push_result): |
|
7490.155.1
by Jelmer Vernooij
Use print with parentheses, for python 3 compatibility. |
30 |
print("The new revno is %d" % push_result.new_revno)
|
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
31 |
|
32 |
||
|
3408.5.1
by Ian Clatworthy
fix User Guide example |
33 |
branch.Branch.hooks.install_named_hook('post_push', post_push_hook,
|
|
3256.2.21
by Daniel Watkins
Updated docs. |
34 |
'My post_push hook') |
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
35 |
|
|
7204.1.5
by Jelmer Vernooij
Import plugin-development.txt. |
36 |
.. _write a plugin: ../../developers/plugin-development.html |
|
4927.2.5
by Ian Clatworthy
improve links in hooks documentation |
37 |
|
|
2767.2.1
by Aaron Bentley
Add documentation for hooks |
38 |
To use this example, create a file named ``push_hook.py``, and stick it in |
39 |
``plugins`` subdirectory of your configuration directory. (If you have never |
|
40 |
installed any plugins, you may need to create the ``plugins`` directory). |
|
41 |
||
|
2767.2.2
by Aaron Bentley
Split hooks doc into guide and reference |
42 |
That's it! The next time you push, it should show "The new revno is...". |
43 |
Of course, hooks can be much more elaborate than this, because you have the |
|
44 |
full power of Python at your disposal. Now that you know how to use hooks, |
|
45 |
what you do with them is up to you. |
|
46 |
||
|
3786.1.1
by mernst at mit
This patch improves the User Guide's documentation of hooks. |
47 |
The plugin code does two things. First, it defines a function that will be |
48 |
run after ``push`` completes. (It could instead use an instance method or |
|
49 |
a callable object.) All push hooks take a single argument, the |
|
50 |
``push_result``. |
|
|
2977.1.1
by Ian Clatworthy
First cut at new look User Guide including chapters 1 and 2 |
51 |
|
|
3805.1.1
by Martin Pool
Merge and tweak hook documentation |
52 |
Second, the plugin installs the hook. The first argument ``'post_push'`` |
53 |
identifies where to install the hook. The second argument is the hook |
|
54 |
itself. The third argument is a name ``'My post_push hook'``, which can be |
|
|
3786.1.1
by mernst at mit
This patch improves the User Guide's documentation of hooks. |
55 |
used in progress messages and error messages. |
|
3254.2.11
by Daniel Watkins
Added some information to the user guide regarding 'bzr hooks'. |
56 |
|
|
6622.1.24
by Jelmer Vernooij
More doc renames. |
57 |
To reduce the start-up time of Breezy it is also possible to "lazily" install hooks, |
|
6622.1.34
by Jelmer Vernooij
Rename brzlib => breezy. |
58 |
using the ``breezy.hooks.install_lazy_named_hook`` function. This removes the need |
|
5622.2.10
by Jelmer Vernooij
Document install_lazy_named_hook. |
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 |
||
|
6622.1.34
by Jelmer Vernooij
Rename brzlib => breezy. |
62 |
from breezy import hooks |
|
5622.2.10
by Jelmer Vernooij
Document install_lazy_named_hook. |
63 |
|
64 |
def post_push_hook(push_result): |
|
|
7490.155.1
by Jelmer Vernooij
Use print with parentheses, for python 3 compatibility. |
65 |
print("The new revno is %d" % push_result.new_revno)
|
|
5622.2.10
by Jelmer Vernooij
Document install_lazy_named_hook. |
66 |
|
67 |
||
|
6622.1.34
by Jelmer Vernooij
Rename brzlib => breezy. |
68 |
hooks.install_lazy_named_hook('breezy.branch', 'Branch.hooks',
|
|
5622.2.10
by Jelmer Vernooij
Document install_lazy_named_hook. |
69 |
'post_push', post_push_hook, 'My post_push hook') |
70 |
||
|
3254.2.11
by Daniel Watkins
Added some information to the user guide regarding 'bzr hooks'. |
71 |
Debugging hooks |
72 |
--------------- |
|
73 |
||
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
74 |
To get a list of installed hooks (and available hook points), use the hidden |
75 |
``hooks`` command:: |
|
|
3254.2.11
by Daniel Watkins
Added some information to the user guide regarding 'bzr hooks'. |
76 |
|
|
6622.1.23
by Jelmer Vernooij
More renames in English docs. |
77 |
brz hooks |
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
78 |
|
79 |
||
80 |
Example: a merge plugin |
|
81 |
----------------------- |
|
82 |
||
83 |
Here's a complete plugin that demonstrates the ``Merger.merge_file_content`` |
|
84 |
hook. It installs a hook that forces any merge of a file named ``*.xml`` |
|
|
6622.1.24
by Jelmer Vernooij
More doc renames. |
85 |
to be a conflict, even if Breezy thinks it can merge it cleanly. |
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
86 |
|
87 |
``merge_xml.py``:: |
|
88 |
||
89 |
"""Custom 'merge' logic for *.xml files. |
|
90 |
||
91 |
Always conflicts if both branches have changed the file. |
|
92 |
""" |
|
93 |
||
|
6622.1.34
by Jelmer Vernooij
Rename brzlib => breezy. |
94 |
from breezy.merge import PerFileMerger, Merger |
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
95 |
|
96 |
def merge_xml_files_hook(merger): |
|
97 |
"""Hook to merge *.xml files""" |
|
|
5377.1.1
by Andrew Bennetts
Fix typo in merge hook example. |
98 |
return AlwaysConflictXMLMerger(merger) |
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
99 |
|
|
5168.2.2
by Andrew Bennetts
Create a PerFileMerger helper class that is midway between AbstractPerFileMerger and ConfigurableFileMerger. It allows the example merge plugin in the docs (the always conflict *.xml files) to be much, much simpler. |
100 |
class AlwaysConflictXMLMerger(PerFileMerger): |
101 |
||
102 |
def file_matches(self, params): |
|
103 |
filename = self.get_filename(params, self.merger.this_tree) |
|
104 |
return filename.endswith('.xml')
|
|
105 |
||
106 |
def merge_matching(self, params): |
|
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
107 |
return 'conflicted', params.this_lines |
108 |
||
109 |
Merger.hooks.install_named_hook( |
|
110 |
'merge_file_content', merge_xml_files_hook, '*.xml file merge') |
|
111 |
||
112 |
``merge_file_content`` hooks are executed for each file to be merged. For |
|
113 |
a more a complex example look at the ``news_merge`` plugin that's bundled with |
|
|
6622.1.34
by Jelmer Vernooij
Rename brzlib => breezy. |
114 |
Breezy in the ``breezy/plugins`` directory. |
|
5168.2.1
by Andrew Bennetts
Add example merge_file_content hook based on my answer to <https://answers.edge.launchpad.net/bzr/+question/103163>. |
115 |