1
# Copyright (C) 2009, 2010 Canonical Ltd
1
# Copyright (C) 2009-2011 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
84
84
"""Report a bug by just printing a message to the user."""
85
85
trace.print_exception(exc_info, err_file)
86
86
err_file.write('\n')
87
err_file.write('bzr %s on python %s (%s)\n' % \
89
bzrlib._format_version_tuple(sys.version_info),
90
platform.platform(aliased=1)))
91
err_file.write('arguments: %r\n' % sys.argv)
89
err_file.write(textwrap.fill(l,
90
width=78, subsequent_indent=' ') + '\n')
91
print_wrapped('bzr %s on python %s (%s)\n' % \
93
bzrlib._format_version_tuple(sys.version_info),
94
platform.platform(aliased=1)))
95
print_wrapped('arguments: %r\n' % sys.argv)
96
print_wrapped(textwrap.fill(
97
'plugins: ' + plugin.format_concise_plugin_list(),
99
subsequent_indent=' ',
93
102
'encoding: %r, fsenc: %r, lang: %r\n' % (
94
103
osutils.get_user_encoding(), sys.getfilesystemencoding(),
95
104
os.environ.get('LANG')))
96
err_file.write("plugins:\n")
97
err_file.write(_format_plugin_list())
105
# We used to show all the plugins here, but it's too verbose.
100
108
"*** Bazaar has encountered an internal error. This probably indicates a\n"
101
109
" bug in Bazaar. You can help us fix it by filing a bug report at\n"
102
110
" https://bugs.launchpad.net/bzr/+filebug\n"
112
120
# this function is based on apport_package_hook.py, but omitting some of the
113
121
# Ubuntu-specific policy about what to report and when
115
# if the import fails, the exception will be caught at a higher level and
116
# we'll report the error by other means
123
# This import is apparently not used, but we're doing it so that if the
124
# import fails, the exception will be caught at a higher level and we'll
125
# report the error by other means.
119
128
crash_filename = _write_apport_report_to_file(exc_info)
143
152
exc_type, exc_object, exc_tb = exc_info
146
# add_proc_info gives you the memory map of the process, which is not so
147
# useful for Bazaar but does tell you what binary libraries are loaded.
148
# More importantly it sets the ExecutablePath, InterpreterPath, etc.
155
# add_proc_info sets the ExecutablePath, InterpreterPath, etc.
149
156
pr.add_proc_info()
157
# It also adds ProcMaps which for us is rarely useful and mostly noise, so
150
160
pr.add_user_info()
152
162
# Package and SourcePackage are needed so that apport will report about even
256
266
def _format_plugin_list():
258
for name, a_plugin in sorted(plugin.plugins().items()):
259
plugin_lines.append(" %-20s %s [%s]" %
260
(name, a_plugin.path(), a_plugin.__version__))
261
return '\n'.join(plugin_lines)
267
return ''.join(plugin.describe_plugins(show_paths=True))
264
270
def _format_module_list():