[MERGE] use apport to get richer detail in bug reports.
mbp at canonical.com
Wed Nov 8 04:22:02 GMT 2006
On 8 Nov 2006, Robert Collins <robertc at robertcollins.net> wrote:
> This patch extends the problem reporting command line UI to use
> apport to report more detailed diagnostics which should help in in
> getting faults reported in Malone and provides the basis for capturing
> more information such as detailed logging data from the current
> invocation of bzr in the future (without cluttering 'bzr.log'
> As possible future work we could have the more detailed 'only useful in
> cases of errors' data output to a temp file during the bzr run, and then
> unlink that file as we exit *unless* we did a problem report warning to
> the user.
Agree- I'd like
* useless/leftover mutter statements killed
* others sent to stderr by -Dtrace
* also all of them captured and included in bug reports
> Right now, this gathers more data for us - for instance it should let us
> tell when users have pycurl or paramiko installed.
> It might be an idea to add in the python information about such modules
> when they are present, so that we can tell if a local install has been
> done and is masking the distribution version.
> I think writing all this data to a file rather than the screen is nice
> because it avoids blatting a bunch of scary data to the screen and
> instead gives a more detailed explanation of what has gone on and what
> we need to happen - and all the 'scary details' are in the file which
> devs will be happy looking at.
> When apport is not present, the old interface is used. I think it would
> be a good idea to change that to a file-writing interface as well, but
> wasn't sure if that would get universal agreement or not ;).
Ok with me as long as -Derror still sends them to stderr.
> # configure convenient aliases for output routines
> @@ -279,7 +281,7 @@
> # specific, but there are too many cases at the moment.
> report_user_error(exc_info, err_file)
> - report_bug(exc_info, err_file)
> + return report_bug(exc_info, err_file)
This now returns two values if it's a bug but none otherwise, which
seems hard on callers who want to unpack the result...
> + exc_type, exc_object, exc_tb = exc_info
> + err_file.write(
> + "bzr: ERROR: %s.%s: %s\n" % (
> + exc_type.__module__, exc_type.__name__, exc_object)
> + )
> + report = problem_report.ProblemReport()
> + report_file, report_filename = tempfile.mkstemp(
> + suffix='.txt', prefix='bzr-crash-', dir='/tmp')
> + python_report_file = os.fdopen(report_file, 'w')
> + try:
> + report['CommandLine'] = ' '.join(sys.argv)
> + # assume we are packaged as bzr.
> + apport_utils.report_add_package_info(report, 'bzr')
What if bzr is installed but we're not running the installed copy?
> + report['BzrPlugins'] = ' '.join(bzrlib.plugin.all_plugins())
> + tb_file = StringIO()
> + traceback.print_exception(exc_type, exc_object, exc_tb, file=tb_file)
> + report['Traceback'] = tb_file.getvalue()
> + apport_utils.report_add_os_info(report)
> + report.write(python_report_file)
> + # give the user a pretty output.
> + err_file.write(
> + 'This is an unexpected error within bzr and we would appreciate a bug report.\n'
> + '\n'
> + 'bzr has written a crash report file that will assist our debugging of this\n'
> + 'in the file %s\n'
> + '\n'
> + 'This is a plain text file, whose contents you can check if you have privacy\n'
> + 'concerns. We gather the package data about bzr, your command line, plugins\n'
> + 'And the backtrace from within bzr. If you had a password in the URL you\n'
^ should be lowercase.
> + 'provided to bzr, you should edit that file to remove the password.\n'
> + '\n'
> + '** To file a bug for this please visit our bugtracker at the URL \n'
> + '"https://launchpad.net/products/bzr/+filebug" and report a bug describing\n'
> + 'what you were attempting and attach the bzr-crash file mentioned above.\n'
> + 'Alternatively you can email bazaar-ng at lists.canonical.com with the same\n'
> + 'description and attach the bzr-crash file to the email.\n' %
> + report_filename
> + )
Can't we use this text whether we have apport or not?
More information about the bazaar