~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

merged 376388 related changes for 2.0 patch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2007, 2008, 2009 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Canonical Ltd
2
2
#
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
14
14
# along with this program; if not, write to the Free Software
15
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
 
"""Messages and logging for bazaar-ng.
 
17
"""Messages and logging.
18
18
 
19
19
Messages are supplied by callers as a string-formatting template, plus values
20
20
to be inserted into it.  The actual %-formatting is deferred to the log
33
33
 
34
34
Output to stderr depends on the mode chosen by the user.  By default, messages
35
35
of info and above are sent out, which results in progress messages such as the
36
 
list of files processed by add and commit.  In quiet mode, only warnings and
37
 
above are shown.  In debug mode, stderr gets debug messages too.
 
36
list of files processed by add and commit.  In debug mode, stderr gets debug messages too.
38
37
 
39
38
Errors that terminate an operation are generally passed back as exceptions;
40
39
others may be just emitted as messages.
83
82
    osutils,
84
83
    plugin,
85
84
    symbol_versioning,
 
85
    ui,
86
86
    )
87
87
""")
88
88
 
241
241
    _bzr_log_filename = _get_bzr_log_filename()
242
242
    _rollover_trace_maybe(_bzr_log_filename)
243
243
    try:
244
 
        bzr_log_file = open(_bzr_log_filename, 'at', buffering=0) # unbuffered
 
244
        buffering = 0 # unbuffered
 
245
        ownership_src = osutils.parent_dir(_bzr_log_filename)
 
246
        bzr_log_file = osutils.open(_bzr_log_filename, 'at', buffering, ownership_src)
245
247
        # bzr_log_file.tell() on windows always return 0 until some writing done
246
248
        bzr_log_file.write('\n')
247
249
        if bzr_log_file.tell() <= 2:
248
250
            bzr_log_file.write("this is a debug log for diagnosing/reporting problems in bzr\n")
249
251
            bzr_log_file.write("you can delete or truncate this file, or include sections in\n")
250
252
            bzr_log_file.write("bug reports to https://bugs.launchpad.net/bzr/+filebug\n\n")
 
253
 
251
254
        return bzr_log_file
 
255
 
252
256
    except IOError, e:
253
257
        # If we are failing to open the log, then most likely logging has not
254
258
        # been set up yet. So we just write to stderr rather than using
365
369
    global _verbosity_level
366
370
    _verbosity_level = level
367
371
    _update_logging_level(level < 0)
 
372
    ui.ui_factory.be_quiet(level < 0)
368
373
 
369
374
 
370
375
def get_verbosity_level():
376
381
 
377
382
 
378
383
def be_quiet(quiet=True):
379
 
    # Perhaps this could be deprecated now ...
380
384
    if quiet:
381
385
        set_verbosity_level(-1)
382
386
    else:
501
505
    """Report an exception that probably indicates a bug in bzr"""
502
506
    from bzrlib.crash import report_bug
503
507
    report_bug(exc_info, err_file)
 
508
 
 
509
 
 
510
def _flush_stdout_stderr():
 
511
    # installed into an atexit hook by bzrlib.initialize()
 
512
    try:
 
513
        sys.stdout.flush()
 
514
        sys.stderr.flush()
 
515
    except IOError, e:
 
516
        import errno
 
517
        if e.errno in [errno.EINVAL, errno.EPIPE]:
 
518
            pass
 
519
        else:
 
520
            raise
 
521
 
 
522
 
 
523
def _flush_trace():
 
524
    # run from atexit hook
 
525
    global _trace_file
 
526
    if _trace_file:
 
527
        _trace_file.flush()