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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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: <text>" and display an information box that the
    current crash cannot be reported because of <text>. 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 <martin.pitt@ubuntu.com>  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: <text>"
    and display an information box that the current configuration cannot be
    supported because of <text>, 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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <jriddell@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <mh21@piware.de> 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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <kees@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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/<package>.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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <wholcomb@gmail.com> 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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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
    <robert@ubuntu.com> 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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  Tue,  8 Aug 2006 17:24:46 +0200

apport (0.6) edgy; urgency=low

  * Add missing intltool build dependency to fix FTBFS.

 -- Martin Pitt <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  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 <martin.pitt@ubuntu.com>  Mon, 24 Jul 2006 14:21:10 +0200
