~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/msgeditor.py

  • Committer: Vincent Ladeuil
  • Date: 2010-02-10 15:46:03 UTC
  • mfrom: (4985.3.21 update)
  • mto: This revision was merged to the branch mainline in revision 5021.
  • Revision ID: v.ladeuil+lp@free.fr-20100210154603-k4no1gvfuqpzrw7p
Update performs two merges in a more logical order but stop on conflicts

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2009 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
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
 
18
18
"""Commit message editor support."""
29
29
    trace,
30
30
    )
31
31
from bzrlib.errors import BzrError, BadCommitMessageEncoding
32
 
from bzrlib.hooks import Hooks
 
32
from bzrlib.hooks import HookPoint, Hooks
33
33
 
34
34
 
35
35
def _get_editor():
42
42
    e = config.GlobalConfig().get_editor()
43
43
    if e is not None:
44
44
        yield e, config.config_filename()
45
 
        
 
45
 
46
46
    for varname in 'VISUAL', 'EDITOR':
47
47
        if varname in os.environ:
48
48
            yield os.environ[varname], '$' + varname
63
63
            ## mutter("trying editor: %r", (edargs +[filename]))
64
64
            x = call(edargs + [filename])
65
65
        except OSError, e:
66
 
            # We're searching for an editor, so catch safe errors and continue
67
 
            if e.errno in (errno.ENOENT, errno.EACCES):
68
 
                if candidate_source is not None:
69
 
                    # We tried this editor because some user configuration (an
70
 
                    # environment variable or config file) said to try it.  Let
71
 
                    # the user know their configuration is broken.
72
 
                    trace.warning(
73
 
                        'Could not start editor "%s" (specified by %s): %s\n'
74
 
                        % (candidate, candidate_source, str(e)))
75
 
                continue
 
66
            if candidate_source is not None:
 
67
                # We tried this editor because some user configuration (an
 
68
                # environment variable or config file) said to try it.  Let
 
69
                # the user know their configuration is broken.
 
70
                trace.warning(
 
71
                    'Could not start editor "%s" (specified by %s): %s\n'
 
72
                    % (candidate, candidate_source, str(e)))
 
73
            continue
76
74
            raise
77
75
        if x == 0:
78
76
            return True
144
142
 
145
143
        if not msgfilename or not _run_editor(msgfilename):
146
144
            return None
147
 
        
 
145
 
148
146
        started = False
149
147
        msg = []
150
148
        lastline, nlines = 0, 0
247
245
    from StringIO import StringIO       # must be unicode-safe
248
246
    from bzrlib.status import show_tree_status
249
247
    status_tmp = StringIO()
250
 
    show_tree_status(working_tree, specific_files=specific_files, 
251
 
                     to_file=status_tmp)
 
248
    show_tree_status(working_tree, specific_files=specific_files,
 
249
                     to_file=status_tmp, verbose=True)
252
250
    return status_tmp.getvalue()
253
251
 
254
252
 
283
281
    """A dictionary mapping hook name to a list of callables for message editor
284
282
    hooks.
285
283
 
286
 
    e.g. ['commit_message_template'] is the list of items to be called to 
 
284
    e.g. ['commit_message_template'] is the list of items to be called to
287
285
    generate a commit message template
288
286
    """
289
287
 
293
291
        These are all empty initially.
294
292
        """
295
293
        Hooks.__init__(self)
296
 
        # Introduced in 1.10:
297
 
        # Invoked to generate the commit message template shown in the editor
298
 
        # The api signature is:
299
 
        # (commit, message), and the function should return the new message
300
 
        # There is currently no way to modify the order in which 
301
 
        # template hooks are invoked
302
 
        self['commit_message_template'] = []
 
294
        self.create_hook(HookPoint('commit_message_template',
 
295
            "Called when a commit message is being generated. "
 
296
            "commit_message_template is called with the bzrlib.commit.Commit "
 
297
            "object and the message that is known so far. "
 
298
            "commit_message_template must return a new message to use (which "
 
299
            "could be the same as it was given. When there are multiple "
 
300
            "hooks registered for commit_message_template, they are chained "
 
301
            "with the result from the first passed into the second, and so "
 
302
            "on.", (1, 10), None))
303
303
 
304
304
 
305
305
hooks = MessageEditorHooks()