apport (0.76.1) feisty-updates; urgency=low * No-change upload to feisty-updates. Thanks to Michael Vogt for verifying. -- Martin Pitt Fri, 27 Apr 2007 13:29:24 +0200 apport (0.76.1~prop1) feisty-proposed; urgency=low Fix breakage with all applications that use Python 2.4: * apport/report.py: Replace any() call with a list comprehension to work with Python < 2.5. (LP: #104864) * apport/report.py: Move the ctypes import to the one place where we actually need it, and do not entirely fail if they do not exist (such as in Python 2.4). It is only required for non-default Feisty kernels anyway. (LP: #107662) -- Martin Pitt Thu, 19 Apr 2007 13:21:41 +0200 apport (0.76) feisty; urgency=low * Move python_hook.py out of the apport module to apport_python_hook.py, so that it does not inflict the expensive import of all apport related modules to every python program. Adapt module prefixes accordingly. (LP: #105764) * setup.py, debian/python-apport.install: Install apport_python_hook.py into the python-apport binary package. * apport/ui.py test suite: Unset locale related environment variables so that the tests which check strings are not invalidated by translations. -- Martin Pitt Thu, 12 Apr 2007 11:47:50 +0200 apport (0.75) feisty; urgency=low * apport/report.py, add_proc_info(): Chop off /rofs/ prefix from ExecutablePath, so that crashes work on the live system, too. Arguably a kernel bug, but probably too hard to fix at this time. (LP: #102909) * backends/packaging-dpkg.py, get_modified_files(): Ignore empty lines in broken .md5sums file rather than crashing on them. (LP: #102906) -- Martin Pitt Wed, 4 Apr 2007 21:51:28 +0200 apport (0.74) feisty; urgency=low * debian/apport-{gtk,qt}.install: Do not install .desktop files for now, until we get a proper guided bug reporting. * problem_report.py, write_mime(): Do not re-compress keys which already end in .gz. Add test cases. * test-hooks: Add a (dodgy) test case for calling package_hook on an uninstalled package. After all, this is very likely to happen for installation errors. This reproduces #97636. * backends/packaging-dpkg.py, get_source(): Add a similarly dodgy fallback to apt if the queried package is not installed. This needs to be generalized and cleaned up later, but now is the time for unintrusive small patches. (LP: #97636) * test-apport: Do not fail on non-empty gdb stderr if it only consists of a single warning (as happens on powerpc). * apport/report.py, test_check_interpreted(): Run gedit test on an actually existing file, reproducing the interpreter confusion reported in #102056. * apport/report.py, _check_interpreted(): Add a whitelist of common interpreters and check ExecutablePath against it. (LP: #102056) * apport/ui.py: Ignore SystemError exceptions from apt, which happen on badly formatted source.list entries. (LP: #98901) * apport/ui.py: Fix crash on None candiateOrigin from the apt cache object. (LP: #98961) * gtk/apport-gtk.glade: Add window titles to progress and details dialogs. (LP: #97640) -- Martin Pitt Wed, 4 Apr 2007 14:44:08 +0200 apport (0.73) feisty; urgency=low * problem_report.py, write(): Allow a third optional argument in tuple values, which specify a maximum file size. Above it, the entire key gets removed. Add testsuite checks for all boundary cases. * bin/apport: Limit core dump size to 75% of usable RAM (MemFree+Cached-Writeback). This should avoid trashing people's boxes hard on huge core dumps. Bump dependencies on python-problem-report. Create an expensive, but realistic check for this in test-apport. (LP: #71560) * apport/ui.py, run_crash(): If a signal crash report does not have a core dump, explain that the computer has too little memory for an automatic analysis/report of the crash. Add test suite check. -- Martin Pitt Thu, 29 Mar 2007 23:38:23 +0200 apport (0.72) feisty; urgency=low [ Martin Pitt ] * bin/apport-chroot, command_create(): Install gpgv. * bin/apport-retrace: Fix error handling in fetch_unpack(). * Move apport-retrace.1 manpage from package apport to apport-retrace. Bump Conflicts/Replaces accordingly. * bin/launchpad-crash-digger, apport/ui.py: Remove the special case 'powerpc'->'ppc' and use need-powerpc-retrace uniformly. * debian/control: Add XS-Vcs-Bzr: header. * apport/ui.py: Fix wrong parameter name in help message. * Another grammar fix, thanks to Brian Murray! [ Michael Hofmann ] * debian/local/ubuntu-bug: Try to use apport-cli, if we do not have a $DISPLAY, or neither Gnome nor KDE are running. * debian/control: Recommend elinks, since it is the only text browser so far that works with Launchpad (see #59510) * Add debian/apport-cli.README.Debian: Describe how to integrate apport-checkreports and apport-cli into .bashrc for crash notification on servers. * qt4/apport-qt: Fix undefined symbol in ui_present_package_error(). (LP: #97282) -- Martin Pitt Thu, 29 Mar 2007 11:41:39 +0200 apport (0.71) feisty; urgency=low * cli/apport-cli, qt4/apport-qt: Fix bad grammar 'some minutes'. (LP: #95296) * problem_report.py, write_mime(): Add optional 'preamble' parameter. Add test case. * apport/ui.py, upload_launchpad_blob(): Set need-$ARCH-retrace tag in MIME preamble. Bump p-problem-report dependency. (LP: #94790) * bin/apport-retrace: In verbose mode, display the path of currently extracting deb. * bin/apport-retrace: Do not fall over errors of dpkg -x (which happens e. g. on udev, where it cannot unpack /dev, since this is a symlink to the real /dev). Merely print out a warning about it. * apport/ui.py, run_report_bug(): Ignore ENOENT from add_proc_info(). This happens if the user closes the application prematurely, so that /proc/pid does not exist any more. Add test case. (LP: #95954) * backends/packaging-dpkg.py, get_modified_files(): Ignore lines in .md5sums files which contain a NUL byte. This Should Not Happen™, but nevertheless did. (LP: #96050) * apport/ui.py, doc/package-hooks.txt: Check for a field "UnreportableReason: " and display an information box that the current crash cannot be reported because of . Add test case. Document the new field. * apport/ui.py: Check package origin, compare it to DistroRelease:, and report crash as unreportable if they do not match. This particularly saves the user from uploading large reports for e. g. opera crashes, and avoids filing Ubuntu bugs from Debian installations. (LP: #75513) -- Martin Pitt Mon, 26 Mar 2007 18:01:24 +0200 apport (0.70) feisty; urgency=low [ Martin Pitt ] * bin/apport-retrace: Add option --remove-tag to remove a Launchpad bug tag. This is intended for an automatic Malone crash retracing system. * debian/control: Bump python-launchpad-bugs dependency to ensure that we have Bug.[gs]et_metadata(). * man/apport-retrace.1: Add documentation for --confirm and --remove-tag. * bin/apport-chroot: Add option --remove-tag and pass it to apport-retrace. * apport/chroot.py, fix_symlinks(): Convert chroot path prefixed absolute symlinks to relative symlinks to avoid fakechroot's weird handling of absolute symlinks. * Add bin/launchpad-crash-digger: Daemon for watching out for need-$ARCH-retrace tagged Ubuntu bugs in Launchpad and calling apport-retrace on them. * bin/apport-retrace: Mangle bug comment with StacktraceTop to not contain invalid UTF-8, to avoid getting Internal Server Errors from LP. * debian/local/setup-apport-retracer: Install libc6-i686{,-dbgsym} into an x86 chroot, to get sane x86 backtraces for crashes in libc. * debian/local/setup-apport-retracer: - Unpack and install python-launchpad-bugs locally if the package is not installed. - Link launchpad-crash-digger into the retracer's bin/ dir. * run-tests: Run tests with python's -tt flag to catch whitespace errors. * Replace tabs with spaces in all Python files. (LP: #93561) * Remove trailing white space in all Python files. * apport/report.py, add_proc_info(): Do not regard symlinks to executables as interpreted scripts any more (such as Debian alternatives). Add test case. (LP: #94732) * problem_report.py: Add new method get_new() which returns a set of all keys which have been added since load() or construction. Add test cases. * problem_report.py: Add optional parameter only_new to write(), which writes only the get_new() keys. Add test case. * apport/ui.py: Remember currently processed report file and update it with the added information, so that it becomes useful for local evaluation, too. Bump python-problem-report dependency to ensure write()'s only_new availability. (LP: #94678) * apport-chroot: Add forgotten sys.exit(1) after printing the error message about an invalid chroot specification. * apport/ui.py, run_crash(): Check for a field "UnsupportableReason: " and display an information box that the current configuration cannot be supported because of , instead of processing and reporting the crash. Add test case for this workflow. With special regards to our Firefox crash triagers who want to get rid of the hundreds of flash-related crashes. :) * apport/report.py, add_hooks_info(): Use execfile() instead of __import__(), since package names might conflict with module names already imported into apport's namespace. Also search for hook named after the source package name (prefixed with 'source_'). Add test cases. * bin/apport-chroot: When specifying --save for login, only save the tarball if the exit status is 0. * bin/apport-chroot, create: Install /usr/sbin/policy-rc.d to disable init scripts. * bin/apport-chroot: Fixed command function selection to not abort with 'unknown command' if the DistroRelease: was unknown. * bin/apport-retrace: Replace --no-purge with --no-dpkg. With this option, do not call dpkg --unpack any more, but dpkg -x, to avoid any fchmod() and other calls which cause problems in fakechroots. * bin/apport-retrace: Fix ordering of version numbers in warning message. * doc/package-hooks.txt: Add some examples, document source package hook. [ Kees Cook ] * apport/report.py, add_proc_info(): If reading /proc/pid/maps fails, ptrace() the target process to make it readable (proposed security improvement in future kernels). * bin/apport-retrace: Fix crash for packages unknown to the apt cache. * apport/report.py, add_gdb_info(): Limit maximum backtrace depth to 2000 to avoid infinitely looped stacks and gdb crashes. (LP: #94455) This also caps the maximum size of information that we add to reports. (LP: #92653) * bin/apport-retrace: Add option -R/--rebuild-package-info, so that apport-retrace works on unprocessed crash dumps in /var/crash. * Some grammar corrections. * Add package-hooks/source_apport.py: Package hook for apport itself. Include /var/log/apport.log and the status of files in /var/crash. [ Michael Hofmann ] * Add cli/apport-cli, setup.py, debian/apport-cli.install, debian/control: Add command line user interface. * apport/ui.py, format_filesize(): Use MiB and GiB instead of MB and GB; these are the official units. Adapt test cases. * apport/ui.py, collect_info()/file_report(): Do not raise an exception on KeyboardInterrupt in the subthreads. * apport/ui.py, open_url(): Do not use gtk.MessageDialog(), but ui_error_message(), and fix error passing so that the message is displayed in the parent thread. * apport/ui.py, open_url(): Check that $DISPLAY is set before considering the KDE/Gnome web browsers. -- Martin Pitt Mon, 26 Mar 2007 09:41:03 +0200 apport (0.69) feisty; urgency=low * apport-chroot: Add command 'installdeb' to conveniently install a bunch of .debs into a chroot. * apport-chroot: Fix 'login' and 'upgrade' commands to not require specifying a chroot map when giving a chroot tarball path as argument. * test-apport: Check that core dumps are written for packaged programs as well, if ulimits want them. (Test for #92029) * bin/apport: Call write_user_coredump() for packaged program crashes and SIGABRT as well. (LP: #92029) -- Martin Pitt Mon, 19 Mar 2007 17:37:23 +0100 apport (0.68) feisty; urgency=low [ Michael Hofmann ] * qt4/apport-qt: Fix taskbar entry, remove an unused method. * qt4/error.ui: Fix icon spacing. [ Martin Pitt ] * apport-retrace: Add option --confirm to display the retraced stack traces and ask for confirmation before uploading them as LP bug attachments. (LP: #91878) * apport-chroot: Add option --confirm-attach; if given, call apport-retrace with --confirm. -- Martin Pitt Thu, 15 Mar 2007 00:05:18 +0100 apport (0.67) feisty; urgency=low * debian/local/setup-apport-retracer: Add apt sources for restricted, universe, and multiverse, too. * po/de.po: Update from Rosetta. * apport/report.py: Remove undefined call to error_log() in _command_output(), replace it with raising proper exceptions. * bin/apport-retrace: Fix 'numer' typo. (LP: #91680) * test-apport: Check that non-packaged executables generate a core dump on SIGABRT, too (test case for bug #92029). * bin/apport: Move check for ignoring SIGABRT below the core dump file writing for non-packaged binaries. (LP: #92029) * gtk/apport-gtk.glade: - Remove titles from the progress windows to comply with Gnome HIG and not repeat the text content. - Improve wording a bit. - LP: #92114 * gtk/apport-gtk{,.glade}: Fix signal handler name of the Cancel button in the upload progress dialog, so that it actually works. (LP: #92115) -- Martin Pitt Wed, 14 Mar 2007 17:34:57 +0100 apport (0.66) feisty; urgency=low * Remove apport/MultipartPostHandler.py, this functionality moved to python-launchpad-bugs now. Add a dependency to that package. * apport/ui.py, upload_launchpad_blob(): Use the shiny new launchpadBugs.storeblob.upload(). * bin/apport-retrace: Attach retraced stack traces back to the Launchpad bug report if no other output option is given (This corresponds to the in-place editing when a report file is specified). Add option --cookie to specify a Mozilla-style cookie file for the necessary Launchpad authentication. * man/apport-retrace.1: Document above apport-retrace changes. * bin/apport-chroot: Add --cookie option: temporarily symlink cookie into the chroot and pass it to apport-retrace in retrace mode. -- Martin Pitt Sat, 10 Mar 2007 15:01:57 +0100 apport (0.65) feisty; urgency=low * debian/local/setup-apport-retracer: - Replace grep-dctrl with grep call, since grep-dctrl is not installed in all the DC chroots. - Do not download apport source from archive.u.c., instead require that this script lives in the unpacked apport source tree. * bin/apport-chroot: Use apt-get options -y and --allow-unauthenticated when installing additional packages. * bin/apport-chroot: Handle --extra-package for 'upgrade', too, to provide a simple way of adding a package to an existing chroot tarball. * debian/local/setup-apport-retracer: Create tarball chroots by default. It only imposes a negligible overhead, and sharing unpacked directories with multiple people is just too brittle. * bin/apport-retrace: Add option --no-purge to not purge unpacked packages after retracing. This is (only) useful with temporarily unpacked chroots, since it's only a waste of time there. * bin/apport-chroot: Call apport-retrace with --no-purge when retracing in a chroot tarball. * apport/chroot.py: Add fix_symlinks() method to remove the chroot root directory prefix from symbolic links; they prevent function of tarball chroots and moving around directory chroots. Add test case. * bin/apport: Fix symlinks after creating and upgrading a chroot. * bin/apport-chroot: Add option --save to update a tarball after logging in to it. -- Martin Pitt Sat, 10 Mar 2007 21:21:25 +0100 apport (0.64) feisty; urgency=low * bin/apport-chroot: Add 'login' command. * bin/apport-chroot: Install apport-retrace into a newly created chroot. * Add debian/local/setup-apport-retracer: Script to install local versions of apport, debootstrap, fake{,ch}root libraries, and a feisty apport fakechroot. This works OOTB on ronne's amd64 and i386 feisty chroots. The script is not shipped in any package yet, but it's convenient to ship it in revision control and in the source. * apport/report.py, _check_interpreted(): When calling an interpreter with a script name as argument, set ExecutablePath to the script instead of the interpreter. Add test case. (LP: #88794) * apport/report.py, search_bug_patterns(): Catch all exceptions from urlopen(), not just IOError. Sometimes this fails with funnier errors. (LP: #89589) * bin/apport-retrace: Give some additional explanation when installing packages fails. (LP: #89916) * apport/fileutils.py, get_all_{system_,}reports(): Fix file access race condition. (LP: #89977) * bin/apport-retrace: Add option -p/--extra-package to install an additional package for retracing. May be specified multiple times. Document new option in man/apport-retrace.1. (LP: #90077) * bin/apport-chroot: Add a similar option -p/--extra-package and install those in the 'create' command and simply pass it to apport-retrace in the 'retrace' command. (LP: #90077) * bin/apport-chroot: Add a -v/--verbose option. * bin/apport-retrace: Do not complain about missing ddebs for Arch: all packages. -- Martin Pitt Tue, 6 Mar 2007 16:20:41 +0100 apport (0.63) feisty; urgency=low New feature: fakechroot support for apport-retrace * bin/apport-retrace: - Simplify program design and throw away the complicated debug symbol sandbox generation, along with the -d and -C options. Instead, directly install the missing packages and ddebs with apt. This makes the tool more suitable for running in chroots and has often been requested anyway. - Add option -u/--unpack-only which causes additionally installed packages to be unpacked without being configured and purged again after retracing. This allows apport-retrace to work under fakechroot and has the nice side effect of speeding up package installation (we do not care about configuration for retracing anyway). * man/apport-retrace.1: Update description for the new behaviour, drop documentation of the -d and -C options, and add documentation of -u. * Add apport/chroot.py: Class for representing and working with chroots; this uses the fakeroot and fakechroot libraries when being called as non-root. * Add bin/apport-chroot: CLI frontend for doing various things with chroots (including fakeroot/fakechroot support from the Chroot class). For now, this implements: - create a chroot (tarball or directory) - dist-upgrade a particular or all chroots - apport-retrace a bug or Apport report file * setup.py: Ship apport-chroot in scripts directory. * Add a new package apport-retrace which ships apport-retrace and apport-chroot and carries all the heavier dependencies (binutils, python-launchpad-bugs, python-apt, etc.). Drop the latter two dependencies from the apport package. This allows us to install the apport-retrace package in fakechroots (not possible with apport itself) and avoid unnecessary dependencies on normal desktop installations. -- Martin Pitt Mon, 5 Mar 2007 11:20:36 +0100 apport (0.62) feisty; urgency=low * apport/ui.py, collect_info(): Use REThread instead of Thread and raise exceptions from it, so that errors during info collection actually become visible. * apport/report.py, add_proc_info(): Check that ExecutablePath actually exists, so that invalid values from transient error conditions are ignored (such as '/usr/bin/gnome-panel\x00\x00\x8b (deleted)'). * apport/packaging.py: Add interface get_system_architecture() to return the system architecture in the distro specific notation. This can differ from get_architecture(package) on multiarch platforms such as amd64. * backends/packaging-dpkg.py: Implement get_system_architecture() to return dpkg --print-architecture, add a shallow test case. * apport/report.py, add_package_info(): Rename key 'Architecture:' to 'PackageArchitecture:' for clarity. * apport/report.py, add_os_info(): Add system architecture as 'Architecture:' field. * apport/ui.py, create_crash_bug_title(): Append warning about non-native package if package architecture does not match the system's one. * All test suites: Remove redundant word 'behaviour' from test descriptions. * test-hooks: Run tests on installed hooks in /usr/share/apport by default and add a '--local' switch to test the hooks in the source tree instead. Use this option in run-tests. * apport/report.py, test_add_proc_info(): Change the python script test so that it does not depend on being run in the source tree. * run-tests: Add a 'local' command line option which runs tests on the files and modules in the build tree. Run tests on system files/modules by default. * setup.py, debian/apport.install: Ship test-hooks, test-apport, and run-tests in /usr/share/apport/testsuite/, so that the full test suite can be run in the installed system. * gtk/apport-gtk.desktop.in: Only show in Gnome and Xfce. * qt4/apport-qt.desktop.in: Only show in KDE. -- Martin Pitt Thu, 1 Mar 2007 10:43:29 +0100 apport (0.61) feisty; urgency=low * bin/apport: - Kernel 2.6.20-9 now sets CORE_REAL_RLIM to -1 instead of not setting it; handle this case correctly. (LP: #87065) - Add forgotten multiplication of CORE_REAL_RLIM with 1024, since ulimit sets kB, not bytes. -- Martin Pitt Tue, 27 Feb 2007 16:06:11 +0100 apport (0.60) feisty; urgency=low * gtk/apport-gtk.glade: Reintroduce window titles. Since the crash notifications are like alerts, title have been removed recently to comply with Gnome HIG standards, but then the user will get 'nameless window' buttons in the task bar. Let's have the smaller evil then. (LP: #87164) * apport/packaging.py: Add get_architecture() interface for determining the architecture of a particular package (which might not match the overall system architecture on multiarch-capable systems, e. g. an i386 Firefox package installed on amd64). * backends/packaging-dpkg.py: Implement get_architecture() and add test case. * apport/report.py, add_package_info(): Add Architecture: field. (LP: #87424) * apport/ui.py: Already mark report as seen when we load it, not just in the information collection thread. That way, reports will only be shown once on systems which have /var/crash mounted noatime, too. (LP: #85809) * apport/fileutils.py, mark_report_seen(): If os.utime() fails, and opening the report file for reading does not change the atime (happens with noatime mount option), don't throw an exception, just delete the report. (other aspect of LP: #85809) * qt4/apport-qt: Wrap gettext() into an unicode(str, 'UTF-8') call, otherwise all non-ASCII unicode strings are broken. (LP: #87757) -- Martin Pitt Mon, 26 Feb 2007 20:55:40 +0100 apport (0.59) feisty; urgency=low * apport/report.py: Check that interpreter options are discarded in test_check_interpreted_script(). This replicates bug #87005. * apport/report.py, _check_interpreted_script(): Filter out interpreter command line options. This should make the detection of interpreted scripts more robust. (LP: #87005) * test-apport, check_crash(): Differ between expecting the program dumping core and finding a core dump on disk, because this is not equivalent any more with core pipelining. * bin/apport: Write core files into a process' cwd if the process' ulimit requests and permits it and the crashes process is not packaged, so that developers get happy again. Test this behaviour with various ulimits in test-apport. * test-apport: Check that the core file written by apport is valid. This uncovers kernel bugs like #87065 * problem_report.py test suite: Use assertAlmostEqual() when comparing stat times, since they are floats on some systems. * apport/report.py, add_gdb_info(): - Remove all the initial gdb output, which gets rid of the duplicated #0 line. - Replace some stray tabs with spaces. - Thanks to Kees Cook for this! -- Martin Pitt Thu, 22 Feb 2007 19:52:52 +0100 apport (0.58) feisty; urgency=low * qt4/apport-qt.desktop.in move to System menu -- Jonathan Riddell Tue, 20 Feb 2007 11:35:17 +0000 apport (0.57) feisty; urgency=low * apport/ui.py: Intercept ENOMEM and fail gracefully; there is little else we can do at that point, and there is no point in presenting a crash report for this. (LP: #85155) * apport/ui.py: Ignore KeyError when deleting the CoreDump field on sending a reduced report. This Should Not Happen™, but nevertheless did. (LP: #86083) * gtk/apport-gtk, qt4/apport-qt: Intercept ImportError for the non-builtin Python modules. This usually happens for crashes when there is a dist-upgrade active and some Python packages have not been configured yet. (LP: #86007) * apport/ui.py: If the problem report does not apply to a packaged program, and we have an ExecutablePath, mention it in the error message for easier debugging. * apport/python_hook.py: Resolve symbolic links in ExecutablePath. (LP: #85529) * apport/ui.py, open_url(): Remove debugging print statement again, now that we tracked down bug #83974. -- Martin Pitt Mon, 19 Feb 2007 14:40:29 +0100 apport (0.56) feisty; urgency=low * apport/ui.py, open_url(): When being invoked as root, call gnome-open or firefox as root through sudo instead of dropping our uid/gid and calling it normally. The latter does not work for Firefox for some mysterious reason. Thanks to Mika Fischer for this trick. (LP: #81207) * Add debian/local/ubuntu-bug.1: Manpage for ubuntu-bug. Add it to debian/apport.manpages. * qt4/apport-qt: Add some missing features that are present in the GTK UI: - Do not show details by default, add a button to show them. - Add complete/reduced bug report radio buttons. - Thanks to Michael Hofmann for this! -- Martin Pitt Thu, 15 Feb 2007 14:59:07 +0100 apport (0.55) feisty; urgency=low * Add debian/local/ubuntu-bug: Check for a running KDE or Gnome session, availability of apport-gtk and -qt, and open the appropriate GUI in bug filing mode. This makes it convenient for shell users and is also required for proper Firefox 'Report a bug...' menu integration (see bug #85041). * debian/apport.install: Install ubuntu-bug to /usr/bin. * gtk/apport-gtk: Generously add some gtk.main_iteration() calls to avoid hanging dialogs, since we do not have a main loop. * apport/ui.py: Do not silently ignore exceptions while uploading data to Launchpad, but intercept them and display their message in the error dialog. (Part of LP: #84992) * apport/ui.py: Switch from edge.launchpad.net to production launchpad.net, since the necessary bits are now there. (LP: #84992) -- Martin Pitt Wed, 14 Feb 2007 13:37:52 +0100 apport (0.54) feisty; urgency=low * bin/apport: Re-enable, now that our kernel has been fixed to pipe complete core dumps to us. -- Martin Pitt Tue, 13 Feb 2007 09:33:38 +0100 apport (0.53) feisty; urgency=low * apport/ui.py, open_url(): Remove some accidentally left-over debugging junk. * gtk/apport-gtk: Process pending GTK events after hiding the info collection window to avoid a hanging dead dialog. * gtk/apport-gtk: Do not count the lines of fields with binary data. This particularly avoids long delays with huge core dumps. (LP: #81979) * apport/ui.py, open_url(): Print URL to stdout, so that we can debug the weirdness in #83974. -- Martin Pitt Mon, 12 Feb 2007 16:57:05 +0100 apport (0.52) feisty; urgency=low * apport/report.py: Fix hook directory to be /usr/share/apport/package-hooks/, not /u/s/apport/. * Add doc/package-hooks.txt: Document per-package hooks, ship in package apport. * Add debian/apport.dirs: Ship package-hooks/ directory. * gtk/apport-gtk, qt4/apport-qt: Fix detection of binary data so that the CoreDump is not displayed as incomprehensible gibberish any more. * Add qt4/apport-qt.desktop.in and add it to POTFILES.in. * bin/apport-retrace: --verbose can now be specified multiple times to increase verbosity and debug package installation. Also, fix some quoting bugs. Thanks to Kees Cook for this! * qt4/apport-qt: Fix restart button handling. (LP: #84202) * qt4/apport-qt: Do not try to call splitlines() on a report value that is a file reference; just display the reference instead. (LP: #84196) * bin/apport: Disable for now, since the current kernel produces cropped core dumps and thus we get totally useless crash reports -- Martin Pitt Fri, 9 Feb 2007 18:58:08 +0100 apport (0.51) feisty; urgency=low New feature: Qt4 GUI implementation: * Added qt4/: Qt4 implementation of the abstract user interface. Thanks to Michael Hofmann for that! * debian/copyright: Add Michael as copyright holder. * setup.py, debian/control, debian/apport-qt.install: Packaging bits for apport-qt. * Move translations from apport-gtk to apport, since they are shared between frontends. Add appropriate Conflicts/Replaces (we don't strictly need it here because we strip them anyway, but we need that for the moving icon anyway). * Move icon from apport-gtk to apport, since it is/can be shared between frontends. Improvements: * Replaced old apport.png icon stolen from bug-buddy with nice SVG one. Thanks to Troy Sobotka for this! * debian/copyright: Add Troy as copyright holder for the icon. * bin/apport-retrace, man/apport-retrace.1: Document that report can now be a LP bug number. -- Martin Pitt Thu, 8 Feb 2007 20:01:12 +0100 apport (0.50) feisty; urgency=low * gtk/apport-gtk.glade: Fix 'prolem' typo. * bin/apport-retrace: Use python-launchpad-bugs to create a Report object from a given Launchpad bug number (given as argument instead of the report file path). Add appropriate p-l-b dependency. * gtk/apport-gtk: Mark '(binary data)' string as translatable. -- Martin Pitt Thu, 8 Feb 2007 15:15:47 +0100 apport (0.49) feisty; urgency=low * gtk/apport-gtk.glade: Fix s/send/sent/ typo. Closes: LP#83061 * apport/ui.py, create_crash_bug_title(): Cope with odd Tracebacks that are shorter than three lines. Add test case from the bug. Closes: LP#83556 * apport/python_hook: Do not create a report if the binary is ignored. Add test case. Closes: LP#83566 * gtk/apport-gtk: Do not save/alter crash dialog title any more, it's empty now. * apport/ui.py, open_url(): Check the user's session for ksmserver/gnome-session to decide whether to prefer kfmclient or gnome-open. Also, only call Firefox directly if gconf's prefered browser is actually Firefox. Closes: LP#82007 -- Martin Pitt Tue, 6 Feb 2007 18:33:15 +0100 apport (0.48) feisty; urgency=low New feature: Infrastructure for reporting kernel Oopses: * Add bin/kernel_hook and ship it in /usr/share/apport. The kernel can call this on an Oops. Add a test suite for it to test-hooks. * apport/ui.py: Add support for reporting ProblemType: Kernel reports, and add test suite for the workflow. * gtk/apport-gtk{,.glade}: Add implementation for ui_present_kernel_error(). Improvements: * Merged various apport-retrace improvements from Kees' branch: - Add various options to override some report fields with local values. - Add --verbose option and be quiet by default. - Read ProcMaps for additional library dependencies, to also catch libraries loaded at runtime (plugins). - Set correct debug file directory when starting an interactive gdb session with -g. * Add gtk/apport-gtk.desktop.in: Desktop file for calling apport-gtk in 'file a distro bug' mode, to be displayed in gnome-panel's System menu (see bug-reporting-tool spec). Also add a Makefile to do the intltool-merge dance, add it to POTFILES.in, and ship it in debian/apport-gtk.install. * bin/apport: Call add_os_info(), so that we get architecture information even for 'naked' reports which didn't go through UI enrichment. * Add ./test-hooks: Test suite for the various package hooks shipped with apport. Test the package problem hook for now. Bug fixes: * debian/control: Add missing python-apt dependency to apport (apport-retrace needs it). Thanks to Kees Cook for noticing. * debian/control: Add gdb dependency to python-apport. * backends/packaging-dpkg.py test suite: Verify that packages returned by get_dependencies() actually exist. This catches the 'chops off first letter of package name sometimes' bug. * backends/packaging-dpkg.py, _init_status(): Add missing space to Depends: field format in dpkg-query call. This fixes the chopped-off first letters in the 'Dependencies' report field. * setup.py: Remove version attribute, we do not update and use it anyway. * apport/ui.py: Do not crash if Package: specifies a nonexisting package. Display a proper error message instead. Add test_run_crash_errors() test case. * apport/report.py, add_package_info(): Fix crash when the first dependency is not installed. Closes: LP#82561 * gtk/apport-gtk.glade: Remove window titles in alert dialogs to comply with Gnome HIG. Closes: LP#83123 -- Martin Pitt Mon, 5 Feb 2007 12:19:35 +0100 apport (0.47) feisty; urgency=low * apport/report.py, add_hooks_info(): Only use first part of 'Package:', there might be a version number and a changed files list which we must not propagate to the import statement. Closes: LP#82566 -- Kees Cook Wed, 31 Jan 2007 15:37:11 -0800 apport (0.46) feisty; urgency=low * debian/control: Bump dependencies to python-apport due to recent changes in expected return values in some UI functions. Closes: LP#82267 * bin/package_hook: Remove erroneous 'import apport.packaging', which shadows the packaging variable in the apport package. This unbreaks the package problem hook. Closes: LP#82297 -- Martin Pitt Wed, 31 Jan 2007 07:51:24 +0100 apport (0.45) feisty; urgency=low New feature: Infrastructure for package install/upgrade failures: * Add bin/package_hook: Script for creating a report for a package installation/upgrade failure. It receives a package name, a number of log files, and an ErrorMessage: from stdin. This will be called from e.g. dist-upgrader. * setup.py, debian/apport.install: Ship package_hook. * apport/ui.py: If ProblemType is 'Package', call a new function self.ui_present_package_error() instead of presenting a crash. Add test suite checks for the package error report workflow. * apport/ui.py, create_crash_bug_title(): Create default bug title for package reports. Add various test cases. * gtk/apport-gtk{,.glade}: GTK implementation of ui_present_package_error(). New feature: Maintain a per-binary blacklist to inhibit apport crash reports until the binary changes. Closes: LP#79408 * apport/report.py: Add new Report methods check_ignored() and mark_ignore() to check for/set ignore list entries. Add test cases. * apport/ui.py: Add another return value of ui_present_crash() to specify whether or not to blacklist the current crash's executable. Check workflow of both responses in the test suite. * gtk/apport-gtk{,.glade}: Add a blacklist checkbox to the crash notification dialogs. * bin/apport: Do nothing if the current crash is blacklisted. * test-apport: Test blacklisting. Bug fixes: * gtk/apport-gtk: Fix return code for restarting the application ('reopen' -> 'restart'). Closes: LP#81422 * test-apport: Adapt to new core_pattern kernel interface mode: - Check core_pattern instead of the obsolete crashdump sysctl to determine whether or not apport is running. - Give apport max. 10 seconds to complete. The current kernel reaps the crashed process as soon as writing the core dump to the pipe is finished, but apport still needs to write the report file. - Do not EXFAIL the test for crashes in nonwriteable cwd any more, since it is now supposed to work (we do not write a core dump to the disk any more). * run-tests, use-local: Adapt to new core_pattern kernel interface. * apport: Improve logging of exceptions, include environment variables. * apport/report.py test suite: Use gdb to generate a test core dump, do not rely on kill(SIGSEGV) and the kernel to do it (since we now use a pipe in core_pattern). * backends/packaging-dpkg.py: Fix return value of get_modified_files() if dpkg .list file is missing. * apport/report.py, add_package_info(): Do not produce stray empty lines for uninstalled alternative dependencies. * apport/report.py: Fix test_add_gdb_info_script() to not leave behind a stray gzip process which randomly blocks stdin. Closes: LP#78421 * backends/packaging-dpkg.py: Do not read the dpkg status in the constructor, but lazily initialize it when actually calling a query function. This avoids imposing the dpkg-query overhead for programs that import the apport package without doing package queries (such as any Python program under Ubuntu, due to the Python crash hook). * apport/ui.py, create_crash_bug_title(): - Do not crash on an empty StacktraceTop. Closes: LP#81677 - Do not mention an unknown function name ('??') in the bug title; instead, use the topmost function with a known name, or leave it out at all. - Add test cases for these situations. * apport/report.py, _get_ignore_dom(): Do not throw an error for an empty ignore list file. Code cleanups: * apport/report.py test suite: Refactorize generation of test crash program and core dump generation. * Consistently use 'in'/'not in' instead of find() for substring searches. * Changed the packaging backend import, so that its methods can now be accessed at apport.packaging instead of apport.packging.impl. -- Martin Pitt Sun, 28 Jan 2007 12:34:05 +0100 apport (0.44) feisty; urgency=low Some more 'Need for Speed' optimizations: * backends/packaging-dpkg.py, _check_files_md5(): Also accept a md5sum string in addition to a md5sum file. * backends/packaging-dpkg.py, get_modified_files(): Compare package file's ctime and mtime against the package list file's mtime and only md5sum the files that are newer. This drastically reduces the amount of md5suming (usually to zero) and thus speeds up the information collection. * backends/packaging-dpkg.py: Use a single hackish 'dpkg-query --show *' as a portable variant of 'cat /var/lib/dpkg/status' to pre-fill the status cache with all packages instead of calling dpkg -s on every single package we query. This changes the time for figuring out dependencies and their versions from 'unbearable for many packages' to 'barely noticeable'. New feature: per-package apport hooks to collect additional information: * apport/report.py: Add method add_hooks_info() which executes a function add_info(report) from /usr/share/apport/.py. Also add appropriate test cases. This provides per-package hooks for apport. * apport/ui.py: Call add_hooks_info() in the information collection thread. Bug fixes: * apport/report.py: Add some more test cases for _check_interpreted() for Python scripts. * apport/python_hook.py: Check for a correct ExecutablePath in test_general(). * apport/python_hook.py: Use fileutils.likely_packaged() instead of checking for /tmp and home, so that we ignore stuff in /usr/local, too. Closes: LP#81244 * apport/python_hook.py: If we figure out an ExecutablePath which is not actually an executable, do not create a report. This particularly affects interactive python sessions where sys.argv[0] is empty and thus ExecutablePath ends up being the current directory. Add test cases. Closes: LP#81237 -- Martin Pitt Wed, 24 Jan 2007 17:16:04 +0100 apport (0.43) feisty; urgency=low * apport/ui.py: Add method create_crash_bug_title() to construct a reasonable standard bug title for crash reports, so that the automatic duplicate detection actually has a chance to work. Also add test cases for various signal crashes and an unhandled Python exception. * apport/ui.py, file_report(): Submit a default bug title for crash reports. Closes: LP#79657 -- Martin Pitt Tue, 23 Jan 2007 16:26:40 +0100 apport (0.42) feisty; urgency=low New feature: https://wiki.ubuntu.com/ApportImprovements (kernel interface change): * bin/apport: Support calling without arguments, to support new semantics agreed in the ApportImprovements spec: macro values (in particular, pid and signal number) are passed as environment variables. * preloadlib/libapport.c: Simulate new kernel behaviour described above. * debian/apport.init: Set the kernel's core_pattern sysctl to pipe to apport if the edgy-style 'crashdump-helper' sysctl helper does not exist. Bug fixes: * bin/apport-retrace: Beautify error message when report file is not accessible. Closes: LP#79568 * apport/ui.py: Fix crash in the bug pattern search thread if we could not determine a package name. Closes: LP#77872 * bin/apport: Only unlink the core dump if it still exists. Closes: LP#80866 * gtk/apport-gtk.glade: Fix expand/fill attributes so that the expander gets all the space when resizing the window. Closes: LP#80987 * problem_report.py, write_mime(): Make sure that multi-line values that go to the summary are terminated with a newline. * apport/ui.py: Fix error message invocation for reporting cloakroom upload failure. * problem_report.py, write_mime(): Fix off-by-one comparison of the 'inline text' treshold, so that apport's StacktraceTop field appears in bug summaries. Also fix a corner case in CR line ending handling. Check both things in the test suite. * gtk/apport-gtk: Add missing 'import subprocess.'. Closes: LP#81007 * debian/control: Bump apport's and apport-gtk's dependency to python-apport to make sure that apport.ui is available. Closes: LP#81019 * apport/ui.py: Add missing 'import pwd'. Closes: LP#81033 Minor improvements: * apport/ui.py: Get the cloakroom ticket number from the X-Launchpad-Blob-Token HTTP header instead of parsing the resulting page. -- Martin Pitt Tue, 23 Jan 2007 11:27:20 +0100 apport (0.41) feisty; urgency=low New feature: Use Malone cloakroom for uploading reports. Closes: LP#70919 * gtk/apport-gtk.glade: Redesign bug reporting dialog to have a 'Create bug report' and a 'Cancel' button. Also assign GTK_RESPONSE_* constants to the dialog buttons. Go back to Glade 2 since Glade 3 still sucks too much. * gtk/apport-gtk: Adjust workflow for sending report to Malone cloakroom instead of asking the user to attach the file. Sending is not yet implemented, though. * gtk/apport-gtk: Do not show any dialogs any more when filing a bug. * Add apport/MultipartPostHandler.py: This module provides an urllib2 opener for uploading file attachments to forms over HTTP POST. This module is (C) 2006 Will Holcomb and was taken from http://odin.himinbi.org/MultipartPostHandler.py. (This is a serious hole of the Python standard library IMHO.) * apport/ui.py, file_report(): Upload blob to Malone (edge.launchpad.net for now), retrieve the ticket, and pass it to +filebug. Refactorizations: * gtk/apport-gtk: Major refactorization to use modal dialogs and run() instead of loosely coupled event handlers. * Add apport/ui.py: Abstract frontend which encapsulates the logic, workflow and UI independent bits and provides UI hooks for concrete implementations. This both makes it easy to write more frontends like Qt or CLI, and also makes the code automatically testable. Add an extensive testsuite. * run-tests: Add ui.py testsuite. * gtk/apport-gtk: Port to ui.py's UserInterface (which means moving 1/3 of the code into the new ui_*() methods and throwing away the rest). * Add apport/REThread.py: Enhanced threading.Thread class that can propagate the return value and uncaught exceptions of run() to the calling thread. * apport/ui.py: Get rid of thread_check_bugpatterns() and hackish exception handling, rewrite using REThread. * apport/ui.py, gtk/apport-gtk: Add progress bar to report upload. It is indefinite for now, because neither urllib2 nor httplib support upload progress. Bug fixes: * gtk/apport-gtk.glade: Merged Gnome HIG fixes from Sebastian Heinlein, thank you! * Merge patch from Sebastian Heinlein to properly treat the apport-gtk icon the dh_iconcache way and make it themeable. Thank you! * gtk/apport-gtk: Remove periods from primary dialog texts to comply with Gnome HIG standards. * backends/packaging-dpkg.py, get_file_package(): Process list files in chunks of 100, so that we do not exceed the maximum command line length if there is a large number of packages installed. Closes: LP#64839 * gtk/apport-gtk: Use pgrep with -u instead of pidof for testing whether the crashed process is already running again, so that we do not match processes of other users. Add procps package dependency for this. * gtk/apport-gtk: Only offer to restart programs that are in the $PATH. E. g. /usr/lib/firefox/firefox-bin cannot be called directly. Closes: LP#79623 * apport/report.py: Disassemble 16 instructions instead of 32 bytes to become independent of the instruction size. Thanks to Kees Cook for the patch! -- Martin Pitt Mon, 22 Jan 2007 10:47:33 +0100 apport (0.40) feisty; urgency=low * debian/control: Add missing python-dev build dependency, which is apparently required for 2.5 now. -- Martin Pitt Mon, 15 Jan 2007 11:06:20 +0100 apport (0.39) feisty; urgency=low * Introduce abstract packaging interface and move all dpkg/apt specific bits to a dpkg implementation of this packaging interface (merge apport/abstract-pkg branch): - Add apport/packaging.py: Abstract packaging system query interface. - Add backends/packaging-dpkg.py: dpkg implementation of abstract packaging interface. - run-tests: Run tests of all backends. - apport/fileutils.py, apport/report.py: Port to packaging.py interface. - debian/control: Drop python-apport's 'python-apt' dependency since the backend only uses dpkg now (without measurable performance penalty since it uses internal caching). - debian/rules: Install backends/packaging-dpkg.py as our packaging backend to apport/packaging_impl.py and remove it again on clean. -- Martin Pitt Sat, 13 Jan 2007 15:53:08 +0100 apport (0.38) feisty; urgency=low * Add ./COPYING: GPL license. * debian/rules: Build POT file again. * apport/fileutils.py: Add get_all_system_reports() and get_new_system_reports() and added test cases. Now the test suite can also be run as root to be able to actually check their complete behaviour. Adapt the other tests to get along with running the tests as root. * bin/apport-checkreports: Add option --system to check for system crash reports. Closes: LP#62316 * gtk/apport-gtk: If called through sudo to process system crashes, drop privileges to the original user in open_url() so that we get the web browser correctly. (LP#62316) Caveat: The user cannot actually attach the crash report file directly since it is not accessible to the user; this will get fixed once Malone is able to link a bug report with uploaded blobs. -- Martin Pitt Fri, 12 Jan 2007 14:29:44 +0100 apport (0.37) feisty; urgency=low * problem_report.py: Remove the requirement that values must not contain empty lines. Add test cases that reading and writing values with empty lines works, and add a test case that load() properly complains about empty lines in debcontrol encoding (empty lines in values are encoded with a single space). Closes: LP#78094 * apport/report.py test suite: Do not rely on a particular structure of the 'cat' stacktrace; apparently this is not consistent across architectures. Instead, compile a segfaulting mini C program, let it dump core, and test add_gdb_info() on it instead. This also allows us for a more rigid check of StacktraceTop. -- Martin Pitt Mon, 8 Jan 2007 14:44:08 +0100 apport (0.36) feisty; urgency=low * gtk/apport-gtk.glade: Restore pulse step of progress bar (this apparently got destroyed when saving with Glade 3). * gtk/apport-gtk{,.glade}: Terminate the program properly when closing the progress dialog instead of exiting with an exception. * gtk/apport-gtk: Defer opening of the bug reporting window a bit so that it appears on top of the browser window. Also enable the task bar blinking for it when it is in the background. * gtk/apport-gtk.glade: Restore vertical padding of bug report dialog labels (another Glade 3 transition regression). * bin/apport-retrace, apport/report.py: Call gdb on InterpreterPath if present; calling it on a script does not yield anything useful. Add a test case to report.py. * debian/apport.init: Use mkdir -p instead of install -d, since install is not in /bin. Thanks to Kees Cook for catching this. * debian/control: Add missing python-apport dependency 'python-apt', which is not caught by ${python:Depends}. * gtk/apport-gtk: Catch MemoryError when loading a report and display an error dialog instead of just crashing. Closes: LP#76235 * gtk/apport-gtk: Properly catch exceptions from the bug pattern check thread to avoid useless backtraces like in bug #75160. * gtk/apport-gtk: Catch exceptions from decoding of damaged reports and display an error message instead of crashing. Closes: LP#77149 * apport/report.py: Add missing import of 'time' to test suite. -- Martin Pitt Fri, 5 Jan 2007 09:49:01 +0100 apport (0.35) feisty; urgency=low Optimizations: * apport/fileutils.py: Split out heuristics for determining whether a file belongs to a package to new function likely_packaged() and add test cases. * bin/apport: Do not use the expensive find_file_package() any more, use likely_packaged() instead. This will create initial reports in some corner cases (like custom non-packaged executables in /usr/bin/), but greatly reduces I/O impact at crash time. We rely on apport-gtk to deal with reports that do not actually belong to a packaged executable. * apport/report.py, add_gdb_info(): Call gdb just once and split the output instead of calling it again for each command. This should significantly speed up the gdb stage especially for large programs/core dumps. * Use cStringIO instead of StringIO in modules. * gtk/apport-gtk: Code cleanup and refactorization: - Move iteration over crash reports into __main__ to simplify housekeeping in the ApportGTK class and get rid of some functions. - Refactor creation of temporary report file. * gtk/apport-gtk.glade: Split the text in the progress bar dialog so that we can use it for multiple steps (like uploading data to Malone) while not breaking translations. New feature: Bug reporting tool (https://wiki.ubuntu.com/BugReportingTool) * gtk/apport-gtk: Split out crash report initialization to new function show_crashes() so that we can use the frontend for other purposes like bug reporting. * gtk/apport-gtk: Add --file-bug, --package, and --pid options; if given, create a bug report about the given package instead of viewing crash reports. * gtk/apport-gtk{,.glade}: Generalize some strings to not talk about 'crash' any more, to make them suitable for bug reporting, too. * gtk/apport-gtk: Support --file-bug without specifying a package or a PID for filing generic distro bugs. * problem_report.py: Add new method write_mime() to encode a problem report in MIME/Multipart RFC 2822 format (i. e. an email with attachments). Short values are aggregated into the first inline text/plain part, large values, binary values, and file references get gzip compressed separate attachments. Also add various test cases. Bug/crash information: * apport/report.py, add_user_info(): Add list of system groups that the user belongs to. * bin/apport: Call add_user_info(), check functionality in test-apport. * apport/report.py, add_gdb_info(): Add field 'StacktraceTop' with the top five functions on the stack and no local variables. This reduced 'glimpse' is suitable for inline display in bug reports and automatic processing (dup finders, etc). Bug fixes: * po/Makefile: Add top_srcdir to work with current intltool. * po/de.po: Unfuzz some strings. * apport/report.py, add_gdb_info(): Strip away the 'No symbol table info available' messages from stack traces. * apport/report.py, test_search_bug_patterns(): Use security.u.c. instead of archive.u.c., since the latter times out too often. -- Martin Pitt Wed, 3 Jan 2007 16:45:20 +0100 apport (0.34) feisty; urgency=low * apport/fileutils.py, mark_report_seen(): Do not bail out if os.utime() fails due to access permissions. This happens if the file does not belong to the user calling apport-gtk, but is world-readable (such as ubiquity crash reports). If utime() fails, repeatedly open()/close() the file for reading until atime != ctime, or the 1.2s timeout is reached. Closes: LP#72250 * apport/python_hook.py: Add unit test, call that in run-tests. * apport/python_hook.py: Chmod the generated report to 0600 to not expose potentially private data to the world, and to be consistent with other crash reports. * apport/fileutils.py: Add check_files_md5() and test cases. * apport/report.py, add_package_info(): Append list of modified package files to Package: and Dependencies: value. Closes: LP#70946 * bin/apport-retrace: Get along with Package:/Dependencies: fields with list of modified files. -- Martin Pitt Fri, 22 Dec 2006 12:40:55 +0100 apport (0.33) feisty; urgency=low * debian/rules: Convert to cdbs. This fixes the dh_pysupport invocation along the way, too. * gtk/apport-gtk: Rework web browser invocation: Use kfmclient if available, fall back to firefox-remote, then to webbrowser.open(). Do not call x-www-browser any more since this would block if no running browser was open before. * Drop the apport_utils module (and with it the python-apport-utils package), it became too much of a dumping ground. The report file handling functions now live in apport.fileutils, and the debugging information collectors are now methods of a new 'Report' class (subclass of ProblemReport) in the new apport.report module. Adjust all programs accordingly. * Add debian/python-apport.postinst: Remove old .pyc and .pyo cruft on upgrades to clean up after our broken dh_pysupport invocation in earlier versions, so that the new modules are actually used. * Remove debian/apport.postinst: Those cleanups were only necessary for intra-edgy upgrades. -- Martin Pitt Tue, 19 Dec 2006 01:15:27 +0100 apport (0.32) feisty; urgency=low * apport_utils.py: Filter out "no debugging symbols found" warnings from gdb outputs, and add some tests for this. Thanks to Kees Cook for the patch! * test-apport: Fix AGENTPATH directory when building the preload library (recently moved to bin/). * use-local: Fix path to apport as well (recently moved to bin/). * apport-retrace: Use ldd on InterpreterPath if present; ldd'ing scripts will not get us very far. Closes: LP#72201 -- Martin Pitt Thu, 14 Dec 2006 13:42:58 +0100 apport (0.31) feisty; urgency=low * Move scripts to bin/ in source package. * Add apport/python_hook.py: Default exception handler for Python, to create apport reports for unhandled exceptions. Thanks to Robert Collins for this! Closes: LP#70957 * Add new package python-apport to ship the new Python package 'apport'. This includes the python crash hook for now, but in the near future apport-utils will get redesigned and put into this package, too. * debian/control: apport now depends on python-apport instead of python-apport-utils. * apport_utils.py: Quiesce gdb error messages in test suite. -- Martin Pitt Sat, 25 Nov 2006 12:30:41 +0100 apport (0.30) feisty; urgency=low * test-apport, use-local: Support both kernel 2.6.17 and 2.6.19 sysctl names (crashdump-helper vs. crashdump). * gtk/apport-gtk.glade: Improve dialog title capitalization. Closes: LP#70652. * debian/apport.cron.daily: Immediately exit if /var/crash does not exist. Create /var/crash in debian/apport.init if it does not exist. Closes: LP#71599 * Convert all tabs in Python source code files to spaces to comply to PEP 8. Thanks to Robert Collins for pointing this out. * apport_utils.py, gtk/apport-gtk: Do not pass None to subprocess arguments if report belongs to a non-packaged program. Thanks to Robert Collins for discovering and fixing this! Closes: LP#70942 * debian/apport.init: Change /var/crash permissions to 1777, so that custom crash handlers (in Python/Mono/etc.) can put reports there. -- Martin Pitt Sat, 25 Nov 2006 10:44:33 +0100 apport (0.29) feisty; urgency=low * apport-retrace: Do not crash if a linked library is not a dependency. Closes: LP#65914 * apport_utils.py: - Add test_find_file_package_diversion() selftest to check diversion handling. - find_file_package(): Check for and respect diversions. - Closes: LP#65917 * debian/apport.init, test-apport, use-local: Adapt to 'crashdump-helper' -> 'crashdump' sysctl renaming in 2.6.19. * test-apport: Restore cwd even when failing a test. * problem_report.py, ProblemReport.write(): Support file-like objects as argument of file references to support direct reading from pipes. Add test case test_write_fileobj(). * apport: Support '-' as core file argument, in which case the core will be read from stdin. This paves the way for using Linux 2.6.19's 'pipe core_pattern' feature. Bump python-problem-report dependency to >= 0.29 for this. * apport: Confine permissions of log file to root:adm 0640, just in case. * apport: Temporarily drop real u/gid to target user for the os.access() tests, so that normal users cannot verify the existence of a given inaccessible file. Add comprehensive tests to apport_utils' test suite and test-apport. Thanks to Kees Cook for this patch! * apport_utils.py, find_file_package(): Terminate fgrep options with '--' to avoid problems with funny file names. Thanks to Kees Cook for spotting this! * test-apport: Automatically detect whether ULIMIT_CORE is nonzero, and adapt tests accordingly: check that core still exists after invoking apport, and clean it up. * apport-retrace: Add new mode -g/--gdb which starts an interactive gdb session with the report's core dump. Add this to man/apport-retrace.1, too. * apport-retrace: If -c is given, completely remove the CoreDump field from the report instead of setting it to 'removed'. * test-apport: When using 'lib' mode, point APPORT_LOG_FILE to a temporary file. Print it if the test suite fails. * test-apport: Fix EXFAILure of the 'core dump works for non-writable cwds' test case. * preloadlib: Support -DPIPE_CORE mode which emulates the pipe-in-core_pattern mode of kernel 2.6.19. * test-apport: Build preload library with core piping. No more failed test suite checks in 'lib' mode. -- Martin Pitt Sun, 5 Nov 2006 07:10:30 -0800 apport (0.28) edgy; urgency=low "No core - ignore!" * apport: Do not create a report for crashes which we do not get a core dump for. The reports are useless and only clutter our bug tracker. -- Martin Pitt Mon, 9 Oct 2006 15:22:32 +0200 apport (0.27) edgy; urgency=low * apport: Ignore SIGABRT for now; it's usually signalled from abort() or assertion failures and we only get reports with unusable stack traces for it (see #61938). * gtk/apport-gtk: If gnome-open is not available, fall back to x-www-browser instead of using webbrowser.py, to respect default browser in XFCE. Closes: LP#64209 * apport: use os.nice() instead of executing 'renice'. Thanks to Benoit Boissinot for noticing. * apport_utils.py, find_file_package(): Lower() both strings in the speedup heuristics to match e. g. /usr/bin/Xorg -> xserver-xorg. Thanks to Kees Cook! * apport_utils.py, report_add_package_info(): Do not crash if we encounter a 'None' current version, which can happen with uninstalled alternative dependencies. Thanks to Kees Cook for tracking this down! -- Martin Pitt Fri, 6 Oct 2006 17:15:08 +0200 apport (0.26) edgy; urgency=low * apport-retrace: Clean up code a bit: - Move option parsing to separate function. - Use apport_utils' report_add_gdb_info() instead of duplicating the gdb code. * apport_utils.py, report_add_gdb_info(): Add optional parameter 'debugdir' to specify an alternate debug file symbol root directory. * apport-retrace: Add option -d/--download-debug to automatically download available ddebs, create a temporary debug symbol directory from already installed and downloaded ddebs, and point gdb to use that. Also add option -C/--cache-dir to specify a permanent ddeb cache directory (by default, a temporary one is used). Update the manpage accordingly. * apport-retrace: Make the best out of a report without packaging information (which can happen if the user does not click on 'report bug' in apport-gtk). * apport_utils, report_add_proc_info(): - Move heuristics for detecting interpreted scripts to a separate function to be able to provide separate test cases for it. Check a few more special cases for mono programs. - Make interpreter heuristics even scarier to detect some more mono corner cases (like banshee and beagled-helper). Closes: LP#58859 -- Martin Pitt Wed, 4 Oct 2006 19:10:47 +0200 apport (0.25) edgy; urgency=low * Drop apport-gtk's update-notifier dependency to a Recommends:. * apport_utils.py, report_add_gdb_info(): Add register dump and disassembly of the last 32 bytes, they might be useful to see what's going on sometimes. Thanks to Kees Cook for the idea and the patch. * test-apport, check_crash(): Verify that a crash does not leave a core file behind. (Test for LP#62972) * preloadlib/libapport.c: Do not unlink the core file after calling apport, but set REMOVE_CORE=1 environment instead. This matches the current kernel behaviour. * apport: Register an atexit handler as early as possible for unlinking the core dump if REMOVE_CORE environment is set. Closes: LP#62972 * apport: Set nice level 10 instead of 5. Closes: LP#63099 -- Martin Pitt Mon, 2 Oct 2006 14:21:53 +0200 apport (0.24) edgy; urgency=low The "Need for speed" release -- rrrroarrr! * apport: Remove _copy_shrink_corefile(): While this has an enormous impact on the size of an uncompressed core dump, it only causes a negligible size reduction of the bzip2'ed core, but it needs a lot of I/O resources for large core dumps. * problem_report.py: - Use zlib instead of bzip2 for compressing the binary data (in particular, core dumps). This results in slightly bigger files, but speeds up compression a lot (30 seconds vs. ~2:45 minutes for a Firefox core dump on my slow iBook). Closes: LP#61538 - ProblemReport.read(): Support both bzip2 and zlib compression to be able to read existing reports, too. - Add/Adapt test cases. * Move InformationCollector._get_gdb() from apport to apport_utils.py report_add_gdb_info(), and add a test case for it. * apport_utils.py, report_add_package_info(): Support calling without a package name, then it will be figured out from ExecutableName. Extend test case accordingly. * test-apport: Do not require apport reports to contain gdb, packaging, and OS information, since we are going to move them out of apport. * apport: Do not collect static information. It requires a lot of CPU and I/O resources and slows down the machine a lot, and it can be added to the report later in the frontend. This also gets rid of the entire InformationCollector class, since everything has been moved to apport_utils.py now. Closes: LP#62542 * apport: Do not intercept KeyboardInterrupt as unhandled exception (only useful for command line debugging, though). * problem_report.py: Add test case for appending new data to an existing report, fix write() function to not rely on an existing ProblemType key. * problem_report.py: Add new method ProblemReport.add_to_existing() to update an already existing problem report with new data. Add test case. * apport_utils.py, mark_report_seen(): Use os.utime() instead of open()/read() and a timeout for simpler and faster operation. * gtk/apport-gtk: - Collect gdb/packaging/operating system information when the user chooses to file a bug and update the apport report. - Change the 'Downloading bug patterns...' progress dialog to 'Collecting information about the crash...'. * debian/control: Bumped library dependencies of apport-gtk, added update-notifer dependency. -- Martin Pitt Fri, 29 Sep 2006 15:47:56 +0200 apport (0.23) edgy; urgency=low * apport: Reset signal handler to SIG_IGN in the crash signal handler, to avoid an endless crash/handler loop (noticed during debugging LP#61708). * debian/apport.init: Do not let the script run with set -e, so that do_{start,stop} can deliver their return codes for proper evaluation, instead of immediately existing. Closes: LP#61796 * test-apport: Check that SIGQUIT does not generate a report. (Check for bug #62511). * apport: Ignore SIGQUIT. Closes: LP#62511 -- Martin Pitt Thu, 28 Sep 2006 20:57:38 +0200 apport (0.22) edgy; urgency=low * apport_utils.py, report_add_proc_info(): Make 'interpreted script' detection more general to also work for mono programs. * test-apport: Check that non-packaged scripts do not generate a report. * apport: Call ic.collect_runtime_information() earlier and drop the local /proc/pid/exe examination, so that we get proper script detection. This avoids getting crash reports for non-packaged scripts (see test case change from above). * apport: Do not try to chmod the report file if we could not create it and output to stderr instead (this mainly affects local testing only). * apport_utils.py, find_file_package(): First grep the package lists whose names are a substring of the crashed binary name (or vice versa), to immensely speed up the package name determination in many cases. * apport: Drop the maximum number of consecutive crashes per executable from 5 to 2. 5 creates a too bad user experience and creates the impression that it will never stop. Closes: LP#61078 -- Martin Pitt Tue, 19 Sep 2006 16:16:46 +0200 apport (0.21) edgy; urgency=low * apport: Keep a partially written report with '000' permissions, and only chmod it to 0600 when it is fully written. This stops update-notifier from picking up half-written reports and get activated several times. Closes: LP#59988 * apport: Add the executable path to the first line of logging. * apport: Run the complete code under control of the general exception fallback handler. * debian/apport.default: Increase maximum core size to 200 MB, to also catch Firefox and Evolution core dumps. * apport_utils.py, find_file_package(): Before searching the dpkg database (which is expensive), check if the executable path matches a whitelist of path prefixes. This replaces the weaker blacklist (/tmp and /home) in apport itself. * gtk/apport-gtk: Show a progress dialog while checking for bug patterns and execute report_search_bug_patterns() in a separate thread, so that the UI is not potentially blocked for a long time. * apport: Gracefully abort if we cannot readlink /proc/pid/exe, instead of falling over with an exception. Closes: LP#59993 * debian/rules: Use 'multiuser' instead of 'defaults' for dh_installinit. Clean up the unnecessary rc symlinks in postinst and add appropriate sysv-rc dependency. -- Martin Pitt Thu, 14 Sep 2006 23:16:26 +0200 apport (0.20) edgy; urgency=low * apport: Renice ourself to priority 5 to not slow down the user's processes so heavily. * Add manpages for apport-retrace(1) and apport-unpack(1) and install them into apport. Closes: LP#58463 * problem_report.py: Test attaching two files instead of one in the test_write_file() regression check to assert correct key sorting. * problem_report.py: Alter write() method to sort binary data to the end of the report. This makes reports easier to read, and also shows relevant information more quickly when progressively loading them in a web browser. Adapt regression tests accordingly. * Move setting of ExecutablePath from apport's InformationCollector ctor to apport_utils' report_add_proc_info(), where it belongs to. Check ExecutablePath in apport_utils' regression tests. * apport-unpack: Support '-' as report argument to read from stdin. * apport_utils.py, report_add_proc_info(): - Apply some heuristics to determine whether the crashed process is an interpreted script (check if the Name in /proc/pid/status matches the second /proc/pid/cmdline part, and if that command line argument is an existing executable file). In the case of an interpreted script, set ExecutablePath to the script and InterpreterPath to the actually crashed ELF binary. - Test this with a shell (/bin/zgrep) and a Python (./apport-unpack) script in the test suite. - Closes: LP#58859 * Add debian/apport.logrotate to add a daily 7-step /var/log/apport log rotation. * test-apport: Fix WCOREDUMP() and pidof checks in check_crash(). * apport: Install a signal handler for all 'crashy' signals, which just logs the signal and stack info and exits. This should avoid a crashing apport examining itself, possibly in an endless loop. Closes: LP#58873 -- Martin Pitt Mon, 11 Sep 2006 09:20:18 +0200 apport (0.19) edgy; urgency=low * apport_utils.py: Add function report_search_bug_patterns(): Try to download a package specific bug pattern XML file from a given URL base directory and return the bug URL in case of a match. Also add extensive test suite check. * test-apport: Fix help message. * apport-gtk: Make use of the new report_search_bug_patterns() function and display appropriate instructions on match. Bump python-apport-utils dependency. -- Martin Pitt Tue, 5 Sep 2006 11:31:17 +0200 apport (0.18) edgy; urgency=low The "mating dance for ubiquity" release. * apport-gtk: - Use pidof's -x option in the detection whether the program is already running to correctly handle scripts. - Do not assume the presence of the ExecutablePath key in reports, but gracefully fall back to Package. - If the report specifies an explicit DesktopFile, use that instead of trying to figure it out. - Only created reduced report and show the radio buttons if there are actually removed fields. - Change tooltip of 'reduced report' radio button to be more generic (do not refer to the memory dump, but to 'large items', since this is what apport-gtk currently does). - Support new field 'BugDisplayMode: file | list (default)'. In 'file' mode, display the /+filebug page instead of /+bugs and change instructions accordingly. - Use the ProcCmdline attibute to restart an application; correctly parsing of all the desktop file is just not possible at this point. - Support new field 'RespawnCommand' to use custom respawning command. * problem_report.py: Add method has_removed_fields() to check whether load() skipped any fields due to binary=False. Add test suite check. * apport_utils.py: Fix the quoting in ProcCmdline so that it is fully shell compatible. * run-tests: Check if kernel crash dump helper is active, and if so, run test-apport in kernel mode. * problem_report.py: Support an optional second argument of file references which controls whether or not the file contents will be compressed/encoded (defaults to True for backwards compatibility). Add test suite checks. -- Martin Pitt Fri, 25 Aug 2006 14:01:47 +0200 apport (0.17) edgy; urgency=low * Move packaging information collection from apport to new function report_add_package_info() in apport_utils.py, add test suite check. * Move operating system information collection from apport to new function report_add_os_info() in apport_utils.py, add test suite check. * Move /proc information collection from apport to new function report_add_proc_info() in apport_utils.py, add test suite check, and fix handling of failed /proc/$$/environ reading. * preloadlib/libapport.c: Route gcore's stderr to /dev/null to suppress error messages during the test suite and to become more compatible to the kernel behaviour. * Change apport_utils.py to be a public module and ship it in the new python-apport-utils package, so that other applications like ubiquity can use it easily. * po/de.po: Add new translations to make this complete again. * problem_report.py, apport_utils.py: Prepend UnitTest classes with '_' so that they do not appear in the help() output. * apport_utils.py: Add make_report_path(), which constructs the canonical crash report pathname for a given report. * Add debian/apport.postinst: Remove /usr/share/apport/apport_utils.pyc when upgrading from an earlier version, so that the programs in /usr/share/apport actually use the version from p-apport-utils. -- Martin Pitt Tue, 22 Aug 2006 18:14:00 +0200 apport (0.16) edgy; urgency=low * test-apport: Check that non-packaged binaries do not generate a report. * apport_utils.py: Add find_file_package() to find the package a file belongs to. This uses fgrep /var/lib/dpkg/info/*.list which is much faster than dpkg -S. Also add test suite check. * apport: Use find_file_package() instead of direct dpkg -S call and pass the result to the InformationCollector ctor to avoid grepping the dpkg lists twice. * apport: Immediately exit if the executable name starts with /home or /tmp, to avoid grepping the dpkg database in the common developer case. * apport: Replace 0-bytes in ProcCmdline with spaces to keep them readable. * apport-gtk: Offer an alternative small report (without the core dump) for users with slow internet connection. -- Martin Pitt Mon, 21 Aug 2006 19:34:47 +0200 apport (0.15) edgy; urgency=low * Add apport-unpack: Script to extract the fields of a problem report into separate files into a new or empty directory. Mainly useful for extracting compressed binary data like the core dump. * test-apport: Check that dumped environment only contains security insensitive variables. * apport: Filter out all environment variables but $SHELL, $PATH, and locale/language related ones. Closes: LP#56846 * test-apport: Delete test report in the cleanup handler so that the kernel-mode test can be run multiple times without manual cleanup. * test-apport: Check for running apport and test executable processes in check_crash(). * preloadlib/libapport.c: Improve error checking, some robustification. * test-apport: If using the preload library, wait a second between the test process invocations in the flooding test to mitigate a strange race condition that sometimes causes the signal handler not to be executed. -- Martin Pitt Sun, 20 Aug 2006 16:28:43 +0200 apport (0.14) edgy; urgency=low * preloadlib/libapport.c: Write core dump into cwd instead of /tmp to act like the current kernel. * apport_utils.py: Check APPORT_REPORT_DIR environment variable for an alternate crash report directory. This is mainly useful for a local test suite. * apport: Quiesce the apt module's FutureWarning. * preloadlib/libapport.c: Re-raise the signal instead of doing exit() so that the process exits with the same code as it would do without the library. * preloadlib/libapport.c: Close stdout for gcore process. * Add test-apport: Use preloadlib/ and APPORT_REPORT_DIR to create a sandboxed environment and run various apport functionality tests. Also add this script to run-tests. * apport_utils.py, delete_report(): Actually try to unlink the report before falling back to truncating it to zero bytes. * preloadlib/libapport.c: Close stderr for apport process. -- Martin Pitt Fri, 18 Aug 2006 15:46:37 +0200 apport (0.13) edgy; urgency=low * Do not run the test suite on build since on the buildds modifying file atimes does not work. -- Martin Pitt Fri, 18 Aug 2006 00:59:26 +0200 apport (0.12) edgy; urgency=low * apport-gtk: Make bug report window resizable when the details are expanded. Closes: LP#56672 * apport_utils.py: Add get_recent_crashes() and a test suite check for it. * apport: If the same binary produced more than 5 crashes in the last 24 hours, ignore the crash. This is a hideous and pretty ad-hoc band-aid to avoid flooding users with reports for continuously crashing respawning processes. Closes: LP#56362 * apport: Clean up exit codes to only exit with 0 if report was created, and with 1 otherwise (to become more compatible to proposed future kernel behaviour, where core dumps are only generated on demand). * Add run-tests script which calls all available selftests. * debian/rules: Run run-tests during build to have the package FTBFS on regressions. Add python build dependency for this (it is already there implicitly anyway). -- Martin Pitt Thu, 17 Aug 2006 16:06:41 +0200 apport (0.11) edgy; urgency=low * gtk/apport-gtk.glade: Remove separators from dialogs. Closes: LP#56326 * apport: - Move information collection from ctor to two new separate functions collect_runtime_information() (fast, privileged, crashed process must exist) and collect_static_information() (slow, unprivileged, crashed process does not need to exist). This allows a cleaner design. - Add missing close() call in init_error_log(). - Do not catch SystemExit in the final catch-all-and-log clause (will become important once we switch to master/slave processes). - Clean up handling of temporary files. - Log successful report creation with file and package name, to ease debugging. - transitive_dependencies(): Do not break on pure virtual dependencies (like perl-api-XXX). * Add debian/apport.default: Default file to disable apport entirely and to change the maximum size of kernel created core dumps. * debian/apport.init: Evaluate new default file. -- Martin Pitt Wed, 16 Aug 2006 17:05:19 +0200 apport (0.10) edgy; urgency=low * apport-gtk: Show report file size in bug report window. * apport: Correctly handle relative paths to core dumps (use crashed process' cwd). * Fix the GPL URLs in source file's copyright comments. * debian/apport.cron.daily: Add -mindepth 1 to find commands to avoid attempting to remove the /var/crash/ directory. Closes: LP#55107 * problem_report.py: - Fix precise whitespace handling in continuation lines, add selftest. - Add selftest for reading a report, modifying fields, and writing it back. - Fix writing back binary data, adapt test suite to check it. - Fixed ProblemReport.load() to clean up old data, added selftest. - Restructure class to inherit from IterableUserDict and throw away all the now obsolete dictionary wrapper methods. * debian/apport.init: Add colon to description to make output less confusing. * Add apport-retrace and install it into apport: This tool takes a crash report and refreshes the stack traces in it. This is particularly useful if debug symbols are installed now, but haven't been at the time the crash occured. -- Martin Pitt Fri, 11 Aug 2006 15:40:05 +0200 apport (0.9) edgy; urgency=low * apport: Call objcopy to throw out READONLY/CODE sections from the core dump, which drastically reduces its (uncompressed) size (factor 2 to 10). This has little effect on the bzip2'ed core dump, though. * apport: - Support an optional third command line argument which specifies the location of a core dump. - If a core dump is given, call gdb on the core dump instead of the crashed process. We cannot attach to the latter if we are called by the kernel (since the crashed process is in uninterruptible kernel sleep). - If no core dump is given, do not attempt to do anything gdb related. - This matches the future behaviour of the kernel crash dump helper while remaining compatible to the previous call semantics. * Add preloadlib/{Makefile,libapport.c}: LD_PRELOADable library which emulates the future kernel behaviour. This is ONLY for testing and development purposes. It uses unsafe temporary file handling and thus must not be used on production boxes! * Ship preloadlib/* as examples in package 'apport' for people who want to play with it until the new kernel arrives. * Add preloadlib/README: Explain how to use the preload library. -- Martin Pitt Wed, 9 Aug 2006 12:12:20 +0200 apport (0.8) edgy; urgency=low * apport_utils.py: - Add two new functions seen_report() and mark_report_seen(). - get_new_reports(): Only return unseen reports, add function get_all_reports() for the old behaviour. * gtk/apport-gtk.py: Do not delete reports after notifying about them. This way, we do not need to add another button to save the report (which is considered evil UI-wise), but still retain the report for filing and examining later. * Replace all usages of '/var/crash' to a new global variable in apport_utils; this is particularly useful for test suites. * apport.py: Overwrite old reports if they are seen. * apport_utils.py: Add a test suite for all exported functions. -- Martin Pitt Tue, 8 Aug 2006 19:29:23 +0200 apport (0.7) edgy; urgency=low * Add apport_utils.py: Factorize out some common code of apport-gtk, possible future frontends, and some backend tools. * Add apport-checkreports: Test if there are new crash reports for the invoking user. This factorizes out the tests we currently do in update-notifier and makes them easier to change and keep in sync with apport itself. Ship the script in the apport package. -- Martin Pitt Tue, 8 Aug 2006 17:24:46 +0200 apport (0.6) edgy; urgency=low * Add missing intltool build dependency to fix FTBFS. -- Martin Pitt Thu, 3 Aug 2006 09:15:42 +0200 apport (0.5) edgy; urgency=low * apport-gtk: Remove the crash report after it got displayed. * apport-gtk: Fix exception on startup if no readable crash reports exist. -- Martin Pitt Wed, 2 Aug 2006 23:42:34 +0200 apport (0.4) edgy; urgency=low * Implement completely new UI according to the design described at https://wiki.ubuntu.com/CrashReporting. Many thanks to Matthew Paul Thomas! * po/Makefile: Fix default target to not just break. Now it builds the .pot file. * debian/rules: Build .pot file on package build for automatic Rosetta import. * Bring German translations up to date. * po/Makefile: Supply '--language=python' to intltool-update to properly extract strings from apport-gtk. -- Martin Pitt Wed, 2 Aug 2006 23:14:58 +0200 apport (0.3) edgy; urgency=low * debian/rules clean: Also clean po/. * debian/apport.cron.daily: Clean away empty files everytime. * apport: Only consider a report as already present if it has a non-zero size. * apport: Set proper group for report files instead of 'root'. * apport-gtk: Ignore 0-sized reports. * apport-gtk: Add button to remove the current report (by truncating the file to zero bytes; a user cannot unlink files in /var/crash). * apport-gtk: Only display reports that the user can actually read. * problem_report.py: Add 'binary' option to ProblemReport.load() to optionally skip binary data. * debian/rules: Clean stale *.pyc files. * python-gtk: Do not load binary data (core dumps, etc.) to greatly speed up the GUI. They are just gibberish anyway. * apport: Switch from apt_pkg to apt, add SourcePackage: to reports. * apport-gtk: Use source package name for the Malone URL. * debian/rules: Call setup.py install with --no-compile to not ship *.pyc in debs. -- Martin Pitt Mon, 31 Jul 2006 13:11:52 +0200 apport (0.2) edgy; urgency=low * debian/apport.cron.daily: Do not produce error messages if 'find' does not find any crash reports. * problem_report.py: Support iterators, add test case. * apport: Filter out trailing 0-byte from ProcCmdline. * Add a simple GTK frontend, ship it in new package apport-gtk. -- Martin Pitt Thu, 27 Jul 2006 23:52:33 +0200 apport (0.1) edgy; urgency=low * Initial release. This package implements the client backend part of https://wiki.ubuntu.com/AutomatedProblemReports. -- Martin Pitt Mon, 24 Jul 2006 14:21:10 +0200