| From | Sent On | Attachments |
|---|---|---|
| Jelmer Vernooij | Aug 21, 2008 10:13 am | .patch |
| Bundle Buggy | Aug 21, 2008 10:26 pm |
| Subject: | [MERGE] Add tests for commit_message_template hooks. | |
|---|---|---|
| From: | Jelmer Vernooij (jel...@samba.org) | |
| Date: | Aug 21, 2008 10:13:06 am | |
| List: | com.ubuntu.lists.bazaar | |
| Attachments: | ||
The attached patch adds a commit_message_template hook, which allows plugins to modify the commit message that is displayed by default when opening an editor to change the commit message.
Some use cases for this:
* suggesting a commit message by taking the last entry or the newly added lines from a ChangeLog file or a debian/changelog file (like debcommit already does atm) * fill in "Merged [branch-nick]." when committing merges
Cheers,
Jelmer
--
# Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jel...@samba.org-20080821165821-r5vaoznc96k0kd18 # target_branch: http://bazaar-vcs.org/bzr/bzr.dev # testament_sha1: a61797871633a6c13797153fdedacb0e70ebba35 # timestamp: 2008-08-21 19:09:13 +0200 # base_revision_id: pq...@pqm.ubuntu.com-20080820164550-e4vt9gdxv8hlic7n # # Begin patch === modified file 'bzrlib/builtins.py' --- bzrlib/builtins.py 2008-08-19 03:08:37 +0000 +++ bzrlib/builtins.py 2008-08-21 16:45:47 +0000 @@ -2261,6 +2261,7 @@ ) from bzrlib.msgeditor import ( edit_commit_message_encoded, + generate_commit_message_template, make_commit_message_template_encoded )
@@ -2295,7 +2296,9 @@ t = make_commit_message_template_encoded(tree, selected_list, diff=show_diff, output_encoding=bzrlib.user_encoding) - my_message = edit_commit_message_encoded(t) + start_message = generate_commit_message_template(commit_obj) + my_message = edit_commit_message_encoded(t, + start_message=start_message) if my_message is None: raise errors.BzrCommandError("please specify a commit" " message with either --message or --file")
=== modified file 'bzrlib/msgeditor.py' --- bzrlib/msgeditor.py 2008-04-22 09:58:15 +0000 +++ bzrlib/msgeditor.py 2008-08-21 16:58:21 +0000 @@ -27,6 +27,7 @@ import bzrlib.config as config from bzrlib import osutils from bzrlib.errors import BzrError, BadCommitMessageEncoding +from bzrlib.hooks import Hooks from bzrlib.trace import warning, mutter
@@ -267,3 +268,42 @@ template = template + '\n' + stream.getvalue()
return template + + +class MessageEditorHooks(Hooks): + """A dictionary mapping hook name to a list of callables for message editor + hooks. + + e.g. ['commit_message_template'] is the list of items to be called to + generate a commit message template + """ + + def __init__(self): + """Create the default hooks. + + These are all empty initially. + """ + Hooks.__init__(self) + # Introduced in 1.7: + # Invoked to generate the commit message template shown in the editor + # The api signature is: + # (commit, message), and the function should return the new message + # There is currently no way to modify the order in which + # template hooks are invoked + self['commit_message_template'] = [] + + +hooks = MessageEditorHooks() + + +def generate_commit_message_template(commit, start_message=None): + """Generate a commit message template. + + :param commit: Commit object for the active commit. + :param start_message: Message to start with. + :return: A start commit message or None for an empty start commit message. + """ + start_message = None + for hook in hooks['commit_message_template']: + start_message = hook(commit, start_message) + return start_message
=== modified file 'bzrlib/tests/test_msgeditor.py' --- bzrlib/tests/test_msgeditor.py 2008-06-06 13:30:30 +0000 +++ bzrlib/tests/test_msgeditor.py 2008-08-21 16:58:21 +0000 @@ -22,6 +22,7 @@
import bzrlib from bzrlib import ( + commit, errors, msgeditor, osutils, @@ -292,3 +293,18 @@ msgeditor.edit_commit_message, '') finally: osutils.set_or_unset_env('LANG', old_env) + + def test_generate_commit_message_template_no_hooks(self): + commit_obj = commit.Commit() + self.assertIs(None, + msgeditor.generate_commit_message_template(commit_obj)) + + def test_generate_commit_message_template_hook(self): + def restoreDefaults(): + msgeditor.hooks['commit_message_template'] = [] + self.addCleanup(restoreDefaults) + msgeditor.hooks.install_named_hook("commit_message_template", + lambda commit_obj, msg: "save me some typing\n", None) + commit_obj = commit.Commit() + self.assertEquals("save me some typing\n", + msgeditor.generate_commit_message_template(commit_obj))
# Begin bundle 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 OxNstg==






.patch