~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/msgeditor.py

(vila) Revise legal option names to be less drastic. (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
16
16
 
17
 
 
18
17
"""Commit message editor support."""
19
18
 
 
19
from __future__ import absolute_import
 
20
 
20
21
import codecs
21
22
import os
22
23
from subprocess import call
31
32
    ui,
32
33
    )
33
34
from bzrlib.errors import BzrError, BadCommitMessageEncoding
34
 
from bzrlib.hooks import HookPoint, Hooks
 
35
from bzrlib.hooks import Hooks
35
36
 
36
37
 
37
38
def _get_editor():
41
42
    except KeyError:
42
43
        pass
43
44
 
44
 
    e = config.GlobalConfig().get_editor()
 
45
    e = config.GlobalStack().get('editor')
45
46
    if e is not None:
46
47
        yield e, config.config_filename()
47
48
 
144
145
        if not msgfilename:
145
146
            return None
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):
150
151
            return None
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",
156
157
                {}):
157
158
                # Returning "" makes cmd_commit raise 'empty commit message
302
303
 
303
304
        These are all empty initially.
304
305
        """
305
 
        Hooks.__init__(self)
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))
 
322
            "on.", (1, 10))
315
323
 
316
324
 
317
325
hooks = MessageEditorHooks()
318
326
 
319
327
 
 
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
 
332
    """
 
333
    start_message = None
 
334
    for hook in hooks['set_commit_message']:
 
335
        start_message = hook(commit, start_message)
 
336
    return start_message
 
337
 
 
338
 
320
339
def generate_commit_message_template(commit, start_message=None):
321
340
    """Generate a commit message template.
322
341