14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
17
"""Commit message editor support."""
19
from __future__ import absolute_import
22
23
from subprocess import call
144
145
if not msgfilename:
146
147
basename = osutils.basename(msgfilename)
147
msg_transport = transport.get_transport(osutils.dirname(msgfilename))
148
msg_transport = transport.get_transport_from_path(osutils.dirname(msgfilename))
148
149
reference_content = msg_transport.get_bytes(basename)
149
150
if not _run_editor(msgfilename):
151
152
edited_content = msg_transport.get_bytes(basename)
152
153
if edited_content == reference_content:
153
154
if not ui.ui_factory.confirm_action(
154
"Commit message was not edited, use anyway",
155
u"Commit message was not edited, use anyway",
155
156
"bzrlib.msgeditor.unchanged",
157
158
# Returning "" makes cmd_commit raise 'empty commit message
303
304
These are all empty initially.
306
self.create_hook(HookPoint('commit_message_template',
306
Hooks.__init__(self, "bzrlib.msgeditor", "hooks")
307
self.add_hook('set_commit_message',
308
"Set a fixed commit message. "
309
"set_commit_message is called with the "
310
"bzrlib.commit.Commit object (so you can also change e.g. revision "
311
"properties by editing commit.builder._revprops) and the message "
312
"so far. set_commit_message must return the message to use or None"
313
" if it should use the message editor as normal.", (2, 4))
314
self.add_hook('commit_message_template',
307
315
"Called when a commit message is being generated. "
308
316
"commit_message_template is called with the bzrlib.commit.Commit "
309
317
"object and the message that is known so far. "
310
318
"commit_message_template must return a new message to use (which "
311
"could be the same as it was given. When there are multiple "
319
"could be the same as it was given). When there are multiple "
312
320
"hooks registered for commit_message_template, they are chained "
313
321
"with the result from the first passed into the second, and so "
314
"on.", (1, 10), None))
317
325
hooks = MessageEditorHooks()
328
def set_commit_message(commit, start_message=None):
329
"""Sets the commit message.
330
:param commit: Commit object for the active commit.
331
:return: The commit message or None to continue using the message editor
334
for hook in hooks['set_commit_message']:
335
start_message = hook(commit, start_message)
320
339
def generate_commit_message_template(commit, start_message=None):
321
340
"""Generate a commit message template.