~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/msgeditor.py

[merge] fix \t in commit messages

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:
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