apport (0.108.2) hardy-proposed; urgency=low

  * debian/control: Update Vcs-Bzr: for the hardy branch.
  * apport/packaging.py: Introduce a new function enabled() which reports
    whether Apport should create crash reports. Signal crashes are controlled
    by /proc/sys/kernel/core_pattern, but we need that to control whether
    reports for Python, package, or kernel crashes are generated.
  * backends/packaging-apt-dpkg.py: Provide implementation for
    PackageInfo.enabled() for Debian/Ubuntu by evaluating /etc/default/apport.
    Add various test cases for different configuration files and absent files.
  * apport_python_hook.py: Do not create reports if Apport is disabled (in
    /etc/default/apport). (LP: #222260)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Sat, 17 May 2008 13:01:24 +0200

apport (0.108.1) hardy-proposed; urgency=low

  * apport/report.py, add_proc_info(): also strip pathnames starting with
    'cow', 'squashmnt', and 'persistmnt' to allow apport to locate the
    executable pathname, additionally to 'rofs' added in 0.75.  This fixes
    apport for packages installed on the read-write part of the unionfs mounts
    and under UME which uses different names for the mount points.  Proper fix
    is to rewrite the pathnames in the kernel.

 -- Loic Minier <lool@dooz.org>  Tue, 29 Apr 2008 12:46:30 +0200

apport (0.108) hardy; urgency=low

  [ Martin Pitt ]
  * apport-{gtk,qt,cli}: Fix handling of file references added by package
    hooks. (LP: #205163)
  * backends/packaging_rpm.py: Fix dependency resolution of uname(*) in the
    RPM backend. Thanks to Patryk Zawadzki! (LP: #213018)
  * backends/packaging_rpm.py: Fix RPM platform parsing, thanks to Patryk
    Zawadzki! (LP: #213015)
  * po/de.po: Fix typo (missing space).
  * debian/apport.default: Disable Apport for the final Hardy release, since
    it is less useful in stable releases, and drains a lot of CPU and I/O
    power on crashes. Disabling it here instead of in update-notifier/adept is
    more discoverable and more centralized.

  [ Daniel Hahler ]
  * bin/apport-retrace: catch the same exceptions from Report.load() like
    ui.load_report() does (LP: #211899)
  * Fix uncaught exceptions in apport itself (LP: #215929):
    - apport/REThread.py: check if "sys" exists in the except block of
      REThread.run()
    - apport_python_hook.py: check if "sys" exists in the finally block of
      apport_excepthook
  * cli/apport-cli: Fix UnboundLocalError in ui_present_crash, which rendered
    apport-cli useless (for reporting crashes) (LP: #216151)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Wed, 16 Apr 2008 12:24:32 +0200

apport (0.107) hardy; urgency=low

  * cli/apport-cli: Add translator comment for difficult string. (LP: #210948)
  * Update German translations.
  * po/Make{vars,file}: Remove the --language=python option again, since it
    breaks extracting strings from the glade. intltool-update currently does
    not seem to have a way to tag a file as "language python", so add an ugly
    workaround: Create temporary .py symlinks for gtk/apport-gtk & friends,
    and have intltool extract them.
  * apport/ui.py: Disallow filing a bug without specifying a package or a PID.
    Update debian/local/ubuntu-bug.1 accordingly (apport-cli manpage was
    already correct). (LP: #210348)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Sun, 06 Apr 2008 11:44:38 -0600

apport (0.106) hardy; urgency=low

  [ Martin Pitt ]
  * apport/crashdb_impl/launchpad.py: Fix spelling mistake in p-lp-bugs API
    (now corrected there).
  * apport_python_hook.py: Catch IndexError for invalid sys.argv[0], too.
    (LP: #204940)
  * apport/ui.py: Add test_run_report_bug_unpackaged_pid() test case which
    reports a bug against a pid which belongs to an unpackaged program. This
    reproduces LP #203764.
  * apport/report.py: Drop add_hooks_info() assertion on nonexisting Package
    field, return silently instead. This conforms to the behaviour of the
    other add_*_info() functions and avoids nasty error handling.
  * apport/ui.py: Generate proper error message when calling with -f -p PID
    and PID belongs to an unpackaged program. (LP: #203764).

  [ Sebastien Bacher ]
  * po/Makevars: add the --language=python xgettext option so the translations
    template is correctly updated on build since cdbs is using intltool-update
    directly and not the corresponding makefile target

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 01 Apr 2008 16:02:46 +0200

apport (0.105) hardy; urgency=low

  * apport/crashdb_impl/launchpad.py: Ignore ValueErrors when subscribing a
    team, since these are usually due to the team already being subscribed.
  * apport/report.py, anonymize(): Be robust against empty user names and only
    anonymize fields which can potentially contain user specific data.
    (LP: #195706)
  * backends/packaging-apt-dpkg.py, get_architecture(): Return 'unknown'
    instead of None if package architecture cannot be determined.
    (LP: #198548)
  * apport/ui.py, run_crash(): Intercept other IOErrors, too (such as EISDIR)
    and print out proper error message instead of crashing. (LP: #201819)
  * apport_python_hook.py: If the Python script has mutilated sys.argv so that
    even sys.argv[0] does not exist any more, fall back into readlink()ing
    /proc/pid/exe and gracefully handle the failure of that, instead of
    crashing in the crash handler (ugh). Add test case. (LP: #198183)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 18 Mar 2008 23:04:57 +0100

apport (0.104) hardy; urgency=low

  [ Martin Pitt ]
  * apport/crashdb_impl/launchpad.py, get_source_version(): re-escape the
    package name so that it doesn't stumble over '+' and similar characters.
  * apport/ui.py tests: assert that ProcEnviron is also included into bug
    reports where we do not have a PID, since having the local information is
    interesting and important (and acceptable in terms of personal
    information).
  * apport/report.py: Split out method add_proc_environ() for getting
    ProcEnviron, so that we can call it separately.
  * apport/ui.py, run_report_bug(): Add ProcEnviron if we do not have a pid to
    file a bug against. This way, bugs filed against packages or distro also
    get locale information. (LP: #198514)
  * apport/fileutils.py, mark_report_seen(): Do not crash if the file does not
    exist any more, because it was removed underneath us. (LP: #199932)
  * apport/ui.py, test_collect_info_exepath(): Add a tuple argument and a
    CompressedValue to the test report. This reproduces LP #199349.
  * apport/report.py, anonymize(): Only work on string values. (LP: #199349)
  * apport/ui.py: If a report has a field "Ignore", entirely ignore the report
    without even presenting an explanatory error dialog (as
    "UnsupportableReason" does). Document this in doc/package-hooks.txt.
    (LP: #198863)
  * debian/control: Bump Standards-Version (no changes necessary).
  * debian/control: Fix wrongly spelt project names (Python and GTK+). Thanks
    to lintian's scrutiny.
  * gtk/apport-gtk-mime.desktop.in, qt4/apport-qt-mime.desktop.in: Add a main
    category.

  [ Kees Cook ]
  * apport/report.py: fix module license checking logic (LP: #199927).
    - nonfree_modules: being unable to find a module should not mean the
      module is non-free.
    - test_module_license_evaluation: check modinfo reporting.
  * problem_report.py: Skip atime test case if file system is mounted noatime.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Thu, 13 Mar 2008 14:01:30 +0100

apport (0.103) hardy; urgency=low

  * bin/apport-unpack: Print error messages instead of crashing for problems
    like nonexisting file names passed as arguments. (LP: #185273)
  * backends/packaging-apt-dpkg.py, is_distro_package(): Explicitly check site
    for "ppa", so that we do not automatically file bugs for PPA packages.
    This works around Soyuz bug LP #140412 for the time being.
  * apport/report.py: Add standard_title() test cases for Python crashes with
    a custom message, and a custom message with newlines. The latter
    reproduces LP #190947.
  * apport/report.py, standard_title(): Do not rely on a fixed position of the
    topmost function; use iteration and regular expression matching instead.
    (LP: #190947)
  * apport/ui.py, parse_argv(): Specify that --pid/-P argument must be an
    integer, to avoid exceptions when it's not. (LP: #193494)
  * apport/report.py: Use uname -srm, not -a, to hide the hostname. (part of
    LP #192786); also use os.uname() instead of calling the system program.
  * problem_report.py(): Make write() work for reports with CompressedValues.
    Add test case.
  * apport/ui.py: Add test case test_run_crash_anonymity() which asserts that
    the crash dump does not contain strings which can identify the user, such
    as the user name, login name, host name, and current directory.
  * apport/report.py: Add method anonymize() which replaces user specific
    strings with generic ones.
  * apport/ui.py, thread_collect_info(): Call anonymize() on the report.
    (LP: #192786)
  * bin/apport-retrace: Only update a bug report with new attachments if it is
    not a duplicate. (LP: #172792)
  * bin/apport-retrace: Print out proper error message instead of an exception
    if trying to do write operations to the bug tracker without specifying
    a cookie file. (LP: #146423)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 25 Feb 2008 17:47:13 +0100

apport (0.102) hardy; urgency=low

  [ Martin Pitt ]
  * problem_report.py: Support reading reports with legacy zlib
    compression in 'retain compressed values' mode (as used nowadays by
    apport when reporting a crash). Add a test case, too. (LP: #129616)
  * debian/control, debian/rules: Switch from python-support to
    python-central, and use 'nomove' option so that apport works during
    upgrades, too. (LP: #121341)
  * debian/rules: Use dh_icons instead of dh_iconcache.
  * debian/apport.init: Do not stop apport in any runlevel (LSB header).
  * apport/ui.py, run_crash(): Catch zlib.error on invalidly compressed core
    dumps. (LP: #176977)
  * apport/ui.py: Give a meaningful error message instead of crashing if the
    package for a crash report is not installed any more. (LP: #149739)
  * apport/ui.py: Do not include ProcCmdline in bug reports, since these are
    not ack'ed by the user and might contain sensitive data. (LP: #132800)
  * apport/ui.py: Add various test cases for crash reports whose packages have
    been uninstalled between the crash and the report. This reproduces
    LP #186684.
  * apport/ui.py, load_report(): Produce proper error message if
    executable/interpreter path do not exist any more. (LP: #186684)
  * cli/apport-cli: Intercept SIGPIPE when calling sensible-pager, to avoid
    crash when quitting it prematurely. (LP: #153872)
  * bin/apport-checkreports: Print out a list of program names/packages which
    have a pending crash report. (LP: #145117)
  * apport/ui.py, run_argv(): Add return code which indicates whether any
    report has been processed.
  * cli/apport-cli: If no pending crash reports are present, say so and refer
    to --help. (LP: #182985)
  * apport/ui.py: Waive check for obsolete packages if environment defines
    $APPORT_IGNORE_OBSOLETE_PACKAGES. Document this in the apport-cli manpage.
    (LP: #148064)

  [ Daniel Hahler ]
  * .crash file integration for KDE3 (LP: #177055)
    - debian/apport-qt.install: install added files qt4/apport-qt-mime.desktop
      and qt4/apport-qt-mimelnk.desktop
  * Fixed minor warnings/errors from desktop-file-validate in
    gtk/apport-gtk-mime.desktop.in and qt4/apport-qt.desktop.in (LP: #146957)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Wed, 06 Feb 2008 12:55:53 +0100

apport (0.101) hardy; urgency=low

  * debian/control: Add python-xdg dependency to apport, since apport-cli
    needs it. (LP: #177095)
  * apport/ui.py: Add test case for reporting a report which has been
    preprocessed by apport-retrace, i. e. has a stack trace, but no core dump
    any more (reproducing LP #185084).
  * apport/ui.py, run_crash(): Do not reject reports which have a stack trace,
    but no core dump. (LP: #185084)
  * apport/report.py: Fix test_add_gdb_info_load() test case, the temporary
    executable was already deleted when gdb ran the second time.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Wed, 23 Jan 2008 17:48:06 +0000

apport (0.100) hardy; urgency=low

  * bin/crash-digger: Add option --log for logging to a file, and
    --pidfile/--stop for daemonization. Add test cases to test-crash-digger.
  * bin/apport: Do not re-raise exceptions about failure to create the lock
    file, to avoid crashing in the case that another apport instance tries to
    lock at exactly the same moment. (LP: #147237)
  * apport/report.py testsuite: Check that our methods get along with binary
    data which turn into CompressedValue objects after loading them from a
    file. This reproduces LP #148305.
  * problem_report.py, CompressedValue: Add method splitlines() since we need
    it very often. Add test case to test_compressed_values(). (LP: #148305)
  * problem_report.py: Add test case to check that update() works and does the
    right thing with binary values and overwriting. This confirms that
    importing a dictionary works.
  * debian/local/setup-apport-retracer: Update for hardy.
  * apport/crashdb_impl/launchpad.py: get_source_info() does not work any more
    due to HTML changes in Launchpad, and not showing the component any more
    on /distro/+source/package. Since we do not actually need component and
    release name any more, rename it to get_source_version(), fix the regular
    expression to just get the version, and adapt get_fixed_version()
    accordingly.
  * debian/local/setup-apport-retracer: Update default apt sources to
    http://ddebs.ubuntu.com.
  * apport/ui.py: Robostify cleanup of forked test processes.
  * apport/ui.py: Sleep for 0.5 seconds after creating the test process in the
    test suite to give /proc some time to settle down.
  * bin/apport: Drop evaluation of CORE_* environment variables and mandate
    calling with <pid> <signal> <core ulimit>. Drop the now obsolete
    apport/elfcore.py. Adapt test-apport accordingly.
  * debian/apport.init, use-local: Now call apport with %p, %s, and %c kernel
    macros (since 2.6.24). Drop Edgy support from init script.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Fri, 21 Dec 2007 02:18:48 +0100

apport (0.99) hardy; urgency=low

  * cli/apport-cli, qt4/apport-qt: Fix typo 'send' -> 'sent'.
    (LP: #139288)
  * apport_python_hook.py: Add user info, too. Also add check for this to the
    test suite. (LP: #145109)
  * apport/ui.py, run_crash(): Show a proper UI error message instead of just
    crashing with an exception if the crash report is inaccessible for the
    invoking user. (LP: #146464)
  * apport/crashdb_impl/memory.py: Implement mark_retraced(),
    get_unretraced(), and get_dup_unchecked() for completeness, and define
    _MemoryCrashDBTest also when not running file as __main__. This makes the
    class useful for higher-level test suites. Add test cases for the new
    functions.
  * apport/crashdb_impl/memory.py: Support 'dummy_data' option which adds a
    few dummy crashes by default. This is useful for external test suites
    which cannot otherwise pre-fill the in-memory db. Add checks that this
    works properly.
  * bin/crash-digger: Use self.log() more consistently, and flush stdout in
    log(), so that we do not lose logs on output redirection.
  * Add test-crash-digger: Initial test suite for bin/crash-digger.
  * apport/ui.py, run_crash(): Intercept CRC errors from the info collection
    thread, which happens on broken core dumps. (LP: #132212)
  * cli/apport-cli, ui_present_package_error(): Fix running of dialog, so that
    reporting package problems with apport-cli actually works. (LP: #136369)
  * apport/ui.py, run_crash(): Intercept ENOSPC and present a proper error
    message. (LP: #145100)
  * gtk/apport-gtk.glade: Fix title of upload progress window to comply to
    HIG. Thanks, Bruce Cowan. (LP: #144782)
  * qt4/apport-qt: Fix Unicode <-> UTF-8 conversion. Thanks, Daniel Hahler!
    (LP: #148177)
  * apport/ui.py: Only import xdg.DesktopEntry when a .desktop file has been
    found in the affected package. This avoids the dependency on servers with
    just apport-cli. Thanks, Matthias Gug! (LP: #130013)
  * apport/fileutils.py: Do not fail if there are no packages installed which
    have one or several .desktop files. Thanks, Matthias Gug!

 -- Martin Pitt <martin.pitt@ubuntu.com>  Sun, 28 Oct 2007 18:32:07 -0400

apport (0.98) gutsy; urgency=low

  [ Martin Pitt ]
  * debian/local/setup-apport-retracer: launchpadBugs -> launchpadbugs
    (recently renamed Python package in python-launchpad-bugs).
  * apport/crashdb_impl/launchpad.py, test examples: Do not duplicate to bug
    #1, that generates a huge amount of spam. Use another test bug.
  * apport/crashdb_impl/launchpad.py, download(): Use Bug.description_raw,
    since LP mangles spaces in .description. Bump p-lp-bugs dependency.
  * apport/crashdb_impl/launchpad.py, close_duplicate(): Explicitly set the
    duplicate after removing attachments, since the new LP does not allow any
    modification of duplicate bugs.
  * bin/crash-digger: Only consolidate the duplicate DB when -i is given (i.
    e. usually only on one running instance).

  [ Colin Watson ]
  * Use bugs.launchpad.net for +filebug and +bugs requests. (LP: #138090)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 01 Oct 2007 14:35:07 +0200

apport (0.97) gutsy; urgency=low

  [Martin Pitt]
  * problem_report.py: Coerce CompressedValue.__len__() to return an int to
    work on Python 2.4, too.
  * debian/local/setup-apport-retracer: Adapt ddeb apt source for the move
    from ~pitti to ~ubuntu-archive.

  [Markus Korn]
  * port to new python-launchpad-bugs API.

  [Daniel Holbach]
  * small fixes to the port.
  * debian/control: bumped python-launchpad-bugs Depends to >= 0.2.2.

 -- Daniel Holbach <daniel.holbach@ubuntu.com>  Tue, 04 Sep 2007 11:24:28 +0200

apport (0.96) gutsy; urgency=low

  * Create man pages for apport-cli, apport-chroot, and dupdb-admin.
  * apport/fileutils.py, find_file_package(): Try to resolve symlinks in the
    directory path. (LP: #125551)
  * apport/crashdb_impl/launchpad.py, debian/local/setup-apport-retracer: Use
    packaging.get_system_architecture() (which is dpkg --print-architecture on
    Debian/Ubuntu) instead of uname, so that this does the right thing on lpia.
  * problem_report.py, write_mime(): Use base64 encoding for gzipped
    attachments, to not screw up mail servers. Thanks to Tim Yamin for this
    patch!
  * apport/crashdb.py: Drop the last argument (-1), since it is the default
    anyway and did not yet exist on Python 2.4.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 21 Aug 2007 14:11:48 +0200

apport (0.95) gutsy; urgency=low

  * general-hooks/automatix.py: Remove hashbang, it's not an executable
    script.
  * apport/report.py: Support system-wide blacklisting:
    /etc/apport/blacklist.d/. Add test cases.
  * Add doc/README.blacklist: Document blacklist.d/, install it there in
    setup.py.
  * debian/rules: Blacklist wine-preloader, so that we ignore wine crashes
    until an appropriate way is found to deal with them. (Point 6 of
    apport-better-retracing spec.)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Sat, 11 Aug 2007 18:10:54 +0200

apport (0.94) gutsy; urgency=low

  * doc/data-format.tex: Some updates to incorporate feedback from Gnome
    upstream:
    - Do not talk about "Distributions" any more, but "Operating systems".
      Gnome is used on non-Linux OSs, too.
    - Split "DistroRelease:" field into "OS:" and "OSRelease:".
    - Explicitly mention that CoreDump, StackTrace etc. can also contain
      minidump output.
    - Increase document version to 0.2.
  * apport/report.py, obsolete_packages(): Fix crash when apt does not know an
    available version of a package. (LP: #128176)
  * test-apport: Add check that apport aborts immediately if another apport
    instance is already running. Also test that a symlink attack on the lock
    file is not possible.
  * bin/apport: Abort running several apport instances at the same time, by
    lockf()'ing /var/crashes/.lock and aborting on failure. (LP: #119622)
  * Add bin/gcc_ice_hook: Script to create an apport report for a gcc ICE
    (internal compiler exception). Add test cases to test-hooks, and ship it
    in the 'apport' package. (LP: #125551)
  * run-tests: In 'local' mode, only explicitly run the apt/dpkg
    implementation instead of backends/*, since the RPM ones don't have tests
    yet.
  * apport/crashdb.py: Add a second optional parameter to upload() to specify
    an upload progress callback function. Adapt the declarations in the
    Launchpad and Memory implementations, too.
  * apport/crashdb_impl/launchpad.py, upload(): Pass upload progress callback
    handler to launchpadBugs.storeblob.upload(), which supports this since
    version 0.2~39. Bump dependency to it accordingly.
  * apport/ui.py, file_report(): Define an upload progress callback handler,
    pass it to the crashdb upload(), and feed ui_set_upload_progress() with
    some actual data. (LP: #91521)
  * problem_report.py: Remove support for reading bz2 compressed binary data.
    That was only relevant during edgy's development cycle.
  * apport/report.py, test_add_proc_info(): Fix determination of /bin/zgrep
    interpreter.
  * problem_report.py: Switch encoding of binary values from bare zlib to
    proper gzip format, since this is much more useful when reusing the
    compressed value. Retain support for zlib-only reports. Add test cases for
    both old and new encodings, and adapt the other test cases for the new
    format. Update doc/data-format.tex accordingly.
  * problem_report.py, write(): Add new permitted 'binary' argument value
    'compressed', which retains gzip compressed binary values instead of
    unpacking them transparently. Add test cases.
  * problem_report, write_mime(): Eliminate unnecessary usage of StringIO.
  * problem_report, write_mime(): Make function work for compressed binary
    values. Add test case.
  * apport/report.py, add_gdb_info(): Make function work if CoreDump is a
    compressed value.
  * apport/ui.py: Load crash report with keeping compressed binaries. This
    avoids loading the entire uncompressed core dump into memory, and avoids
    recompressing it all over again for generating the crash database upload
    MIME document. This greatly speeds up crash reporting, too. (LP: #98562)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 31 Jul 2007 21:32:00 +0200

apport (0.93) gutsy; urgency=low

  * apport/crashdb.py: Set sqlite connect timeout to two hours, instead of the
    default 5 seconds. Previously, one retracer always crashed when the other
    was consolidating the database.
  * bin/dupdb-admin, command_dump(): Correctly interpret empty version strings
    as 'fixed in unknown verrsion', not 'unfixed'.
  * apport/crashdb_impl/launchpad.py: Fix typo in bug comment string.
  * apport/crashdb_impl/launchpad.py: Add function get_source_info() which
    parses out release, version, and component from
    https://launchpad.net/$DISTRO/+source/$PACKAGE.
  * apport/crashdb_impl/launchpad.py, get_fixed_version(): If a bug is fixed,
    return the current version (as approximation of the version where the bug
    was fixed), instead of an empty string (which meant 'fixed in unknown
    version'). [apport-crash-duplicates spec]

 -- Martin Pitt <martin.pitt@ubuntu.com>  Wed, 25 Jul 2007 17:04:27 +0200

apport (0.92) gutsy; urgency=low

  * bin/crash-digger: Do not crash if duplicate db is locked when attempting
    to consolidate it. This happens often because in the DC we have two
    parallel instances (for amd64 and i386).
  * Move ubuntu-fat-chroot from bin/ to debian/local/, since it is so heavily
    Ubuntu specific.
  * debian/local/ubuntu-fat-chroot: Use diversions for the binaries we want to
    disable, so that chroot upgrades do not trash the modifications.
  * debian/local/setup-apport-retracer: launchpad-crash-digger ->
    crash-digger.
  * bin/crash-digger: Add option -i/--arch-indep-dupcheck to explicitly enable
    duplicate checking of arch-independent crashes like Python exceptions. We
    only want to process them on one architecture to avoid scattering the
    duplicate database.
  * apport/crashdb_impl/launchpad.py, get_unfixed(): Search for 'apport-crash'
    tag, not 'apport'.
  * bin/apport-unpack: Fix format string in error message.
  * apport/ui.py, __init__(): Intercept ImportError, which can happen for
    crashes during system upgrades. (LP: #124354)
  * Add general-hooks/automatix.py: Refuse to send problem reports if
    automatix is installed.
  * doc/package-hooks.txt: Do not document UnsupportableReason, since it does
    not make sense to set it in package hooks (it is checked before calling
    the hooks). Hooks should use UnreportableReason only.
  * apport/ui.py, test_run_crash_package(): Check that 'Package' problem
    reports collect additional information, too.
  * apport/ui.py, collect_info(): Collect additional information for 'Package'
    problem reports, too.
  * Revive preloadlib/:
    - Remove PIPE_CORE #ifdefs and make them the default. We do not need to
      support the Edgy kernel patches in this version any more.
    - Install signal handler for SIGABRT, too.
    - Read core ulimit, pass it to apport in CORE_REAL_RLIM, and set it to
      zero for the program, since we do not actually want the kernel to write
      core files when we pipe the core dump to apport.
    - test-apport: Pass APPORT_REPORT_DIR to the manually called apport
      instance in the memory clipping test; otherwise it'll write into
      /var/crash/, which we do not consider in library mode.
  * apport/crashdb_impl/launchpad.py, __init__(): Only do the "download bug
    #2" hack if we actually have an authentication cookie. Thus, do it only on
    the retracing servers, not on the client side. (LP: #125142)
  * apport/report.py, crash_signature(): Generate a signature for one-line
    Python tracebacks, too. This sometimes seems to happen, e. g. LP#124588.
    (LP: #125020)
  * apport/crashdb_impl/launchpad.py, update(): Set bug importance to Medium
    if retracing was successful. (LP: #106379)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 24 Jul 2007 21:50:34 +0200

apport (0.91) gutsy; urgency=low

  * bin/apport: Remove code that supported the Edgy kernel way of core dump
    passing. Also factorize the CORE_REAL_RLIM evaluation, since it is likely
    to change in the near future.
  * apport/crashdb_impl/launchpad.py, close_duplicate(): Delete some
    attachments, as specified in apport-crash-duplicates spec, and make the
    bug public afterwards.
  * apport/crashdb_impl/launchpad.py, close_duplicate(): If the master bug is
    already duped to yet another bug, mark the bug to that one instead of the
    master.
  * apport/crashdb.py: Split out duplicate_db_last_consolidation() for getting
    the date (or seconds since) the last consolidation, so that we can use it
    externally.
  * apport/crashdb.py: Add duplicate_db_change_master_id() to change the
    master ID of a crash. Add test case to apport/crashdb_impl/memory.py.
  * Add bin/dupdb-admin: Initial version of duplicate db CLI app; can dump the
    db, display consolidation state, and change master bug IDs for now. Ship
    it in apport-retrace.
  * apport/crashdb.py, duplicate_db_last_consolidation(): Fix timedelta
    seconds calculation to actually take the days into account, too.
  * bin/crash-digger: Fix dumping of dup db after consolidation.
  * apport/ui.py:
    - test_run_report_bug_package(): Add test case for calling the UI in bug
      filing mode with an invalid package name.
    - run_report_bug(): Do not crash on invalid package name, generate an
      error message instead. (LP: #123644)
  * apport/fileutils.py, mark_report_seen(): Do not crash if the file has
    already been deleted underneath us. (LP: #122347)
  * apport/ui.py, run_report_bug(): Do not crash if the target process runs as
    a different user. Print a proper error message instead. Add test case
    test_run_report_bug_noperm_pid(). (LP: #121121)
  * apport/fileutils.py, likely_packaged(): Ignore /var/lib/schroot. Add test
    case. (LP: #122859)
  * apport/ui.py, open_url(): Intercept weird race condition for os.close()
    trying to close an already invalidated fd. (LP: #123180)

  Merge the fedora branch, thanks to Will Woods <wwoods@redhat.com>:

  * Add apport.init.fedora: Fedora specific init script.
  * Add apport.spec: RPM build recipe.
  * Add backends/packaging_rpm.py: Partial implementation of the packaging
    backend for RPM which applies to all RPM-based distros.
  * Add backends/packaging_fedora.py: Concrete packaging backend
    implementation for Fedora.
  * apport/elfcore.py: Classes for parsing general ELF files, and information
    from core dumps.
  * bin/apport: Fall back to reading signal number and PID directly from the
    core file (via elfcore.py) if CORE_SIGNAL and CORE_PID are not defined (i.
    e. when running on a non-Ubuntu kernel).
  * crashdb.conf: Add stanzas for Fedora and a 'debug' database which uses the
    'memory' crashdb implementation.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Sat, 14 Jul 2007 15:08:35 +0200

apport (0.90) gutsy; urgency=low

  * apport/ui.py, load_report(): Catch IOError, too. LP: #118827
  * Merge apport-cli package into apport itself. The program itself is just 3
    kB compressed, and it's not worth wasting another 34 kB compressed
    changelog for this tiny bit.
  * apport/report.py, obsolete_packages(): Use the version comparison from the
    packaging system instead of just testing for inequality. This catches zero
    epochs. Thanks to Will Woods <wwoods@redhat.com>!
  * apport/ui.py: Add option -c/--crash-file to run the UI with a particular
    crash file (which can be anywhere) instead of all pending crashes in
    /var/crash/.
  * Add xdg-mime/apport.xml: XDG MIME type definition for .crash files.
  * Add gtk/apport-gtk-mime.desktop.in: Link text/x-apport MIME type to
    apport-gtk -c, so that .crash files can be reported with Gnome.
  * Add debian/apport.links: Install an icon symlink for the MIME type.
  * apport/ui.py: Do not ask the initial "Do you want to report this?"
    question when being invoked with --crash-file.
  * po/POTFILES.in: Add missing cli/apport-cli.
  * po/de.po: Updated for apport-cli.
  * cli/apport-cli: Add option for keeping the report file without sending it,
    and to display its path. This is for sending the report later, copying
    it from a server to a workstation with internet connection, etc.
  * apport/crashdb_impl/launchpad.py: Simplify _subscribe_triaging_team(), now
    that we do not differ between main and universe policies any more.
  * apport/report.py: Support another hook directory
    /usr/share/apport/general-hooks/ for scripts which are run for every
    problem report. This was requested for adding e. g. AppArmor logs, etc.
    Add test cases.
  * Add debian/apport.dirs again to ship that hook directory.
  * doc/package-hooks.txt: Document the general hooks.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 10 Jul 2007 21:10:19 +0100

apport (0.89) gutsy; urgency=low

  Implement private crash bug handling, according to
  https://wiki.ubuntu.com/CrashReporting:

  * apport/crashdb_impl/launchpad.py:
    - upload(): If we have an Ubuntu bug, mark it as private and only
      subscribe 'apport' (the 'Apport retracing service' user).
    - Add function _subscribe_triaging_team() which subscribes
      ubuntu-crashes-main for source packages in Ubuntu main or restricted, or
      ubuntu-crashes-universe for other packages. It does not touch non-Ubuntu
      bugs, since these are not marked private by default and are outside of
      the scope of this spec.
    - update(), _mark_dup_checked(): Call _subscribe_triaging_team().
    - Note: This entire spec is a gross hack, and Ubuntu derivatives do not
      benefit from it at all. We have to live with this until LP grows a real
      crash database.
    - get_distro_release(): Make this function work with private bugs, too, by
      using p-lp-bugs' safe_urlopen().

  Bug fixes:

  * apport/crashdb_impl/launchpad.py: Revert simplification change of 0.85:
    BugList returns a set of strings, not integers; due to non-identity they
    do not work with the usual set operations.
  * apport/crashdb_impl/launchpad.py: Add function get_source_component() to
    query Launchpad for the component of a given distribution and source
    package. (This will be required for implementing crash-reporting).
  * backends/packaging-apt-dpkg.py, _search_contents(): Package list is
    actually comma separated, only take the first item. This fixes retracing
    of e. g. #124139.
  * backends/packaging-apt-dpkg.py, _search_contents(): Fix package name
    parsing for non-main components. This fixes retracing of e. g. #124111.
  * apport/report.py, _read_maps(): Revert ptrace hack when maps cannot be
    read. maps file is now protected based on process ownership, not ptracing.
  * apport/crashdb.py, apport/crashdb_impl/launchpad.py,
    apport/crashdb_impl/memory.py: Remove official interface
    mark_dup_checked(), as it should only be an internally used function. Add
    report parameter, since we will need it there in the future. Remove
    explicit call from bin/crash-digger and instead change check_duplicate()
    to call it on its own.
  * apport/crashdb_impl/launchpad.py, download(): Replace dodgy parsing of
    fields from the description with proper code, so that multi-line fields
    are read correctly, too.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Fri, 06 Jul 2007 11:19:22 +0200

apport (0.88) gutsy; urgency=low

  * po/de.po: Update.
  * backends/packaging-apt-dpkg.py, _search_contents(): Do not check the
    return value of zgrep. It usually errors out with 'stdout: broken pipe'
    when called with -m1.
  * bin/crash-digger: Mark a bug as retraced if DistroRelease: cannot be
    determined. Those are bugs apport cannot handle.
  * backends/packaging-apt-dpkg.py, get_source_tree(): Call apt-get source
    with --assume-yes to not block on VCS confirmations.
  * apport/crashdb.py: Add interface mark_retrace_failed(). Implement it in
    apport/crashdb_impl/launchpad.py.
  * bin/apport-retrace: If retraced report does not have a crash signature,
    mark it as failed with above new function. Bump python-apport dependency
    for this.
  * apport/crashdb_impl/launchpad.py, update(): Delete CoreDump.gz attachment
    if the retrace was successful (i. e. if the report has a crash signature).
  * apport/ui.py, test_run_crash(): Set the message box title, text, and
    severity as assertion message if the run_crash() test fails, so that you
    know why it fails. This usually happens if libc6 or another dependency of
    the test crash is out of date.
  * gtk/apport-gtk.glade: Mark string as translatable. LP: #119621

 -- Martin Pitt <martin.pitt@ubuntu.com>  Tue, 03 Jul 2007 21:38:05 +0200

apport (0.87) gutsy; urgency=low

  * apport/report.py:
    - test_gen_stacktrace_top(): Add test case for unwinding a Gnome assertion
      (g_logv(), g_assert_warning() and similar), see LP #123462.
    - _gen_stacktrace_top(): Generalize for unwinding multiple functions and a
      set of function names, and add the Gnome assertion ones.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 02 Jul 2007 11:00:44 +0200

apport (0.86) gutsy; urgency=low

  * test-apport: Check that apport does not create reports for emtpy core
    dumps.
  * problem_report.py: Introduce a fourth optional parameter "fail_on_empty"
    to file pointer tuples which causes write() to raise an IOError if no data
    was read. Add test cases.
  * bin/apport: Enforce non-emptyness of CoreDump.
  * problem_report.py: Add test case for delayed piping of data passed as file
    object pointers. This was supposed to explain the reason for getting bugs
    with zero-byte core dumps, but already works correctly.
  * apport/report.py, check_ignored(): round the mtime to an int (just like
    mark_ignore() does), to not get wrong results on file systems that support
    subsecond file timestamps. This fixes running the test suite on the live
    CD.
  * test-apport: Clarify assertion message if /var/crash is not empty.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Thu, 28 Jun 2007 19:14:36 +0200

apport (0.85) gutsy; urgency=low

  * apport/crashdb_impl/launchpad.py: BugList.bugs is already a set, simplify
    code a bit.
  * debian/control: Add dpkg-dev dependency to apport-retrace, for getting
    dpkg-source.
  * apport/report.py, crash_signature(): Allow ':' and '~' as part of function
    names to cover C++. Adapt test case to cover this.
  * apport/report.py test suite: Do not assume that /bin/zgrep uses /bin/sh,
    it was recently changed to use bash. Directly read the interpreter from
    the shebang line.
  * bin/apport-chroot, command_upgrade(): Supply -y to 'apt-get upgrade' also
    in verbose mode.
  * bin/apport-chroot, command_upgrade(): Run 'apt-get clean' before
    regenerating the chroot tarball.
  * backends/packaging-apt-dpkg.py, get_dependencies(): Fix crash when
    encountering a virtual package. LP: #122274
  * apport/report.py, obsolete_packages(): Do not consider virtual packages as
    obsolete.
  * apport/crashdb_impl/launchpad.py: Do a bogus call to Bug() in the ctor.
    This initializes python-launchpad-bugs to use a cookie for the urlopen in
    BugList, so that get_unretraced() and get_dup_unchecked() return private
    bugs, too. This works around LP #122126.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 25 Jun 2007 16:38:43 +0200

apport (0.84) gutsy; urgency=low

  * apport/crashdb.py: Add new abstract methods:
    - get_unretraced() and mark_retraced(id) to get a list of crashes that
      need to be retraced and chalk them off.
    - get_dup_unchecked() and mark_dup_checked() to get a list of crashes that
      need to be checked for being a duplicate and chalk them off. This is
      aimed at crashes which do not need retracing, such as unhandled Python
      exceptions.
  * apport/crashdb_impl/launchpad.py: Implement above methods for launchpad
    (moving the code from bin/launchpad-crash-digger).
  * apport/crashdb_impl/launchpad.py: Set "need-duplicate-check" tag for
    Python crashes.
  * apport/crashdb_impl/launchpad.py, download(): Fetch Traceback.txt, too, so
    that we can do duplicate checking for Python crashes.
  * bin/launchpad-crash-digger: Drop Launchpad specific code and replace it
    with calls to above new functions. Rename to bin/crash-digger. Also rename
    all 'cookie' to 'auth' (as happened with the other applications earlier).
  * bin/crash-digger: Do duplicate checking for needs-duplicate-check crash
    bugs (such as Python crashes).
  * bin/apport-retrace, bin/crash-digger: More language cleanup; we should
    stop talking about 'bugs' and use 'crash' consistently.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Thu, 14 Jun 2007 19:50:24 +0200

apport (0.83) gutsy; urgency=low

  * apport/crashdb.py: Separate abstract from implemented functions.
  * apport/crashdb.py, apport/packaging.py, apport/ui.py: Use
    NotImplementedError instead of Exception in the abstract methods.
  * apport/packaging.py: Add interface compare_versions() for comparing
    package version numbers.
  * backends/packaging-apt-dpkg.py: Implement compare_versions() using
    apt.VersionCompare(), add some test cases.
  * apport/report.py: Fix typo: 'none' -> 'None'.
  * apport/chroot.py: Do not include /usr/local/lib and /usr/lib in
    LD_LIBRARY_PATH, just /lib, so that we still use the libc from outside,
    but e. g. libxml2 from inside the chroot.

  https://blueprints.launchpad.net/ubuntu/+spec/apport-crash-duplicates: Merge
  crash-dups branch, which implements automatic crash duplicate detection:

  * apport/crashdb.py: Add methods for crash duplicate detection.
  * apport/crashdb_impl/memory.py: Change internal data management to track
    fixed version and duplicates.
  * apport/crashdb_impl/memory.py: Add a test suite for all methods, including
    the duplicate detection API of the base CrashDatabase (since it is
    much easier to test it here, on an actual implementation).
  * debian/pyversions: Bump minimal Python version to 2.5, since this starts
    providing the sqlite3 module.
  * apport/crashdb_impl/launchpad.py: Implement new methods required for crash
    duplicate detection. get_fixed_version() does not approximate version
    tracking yet; it just returns '' for fixed bugs (which means 'fixed, but
    unknown version'). Bump python-launchpad-bugs dependency for this to
    ensure the availability of Bug.mark_duplicate().
  * bin/apport-retrace: Add option --duplicate-db which specifies the path to
    the duplicate sqlite database and enables duplicate detection.
  * Abin/apport-chroot: Add option --duplicate-db. If a file is given, symlink
    it into the chroot and pass --duplicate-db to apport-retrace.
  * bin/launchpad-crash-digger: Add --duplicate-db and pass it to
    apport-chroot.
  * apport/crashdb.py: Track last run of duplicate_db_consolidate() in an
    extra table and add a method duplicate_db_needs_consolidation() which
    returns True if the last run was more than a given number of seconds ago.
    Add test cases to apport/crashdb_impl/memory.py.
  * bin/launchpad-crash-digger, fill_pool(): Check whether the duplicate
    database needs consolidation (i. e. updating the bug states to the reality
    in the bug tracker) and if so, trigger it.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Wed, 13 Jun 2007 13:09:57 +0200

apport (0.82) gutsy; urgency=low

  * Add bin/ubuntu-fat-chroot: Script to install a set of commonly needed
    packages into a minimal Ubuntu chroot (as created by apport-chroot). This
    requires some hacking of postinst and /usr/sbin/ files in between the
    installation stages and thus deserves a script on its own.
  * apport/packaging.py:
    - Add "uninstalled" option to get_file_package(). If set to True, this
      will do an expensive search of files/packages which are not installed.
    - Add interface "set_mirror(URL)" for functions which need to retrieve
      packages and data from distribution mirrors.
  * backends/packaging-apt-dpkg.py: Implement "uninstalled" option and
    "set_mirror(URL)", add test cases.
  * bin/apport-retrace: Use "uninstalled" option now to install packages and
    corresponding -dbgsyms for uninstalled files mentioned in ProcMaps
    (Point 1 of apport-better-retracing spec). Bump python-apport dependency.
  * apport/packaging.py: Add interface get_available_version(package).
  * backends/packaging-apt-dpkg.py: Implement get_available_version(), add
    shallow test case.
  * apport/report.py: Add function obsolete_packages() to return packages in
    Package: and Depends: which are not up to date. Add test cases.
  * apport/ui.py, thread_collect_info(): For crashes, call obsolete_packages()
    and set UnreportableReason: if there are any (Point 2 of
    apport-better-retracing spec).
  * apport/ui.py, thread_collect_info(): call standard_title() and add it to
    the report as 'Title' field. This is useful if reporters modify the
    default title (per request of Brian Murray, thanks). Add test case.
  * apport/ui.py: Fix declaration of the test suite's
    ui_set_upload_progress(). Funny that this has never been triggered before.
  * apport/report.py, add_gdb_info(): Split out StacktraceTop generation into
    separate funtion _gen_stacktrace_top(), so that we can test it separately.
  * apport/report.py, _gen_stacktrace_top(): Step back from the crashed
    program's own signal handlers, since those are generally not useful for
    the purposes of StacktraceTop and only impede duplicate matching
    (Point 4 of apport-better-retracing spec). Add various test cases.
  * apport/report.py: Add method crash_signature() to calculate an unique
    identifier of a signal or Python crash, to be used for duplicate
    detection. Add various test cases.
  * apport/packaging.py: Add interface get_source_tree() to fetch and unpack a
    source package to a given directory, optionally specifying a particular
    version.
  * backends/packaging-apt-dpkg.py: Implement get_source_tree(). This has a
    rather crude 'call apt-get source and guess about directories'
    implementation until python-apt learns about doing this directly and more
    elegantly (see LP #118788).
  * bin/apport-retrace: Add gen_source_stacktrace() and a few helper functions
    to construct a field 'StacktraceSource' with the source code around the
    affected lines in the stack trace (as available). (Point 5 of
    apport-better-retracing spec).
  * apport/crashdb_impl/launchpad.py, update(): Attach StacktraceSource to the
    bug if it exists.
  * apport/crashdb_impl/launchpad.py: Check PackageArchitecture for 'all', to
    not set a retracer tag 'need-all-retrace'.
  * test-apport: Clarify assertion failure message when an unexpected core
    dump is present.
  * apport/report.py, get_module_license(): Do not iterate over Popen.stdout,
    use communicate() instead. The latter is already fixed to not trip over
    SIGINTR. (LP: #118965)

 -- Martin Pitt <martin.pitt@ubuntu.com>  Fri, 08 Jun 2007 07:47:04 +0200

apport (0.81) gutsy; urgency=low

  * apport/report.py: Remove '[apport]' default bug title prefix. (LP: #94819)
  * apport/crashdb_impl/launchpad.py: Tag new bugs with
    'apport-<problemtype>'. This replaces the former '[apport]' prefixing.
  * debian/local/setup-apport-retracer: Specify a path in '.' command and
    use sh again. Yay for me needing three attempts before actually RTFMing
    how '.' works (which is really nasty and strange IMHO).
  * bin/apport-chroot: Fix symlinks before repackaging the chroot tarball in
    'install' and 'installdeb' modes.
  * debian/local/setup-apport-retracer: Install python-libxml2 and python-apt.
  * bin/launchpad-crash-digger: Supply --auth instead of the deprecated
    --cookie to apport-chroot.
  * bin/apport-chroot: Fix identifier name in command_retrace().
  * debian/local/setup-apport-retracer: Set APPORT_CRASHDB_CONF to the local
    crashdb.conf.
  * bin/apport-chroot: Unset APPORT_CRASHDB_CONF for login and retrace.
  * bin/launchpad-crash-digger: Check the release of a bug and whether we have
    a chroot for it before untagging it. This avoids loosing tags for bugs we
    do not yet have a working retracer chroot for.
  * bin/apport-retrace: Do not abort with an exception if package installation
    fails. Give a proper error message instead and point to -u. (LP: #115681)
  * apport/crashdb_impl/launchpad.py, update(): Create a temporary directory
    and use proper file names for the new attachments. With TemporaryFile(),
    attachment file names ended up as '<fdopen>'. (LP: #115347)
  * apport/report.py, add_os_info(): Add field 'NonfreeKernelModules' which
    lists loaded kernel modules which do not have a FOSS license. This is
    particularly helpful for quickly checking for restricted graphics drivers.
    (LP: #103239)
  * apport_python_hook.py: Move the apport.* imports into the try: block and
    move the likely_packaged() test to the top, to avoid importing
    apport.report and creating a Report object for non-packaged scripts. This
    makes the entire code more efficient and robust against errors in the
    apport modules. (LP: #109955)
  * apport/report.py, add_gdb_info(): Intercept OSError from gdb invocation
    (which might be segfaulting itself) and just do not put any gdb output
    into the report. The automatic retracers can try their luck again.
    (LP: #112501)
  * bin/apport-retrace: Fix handling of packages which are still known to
    /var/lib/dpkg/status, but do not have an apt record any more; treat them
    like virtual packages and just issue a warning instead of falling over.
    (LP: #107474)
  * Add doc/data-format.tex: Documentation of the structure, encoding, and
    standard keys of the Apport report file format. [apport-for-upstreams
    blueprint]
  * Add doc/Makefile: Build and clean rules for generating data-format.pdf.
  * debian/rules, setup.py: Call doc/Makefile and install the PDF
    documentation. Add texlive-latex-recommended build dependency for that.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Thu, 24 May 2007 19:39:12 +0200

apport (0.80) gutsy; urgency=low

  Collect all Launchpad specific bits in a separate class and provide an
  abstract base class. This will greatly help for getting upstream acceptance
  and the possibility of automatically forwarding crashes upstream
  (apport-for-upstreams specification):

  * Add apport/crashdb.py: Abstract crash database interface. This also offers
    a factory function get_crashdb() which reads a configuration file to find
    the default crash database to be used.
  * Add ./crashdb.conf: Crash database configuration file, for Ubuntu on
    Launchpad. Modify setup.py and debian/python-apport.install to ship it in
    python-apport.
  * Add apport/crashdb_impl/memory.py: Simple in-memory implementation of
    crash database interface for testing.
  * Add apport/crashdb_impl/launchpad.py: Launchpad implementation of crash
    database interface.
  * apport/ui.py: Drop LP specific bits and move towards new CrashDatabase
    interface.
  * apport/ui.py, test suite: Do not overwrite file_report() any more, but
    use the memory CrashDatabase. This will test the actual file_report()
    implementation and allows the test suite to check the precise value of
    opened URLs.
  * apport/{report,ui}.py: Move UserInterface.create_crash_bug_title() and its
    test cases to Report.standard_title(). It is much more appropriate there
    and can be used in the retracer as well.
  * bin/apport-retrace: Drop LP specific bits and move to CrashDatabase
    interface. Remove the --remove-tag option, we really should not have it
    here; remove it from man/apport-retrace.1 as well.
  * bin/apport-chroot: Drop --remove-tag option here, too.
  * bin/apport-chroot: Drop LP specific bits and move to CrashDatabase
    interface.
  * bin/launchpad-crash-digger: Remove retracing tag directly instead of
    passing --remove-tag to apport-chroot. This is a much cleaner design and
    avoids infinitely looping on some weirdly failing retraces.
  * debian/control: Bump some python-apport dependencies for the API changes.

  Some debranding:

  * setup.py: Use apport wiki home page for 'url'.
  * Remove 'X-Ubuntu-Gettext-Domain' from *.desktop.in, since langpack.mk will
    add it automatically now.
  * *.desktop.in: Remove 'in Ubuntu' from comment.
  * cli/apport-cli, qt4/apport-qt: Generalize window titles.

  Other fixes:
  * po/de.po: Update.
  * debian/local/setup-apport-retracer: Revert back 'source' to '.' and use
    bash instead of sh. POSIX sh does not seem to have a 'source' command.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 21 May 2007 19:25:31 +0200

apport (0.79) gutsy; urgency=low

  * debian/local/setup-apport-retracer: Fix '.' bashism, replace it with
    'source'.
  * problem_report.py, write_mime(): Drop preamble argument, replace it with
    an extra_headers dictionary. This is much easier to evaluate on clients.
  * apport/ui.py: Convert to new write_mime() interface from above. This
    finally automatically tags bugs with need-$ARCH-retrace. Bump
    p-problem-report dependency of python-apport for this.
  * apport/report.py: Change example URLs in the testsuite from launchpad to
    an artificial ones to avoid the impression that it is LP specific.
  * backends/packaging-apt-dpkg.py: Formally make this a subclass of
    apport.packaging.PackageInfo.
  * debian/control: Use code.lp.net instead of bazaar.lp.net VCS URL.
  * bin/kernel_hook: Fix/improve the collected information:
    - Read /proc/modules instead of lsmod.
    - Fix lspci argument: -n instead of -m.
    - Add /proc/cmdline.
  * debian/rules: Use langpack.mk for updating the .desktop files.
  * Add po/Makevars to specify the domain, to make intltool figure out the
    gettext domain automatically.
  * bin/kernel_hook, ./test-hooks: Do not rely on /proc/version_signature any
    more, it's gone in the gutsy kernel.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 21 May 2007 15:55:10 +0200

apport (0.78) gutsy; urgency=low

  * apport/packaging.py, backends/packaging-dpkg.py: Add new interface
    is_distro_package(package) which verifies the origin of a given package.
    Move the dodgy hack from apport/ui.py to the backend, where it belongs to.
    Also add a test case.
  * debian/control: Add python-apt dependency to python-apport.
  * debian/control: Remove debianutils dependency, it's essential.
  * Drop backends/packaging-dpkg.py. It had some hackish usage of python-apt
    anyway, since some things just cannot be figured out with dpkg alone.
    Since we have to give up on that idea, implement a new clean packaging
    backend 'packaging-apt-dpkg.py' which now uses python-apt and dpkg in a
    clean way.
  * apport/report.py, add_gdb_info(): Fix crash when Stacktrace could not be
    created. (LP: #107853)
  * ./test-apport: Check that crashes create a core dump (with proper ulimits)
    when an unseen crash report exists already. This reproduces LP #105976.
  * bin/apport: Create core dump file if aborting because an unseen crash
    report already exists. (LP: #105976)
  * apport/ui.py: Add a comment for translators. (LP: #104703)
  * apport/ui.py, load_report(): Also catch zlib.error on invalid reports.
    (LP: #103547)
  * apport/report.py: Add method has_useful_stacktrace() to determine whether
    the stack trace can be considered useful. The current heuristic is to
    consider it useless if it either is shorter than three lines and has any
    unknown function, or for longer traces, a minority of known functions. Add
    test cases.
  * gtk/apport-gtk, qt4/apport-qt, cli/apport-cli: Do not offer 'reduced
    report' option if the stack trace is useless. (LP: #87430) Bump the
    python-apport dependencies of the frontend packages to ensure that we have
    has_useful_stacktrace().

 -- Martin Pitt <martin.pitt@ubuntu.com>  Sat,  5 May 2007 17:53:42 +0200

apport (0.77) gutsy; urgency=low

  * 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)
  * apport/chroot.py: Fix test suite to work with Python 2.4's tarfile module
    output format.
  * debian/local/setup-apport-retracer: Generalized some feisty specific
    bits, set default release to gutsy.

 -- Martin Pitt <martin.pitt@ubuntu.com>  Mon, 23 Apr 2007 12:22:17 +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 <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
