~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/trace.py

  • Committer: Vincent Ladeuil
  • Date: 2011-05-17 20:58:43 UTC
  • mfrom: (5609.39.5 2.3)
  • mto: This revision was merged to the branch mainline in revision 5885.
  • Revision ID: v.ladeuil+lp@free.fr-20110517205843-uo1tntrz6kqfn1hb
Merge 2.3 into trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005-2011 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
65
65
from cStringIO import StringIO
66
66
import errno
67
67
import locale
 
68
import tempfile
68
69
import traceback
69
70
""")
70
71
 
80
81
    debug,
81
82
    errors,
82
83
    osutils,
83
 
    plugin,
84
 
    symbol_versioning,
85
84
    ui,
86
85
    )
87
86
""")
122
121
    # FIXME: clearing the ui and then going through the abstract logging
123
122
    # framework is whack; we should probably have a logging Handler that
124
123
    # deals with terminal output if needed.
125
 
    import bzrlib.ui
126
 
    bzrlib.ui.ui_factory.clear_term()
 
124
    ui.ui_factory.clear_term()
127
125
    _bzr_logger.info(*args, **kwargs)
128
126
 
129
127
 
130
128
def warning(*args, **kwargs):
131
 
    import bzrlib.ui
132
 
    bzrlib.ui.ui_factory.clear_term()
 
129
    ui.ui_factory.clear_term()
133
130
    _bzr_logger.warning(*args, **kwargs)
134
131
 
135
132
 
469
466
                    note(line)
470
467
                    break
471
468
 
 
469
def _dump_memory_usage(err_file):
 
470
    try:
 
471
        try:
 
472
            fd, name = tempfile.mkstemp(prefix="bzr_memdump", suffix=".json")
 
473
            dump_file = os.fdopen(fd, 'w')
 
474
            from meliae import scanner
 
475
            scanner.dump_gc_objects(dump_file)
 
476
            err_file.write("Memory dumped to %s\n" % name)
 
477
        except ImportError:
 
478
            err_file.write("Dumping memory requires meliae module.\n")
 
479
            log_exception_quietly()
 
480
        except:
 
481
            err_file.write("Exception while dumping memory.\n")
 
482
            log_exception_quietly()
 
483
    finally:
 
484
        if dump_file is not None:
 
485
            dump_file.close()
 
486
        elif fd is not None:
 
487
            os.close(fd)
 
488
 
 
489
 
 
490
def _qualified_exception_name(eclass, unqualified_bzrlib_errors=False):
 
491
    """Give name of error class including module for non-builtin exceptions
 
492
 
 
493
    If `unqualified_bzrlib_errors` is True, errors specific to bzrlib will
 
494
    also omit the module prefix.
 
495
    """
 
496
    class_name = eclass.__name__
 
497
    module_name = eclass.__module__
 
498
    if module_name in ("exceptions", "__main__") or (
 
499
            unqualified_bzrlib_errors and module_name == "bzrlib.errors"):
 
500
        return class_name
 
501
    return "%s.%s" % (module_name, class_name)
 
502
 
472
503
 
473
504
def report_exception(exc_info, err_file):
474
505
    """Report an exception to err_file (typically stderr) and to .bzr.log.
492
523
        return errors.EXIT_ERROR
493
524
    elif isinstance(exc_object, MemoryError):
494
525
        err_file.write("bzr: out of memory\n")
 
526
        if 'mem_dump' in debug.debug_flags:
 
527
            _dump_memory_usage(err_file)
 
528
        else:
 
529
            err_file.write("Use -Dmem_dump to dump memory to a file.\n")
495
530
        return errors.EXIT_ERROR
496
531
    elif isinstance(exc_object, ImportError) \
497
532
        and str(exc_object).startswith("No module named "):