1
# Copyright (C) 2009-2011 Canonical Ltd
1
# Copyright (C) 2009, 2010 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')
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=' ',
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)
102
93
'encoding: %r, fsenc: %r, lang: %r\n' % (
103
94
osutils.get_user_encoding(), sys.getfilesystemencoding(),
104
95
os.environ.get('LANG')))
105
# We used to show all the plugins here, but it's too verbose.
96
err_file.write("plugins:\n")
97
err_file.write(_format_plugin_list())
108
100
"*** Bazaar has encountered an internal error. This probably indicates a\n"
109
101
" bug in Bazaar. You can help us fix it by filing a bug report at\n"
110
102
" https://bugs.launchpad.net/bzr/+filebug\n"
120
112
# this function is based on apport_package_hook.py, but omitting some of the
121
113
# Ubuntu-specific policy about what to report and when
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.
115
# if the import fails, the exception will be caught at a higher level and
116
# we'll report the error by other means
128
119
crash_filename = _write_apport_report_to_file(exc_info)
152
143
exc_type, exc_object, exc_tb = exc_info
155
# add_proc_info sets the ExecutablePath, InterpreterPath, etc.
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.
156
149
pr.add_proc_info()
157
# It also adds ProcMaps which for us is rarely useful and mostly noise, so
160
150
pr.add_user_info()
162
152
# Package and SourcePackage are needed so that apport will report about even
266
256
def _format_plugin_list():
267
return ''.join(plugin.describe_plugins(show_paths=True))
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)
270
264
def _format_module_list():