~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/msgeditor.py

  • Committer: Andrew Bennetts
  • Date: 2010-11-22 03:35:24 UTC
  • mto: This revision was merged to the branch mainline in revision 5547.
  • Revision ID: andrew.bennetts@canonical.com-20101122033524-ouxj0onm3gtkimx3
Remove RepositoryFormatCHK1 and RepositoryFormatCHK2.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005-2010 Canonical Ltd
2
2
#
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
23
23
import sys
24
24
 
25
25
from bzrlib import (
26
 
    cmdline,
27
26
    config,
28
27
    osutils,
29
28
    trace,
31
30
    ui,
32
31
    )
33
32
from bzrlib.errors import BzrError, BadCommitMessageEncoding
34
 
from bzrlib.hooks import Hooks
 
33
from bzrlib.hooks import HookPoint, Hooks
35
34
 
36
35
 
37
36
def _get_editor():
41
40
    except KeyError:
42
41
        pass
43
42
 
44
 
    e = config.GlobalStack().get('editor')
 
43
    e = config.GlobalConfig().get_editor()
45
44
    if e is not None:
46
45
        yield e, config.config_filename()
47
46
 
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(' ')
64
63
        try:
65
64
            ## mutter("trying editor: %r", (edargs +[filename]))
66
65
            x = call(edargs + [filename])
144
143
        if not msgfilename:
145
144
            return None
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):
150
149
            return None
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",
156
155
                {}):
157
156
                # Returning "" makes cmd_commit raise 'empty commit message
302
301
 
303
302
        These are all empty initially.
304
303
        """
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',
 
304
        Hooks.__init__(self)
 
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 "
321
 
            "on.", (1, 10))
 
313
            "on.", (1, 10), None))
322
314
 
323
315
 
324
316
hooks = MessageEditorHooks()
325
317
 
326
318
 
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
331
 
    """
332
 
    start_message = None
333
 
    for hook in hooks['set_commit_message']:
334
 
        start_message = hook(commit, start_message)
335
 
    return start_message
336
 
 
337
 
 
338
319
def generate_commit_message_template(commit, start_message=None):
339
320
    """Generate a commit message template.
340
321