~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/msgeditor.py

  • Committer: Robert Collins
  • Date: 2005-12-24 02:20:45 UTC
  • mto: (1185.50.57 bzr-jam-integration)
  • mto: This revision was merged to the branch mainline in revision 1550.
  • Revision ID: robertc@robertcollins.net-20051224022045-14efc8dfa0e1a4e9
Start tests for api usage.

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
from subprocess import call
 
24
 
 
25
import bzrlib.config as config
23
26
from bzrlib.errors import BzrError
24
27
 
25
28
def _get_editor():
26
29
    """Return a sequence of possible editor binaries for the current platform"""
27
 
    from bzrlib.osutils import _read_config_value
28
 
    
29
 
    e = _read_config_value("editor")
 
30
    try:
 
31
        yield os.environ["BZR_EDITOR"]
 
32
    except KeyError:
 
33
        pass
 
34
 
 
35
    e = config.GlobalConfig().get_editor()
30
36
    if e is not None:
31
37
        yield e
32
38
        
33
 
    if os.name == "windows":
 
39
    try:
 
40
        yield os.environ["EDITOR"]
 
41
    except KeyError:
 
42
        pass
 
43
 
 
44
    if os.name == "nt":
34
45
        yield "notepad.exe"
35
46
    elif os.name == "posix":
36
 
        try:
37
 
            yield os.environ["EDITOR"]
38
 
        except KeyError:
39
 
            yield "/usr/bin/vi"
 
47
        yield "/usr/bin/vi"
40
48
 
41
49
 
42
50
def _run_editor(filename):
43
51
    """Try to execute an editor to edit the commit message."""
44
52
    for e in _get_editor():
45
53
        edargs = e.split(' ')
46
 
        x = os.spawnvp(os.P_WAIT, edargs[0],
47
 
                       edargs + [filename])
 
54
        x = call(edargs + [filename])
48
55
        if x == 0:
49
56
            return True
50
57
        elif x == 127:
72
79
        ignoreline = "-- This line and the following will be ignored --"
73
80
        
74
81
    try:
75
 
        tmp_fileno, msgfilename = tempfile.mkstemp()
 
82
        tmp_fileno, msgfilename = tempfile.mkstemp(prefix='bzr_log.', dir=u'.')
76
83
        msgfile = os.close(tmp_fileno)
77
84
        if infotext is not None and infotext != "":
78
85
            hasinfo = True
107
114
            msg.append(line)
108
115
            
109
116
        if len(msg) == 0:
110
 
            return None
 
117
            return ""
111
118
        # delete empty lines at the end
112
119
        del msg[lastline:]
113
120
        # add a newline at the end, if needed
120
127
        try: os.unlink(msgfilename)
121
128
        except IOError: pass
122
129
 
 
130
 
 
131
def make_commit_message_template(working_tree, specific_files):
 
132
    """Prepare a template file for a commit into a branch.
 
133
 
 
134
    Returns a unicode string containing the template.
 
135
    """
 
136
    # TODO: Should probably be given the WorkingTree not the branch
 
137
    #
 
138
    # TODO: make provision for this to be overridden or modified by a hook
 
139
    #
 
140
    # TODO: Rather than running the status command, should prepare a draft of
 
141
    # the revision to be committed, then pause and ask the user to
 
142
    # confirm/write a message.
 
143
    from StringIO import StringIO       # must be unicode-safe
 
144
    from bzrlib.status import show_status
 
145
    status_tmp = StringIO()
 
146
    show_status(working_tree.branch, specific_files=specific_files, to_file=status_tmp)
 
147
    return status_tmp.getvalue()