1
# Copyright (C) 2010 Canonical Ltd
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
# GNU General Public License for more details.
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
"""bzr-commitfromnews - make commit messages from the changes in a NEWS file.
19
commitfromnews is enabled by default when installed.
21
To use, set the ``commit.template_from_files`` setting to a path and
22
just do a commit where the NEWS file for your project has a new section
23
added without providing a message to commit.
26
$ echo "commit.template_from_files = NEWS" >> .bzr/branch/branch.conf
27
$ echo "\n* new thing\n" >> NEWS
29
# editor pops open to let you tweak the message, and it starts with
30
"* new thing" as the message to edit.
32
commitfromnews attempts to create a sensible default commit message by
33
including sections from a NEWS or ChangeLog file.
36
from __future__ import absolute_import
39
from ...config import (
44
option_registry.register(
45
ListOption('commit.template_from_files', default=[], help="""\
46
List of fnmatch(2)-style shell file patterns to use when creating commit
51
def commit_template(commit, message):
52
"""Create a commit message for commit based on changes in the tree."""
53
config_stack = commit.work_tree.get_config_stack()
54
filespec = config_stack.get('commit.template_from_files')
56
from .committemplate import CommitTemplate
57
template = CommitTemplate(commit, message, filespec)
58
return template.make()
62
def load_tests(loader, basic_tests, pattern):
66
basic_tests.addTest(loader.loadTestsFromModuleNames(
67
["%s.%s" % (__name__, tmn) for tmn in testmod_names]))
75
"""Register the plugin."""
77
# Does not check registered because only tests call this, and they are
80
hooks.install_lazy_named_hook(
81
'breezy.msgeditor', 'hooks',
82
'commit_message_template',
83
commit_template, 'commitfromnews template')