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
20
20
A crash is an exception propagated up almost to the top level of Bazaar.
22
22
If we have apport <https://launchpad.net/apport/>, we store a report of the
23
crash using apport into its /var/crash spool directory, from where the user
23
crash using apport into it's /var/crash spool directory, from where the user
24
24
can either manually send it to Launchpad. In some cases (at least Ubuntu
25
25
development releases), Apport may pop up a window asking if they want
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"
151
143
exc_type, exc_object, exc_tb = exc_info
154
# 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.
155
149
pr.add_proc_info()
156
# It also adds ProcMaps which for us is rarely useful and mostly noise, so
159
150
pr.add_user_info()
161
152
# Package and SourcePackage are needed so that apport will report about even
265
256
def _format_plugin_list():
266
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)
269
264
def _format_module_list():