1
# Copyright (C) 2005-2011 Canonical Ltd
1
# Copyright (C) 2005-2010 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
60
59
def _run_editor(filename):
61
60
"""Try to execute an editor to edit the commit message."""
62
61
for candidate, candidate_source in _get_editor():
63
edargs = cmdline.split(candidate)
62
edargs = candidate.split(' ')
65
64
## mutter("trying editor: %r", (edargs +[filename]))
66
65
x = call(edargs + [filename])
144
143
if not msgfilename:
146
145
basename = osutils.basename(msgfilename)
147
msg_transport = transport.get_transport_from_path(osutils.dirname(msgfilename))
146
msg_transport = transport.get_transport(osutils.dirname(msgfilename))
148
147
reference_content = msg_transport.get_bytes(basename)
149
148
if not _run_editor(msgfilename):
151
150
edited_content = msg_transport.get_bytes(basename)
152
151
if edited_content == reference_content:
153
152
if not ui.ui_factory.confirm_action(
154
u"Commit message was not edited, use anyway",
153
"Commit message was not edited, use anyway",
155
154
"bzrlib.msgeditor.unchanged",
157
156
# Returning "" makes cmd_commit raise 'empty commit message
303
302
These are all empty initially.
305
Hooks.__init__(self, "bzrlib.msgeditor", "hooks")
306
self.add_hook('set_commit_message',
307
"Set a fixed commit message. "
308
"set_commit_message is called with the "
309
"bzrlib.commit.Commit object (so you can also change e.g. revision "
310
"properties by editing commit.builder._revprops) and the message "
311
"so far. set_commit_message must return the message to use or None"
312
" if it should use the message editor as normal.", (2, 4))
313
self.add_hook('commit_message_template',
305
self.create_hook(HookPoint('commit_message_template',
314
306
"Called when a commit message is being generated. "
315
307
"commit_message_template is called with the bzrlib.commit.Commit "
316
308
"object and the message that is known so far. "
317
309
"commit_message_template must return a new message to use (which "
318
"could be the same as it was given). When there are multiple "
310
"could be the same as it was given. When there are multiple "
319
311
"hooks registered for commit_message_template, they are chained "
320
312
"with the result from the first passed into the second, and so "
313
"on.", (1, 10), None))
324
316
hooks = MessageEditorHooks()
327
def set_commit_message(commit, start_message=None):
328
"""Sets the commit message.
329
:param commit: Commit object for the active commit.
330
:return: The commit message or None to continue using the message editor
333
for hook in hooks['set_commit_message']:
334
start_message = hook(commit, start_message)
338
319
def generate_commit_message_template(commit, start_message=None):
339
320
"""Generate a commit message template.