1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
1
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
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
123
127
_bzr_logger.warning(*args, **kwargs)
126
# configure convenient aliases for output routines
128
# TODO: deprecate them, have one name for each.
130
log_error = _bzr_logger.error
131
error = _bzr_logger.error
134
_last_mutter_flush_time = None
130
@deprecated_function(deprecated_in((2, 1, 0)))
131
def info(*args, **kwargs):
132
"""Deprecated: use trace.note instead."""
133
note(*args, **kwargs)
136
@deprecated_function(deprecated_in((2, 1, 0)))
137
def log_error(*args, **kwargs):
138
"""Deprecated: use bzrlib.trace.show_error instead"""
139
_bzr_logger.error(*args, **kwargs)
142
@deprecated_function(deprecated_in((2, 1, 0)))
143
def error(*args, **kwargs):
144
"""Deprecated: use bzrlib.trace.show_error instead"""
145
_bzr_logger.error(*args, **kwargs)
149
"""Show an error message to the user.
151
Don't use this for exceptions, use report_exception instead.
153
_bzr_logger.error(*args, **kwargs)
136
156
def mutter(fmt, *args):
137
global _last_mutter_flush_time
138
157
if _trace_file is None:
159
# XXX: Don't check this every time; instead anyone who closes the file
160
# ought to deregister it. We can tolerate None.
140
161
if (getattr(_trace_file, 'closed', None) is not None) and _trace_file.closed:
159
180
timestamp = '%0.3f ' % (now - _bzr_log_start_time,)
160
181
out = timestamp + out + '\n'
161
182
_trace_file.write(out)
162
# We flush if we haven't flushed for a few seconds. We don't want to flush
163
# on every mutter, but when a command takes a while, it can be nice to see
164
# updates in the debug log.
165
if (_last_mutter_flush_time is None
166
or (now - _last_mutter_flush_time) > 2.0):
167
flush = getattr(_trace_file, 'flush', None)
168
if flush is not None:
170
_last_mutter_flush_time = now
183
# there's no explicit flushing; the file is typically line buffered.
173
186
def mutter_callsite(stacklevel, fmt, *args):
228
241
_bzr_log_filename = _get_bzr_log_filename()
229
242
_rollover_trace_maybe(_bzr_log_filename)
231
bzr_log_file = open(_bzr_log_filename, 'at', 1) # line buffered
244
bzr_log_file = open(_bzr_log_filename, 'at', buffering=0) # unbuffered
232
245
# bzr_log_file.tell() on windows always return 0 until some writing done
233
246
bzr_log_file.write('\n')
234
247
if bzr_log_file.tell() <= 2:
423
436
:return: The appropriate exit code for this error.
425
exc_type, exc_object, exc_tb = exc_info
426
438
# Log the full traceback to ~/.bzr.log
427
439
log_exception_quietly()
440
if 'error' in debug.debug_flags:
441
print_exception(exc_info, err_file)
442
return errors.EXIT_ERROR
443
exc_type, exc_object, exc_tb = exc_info
428
444
if (isinstance(exc_object, IOError)
429
445
and getattr(exc_object, 'errno', None) == errno.EPIPE):
430
446
err_file.write("bzr: broken pipe\n")
471
487
:param advice: Extra advice to the user to be printed following the
474
if 'error' in debug.debug_flags:
475
print_exception(exc_info, err_file)
477
490
err_file.write("bzr: ERROR: %s\n" % (exc_info[1],))
479
492
err_file.write("%s\n" % (advice,))