~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/diff.py

  • Committer: Wouter van Heyst
  • Date: 2006-11-16 18:17:59 UTC
  • mto: This revision was merged to the branch mainline in revision 2139.
  • Revision ID: larstiq@larstiq.dyndns.org-20061116181759-pu74jhf3rackvjdn
Robuster external diff output handling.

Show diffs side-by-side

added added

removed removed

Lines of Context:
96
96
 
97
97
 
98
98
def _set_lang_C():
99
 
    """Set the env var LANG=C"""
 
99
    """Set the env vars LANG=C and LC_ALL=C."""
100
100
    osutils.set_or_unset_env('LANG', 'C')
101
 
    osutils.set_or_unset_env('LC_ALL', None)
 
101
    osutils.set_or_unset_env('LC_ALL', 'C')
102
102
    osutils.set_or_unset_env('LC_CTYPE', None)
103
103
    osutils.set_or_unset_env('LANGUAGE', None)
104
104
 
107
107
    """Spawn the externall diff process, and return the child handle.
108
108
 
109
109
    :param diffcmd: The command list to spawn
110
 
    :param capture_errors: Capture stderr as well as setting LANG=C.
111
 
        This lets us read and understand the output of diff, and respond 
112
 
        to any errors.
 
110
    :param capture_errors: Capture stderr as well as setting LANG=C
 
111
        and LC_ALL=C. This lets us read and understand the output of diff,
 
112
        and respond to any errors.
113
113
    :return: A Popen object.
114
114
    """
115
115
    if capture_errors:
116
116
        if sys.platform == 'win32':
117
117
            # Win32 doesn't support preexec_fn, but that is
118
 
            # okay, because it doesn't support LANG either.
 
118
            # okay, because it doesn't support LANG and LC_ALL either.
119
119
            preexec_fn = None
120
120
        else:
121
121
            preexec_fn = _set_lang_C
219
219
            if pipe.returncode != 2:
220
220
                raise errors.BzrError(
221
221
                               'external diff failed with exit code 2'
222
 
                               ' when run with LANG=C, but not when run'
223
 
                               ' natively: %r' % (diffcmd,))
 
222
                               ' when run with LANG=C and LC_ALL=C,'
 
223
                               ' but not when run natively: %r' % (diffcmd,))
224
224
 
225
225
            first_line = lang_c_out.split('\n', 1)[0]
226
226
            # Starting with diffutils 2.8.4 the word "binary" was dropped.