~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/msgeditor.py

  • Committer: Robert Collins
  • Date: 2006-03-11 13:58:48 UTC
  • mto: (1615.1.2 bzr.mbp.integration)
  • mto: This revision was merged to the branch mainline in revision 1616.
  • Revision ID: robertc@robertcollins.net-20060311135848-789fa616b8da4662
Note potential improvements in knit adds.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
"""Commit message editor support."""
21
21
 
22
22
import os
 
23
import errno
23
24
from subprocess import call
 
25
 
 
26
import bzrlib.config as config
24
27
from bzrlib.errors import BzrError
25
28
 
26
29
def _get_editor():
27
30
    """Return a sequence of possible editor binaries for the current platform"""
28
 
    from bzrlib.osutils import _read_config_value
29
 
    
30
31
    try:
31
32
        yield os.environ["BZR_EDITOR"]
32
33
    except KeyError:
33
34
        pass
34
35
 
35
 
    e = _read_config_value("editor")
 
36
    e = config.GlobalConfig().get_editor()
36
37
    if e is not None:
37
38
        yield e
38
39
        
51
52
    """Try to execute an editor to edit the commit message."""
52
53
    for e in _get_editor():
53
54
        edargs = e.split(' ')
54
 
        x = call(edargs + [filename])
 
55
        try:
 
56
            x = call(edargs + [filename])
 
57
        except OSError, e:
 
58
           # ENOENT means no such editor
 
59
           if e.errno == errno.ENOENT:
 
60
               continue
 
61
           raise
55
62
        if x == 0:
56
63
            return True
57
64
        elif x == 127:
79
86
        ignoreline = "-- This line and the following will be ignored --"
80
87
        
81
88
    try:
82
 
        tmp_fileno, msgfilename = tempfile.mkstemp()
 
89
        tmp_fileno, msgfilename = tempfile.mkstemp(prefix='bzr_log.', dir=u'.')
83
90
        msgfile = os.close(tmp_fileno)
84
91
        if infotext is not None and infotext != "":
85
92
            hasinfo = True
127
134
        try: os.unlink(msgfilename)
128
135
        except IOError: pass
129
136
 
 
137
 
 
138
def make_commit_message_template(working_tree, specific_files):
 
139
    """Prepare a template file for a commit into a branch.
 
140
 
 
141
    Returns a unicode string containing the template.
 
142
    """
 
143
    # TODO: Should probably be given the WorkingTree not the branch
 
144
    #
 
145
    # TODO: make provision for this to be overridden or modified by a hook
 
146
    #
 
147
    # TODO: Rather than running the status command, should prepare a draft of
 
148
    # the revision to be committed, then pause and ask the user to
 
149
    # confirm/write a message.
 
150
    from StringIO import StringIO       # must be unicode-safe
 
151
    from bzrlib.status import show_tree_status
 
152
    status_tmp = StringIO()
 
153
    show_tree_status(working_tree, specific_files=specific_files, 
 
154
                     to_file=status_tmp)
 
155
    return status_tmp.getvalue()