Merge lp:~gothicx/apport/credentials_broken into lp:~apport-hackers/apport/trunk

Proposed by Marco Rodrigues
Status: Merged
Merge reported by: Martin Pitt
Merged at revision: not available
Proposed branch: lp:~gothicx/apport/credentials_broken
Merge into: lp:~apport-hackers/apport/trunk
Diff against target: 6392 lines
36 files modified
.bzr-builddeb/default.conf (+2/-0)
TODO (+9/-0)
apport/crashdb_impl/launchpad.py (+21/-15)
apport/hookutils.py (+39/-0)
backends/packaging_rpm.py (+0/-309)
data/general-hooks/automatix.py (+26/-0)
data/general-hooks/ubuntu.py (+73/-0)
data/package-hooks/source_debian-installer.py (+35/-0)
data/package-hooks/source_linux.py (+58/-0)
debian/apport-gtk.install (+2/-0)
debian/apport-kde.install (+7/-0)
debian/apport-retrace.install (+3/-0)
debian/apport-retrace.manpages (+3/-0)
debian/apport.install (+20/-0)
debian/apport.links (+3/-0)
debian/apport.logrotate (+9/-0)
debian/apport.manpages (+4/-0)
debian/apport.upstart (+50/-0)
debian/changelog (+4195/-0)
debian/compat (+1/-0)
debian/control (+124/-0)
debian/copyright (+24/-0)
debian/local/apport-chroot (+347/-0)
debian/local/apport-chroot.1 (+305/-0)
debian/local/apport-collect (+170/-0)
debian/local/apport-collect.1 (+68/-0)
debian/local/setup-apport-retracer (+149/-0)
debian/local/ubuntu-fat-chroot (+32/-0)
debian/pycompat (+1/-0)
debian/python-apport.install (+3/-0)
debian/python-problem-report.install (+1/-0)
debian/pyversions (+1/-0)
debian/rules (+25/-0)
debian/watch (+2/-0)
do-release (+0/-35)
etc/apport/crashdb.conf (+1/-1)
To merge this branch: bzr merge lp:~gothicx/apport/credentials_broken
Reviewer Review Type Date Requested Status
Martin Pitt (community) Approve
Review via email: mp+12480@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Martin Pitt (pitti) wrote :

I cherrypicked the first commit (copyright fix) into the ubuntu branch, thanks.

This was branched from ubuntu branch, so I can't directly merge this into trunk. However, it's easy enough to cherrypick the actual fix.

http://bazaar.launchpad.net/~gothicx/apport/credentials_broken/revision/1545 breaks the "else" logic, i. e. it now _always_ gets new credentials, even if reading them from the file worked just fine. Instead of except: pass you should do "except: # generate new credentials here...".

review: Needs Fixing
Revision history for this message
Martin Pitt (pitti) wrote :

I didn't really merge your branch, but I fixed it in trunk now:

http://bazaar.launchpad.net/%7Eapport-hackers/apport/trunk/revision/1616

Thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added directory '.bzr-builddeb'
2=== added file '.bzr-builddeb/default.conf'
3--- .bzr-builddeb/default.conf 1970-01-01 00:00:00 +0000
4+++ .bzr-builddeb/default.conf 2009-09-27 10:15:22 +0000
5@@ -0,0 +1,2 @@
6+[BUILDDEB]
7+merge = True
8
9=== modified file 'TODO'
10--- TODO 2009-04-11 18:37:37 +0000
11+++ TODO 2009-09-27 10:15:22 +0000
12@@ -13,3 +13,12 @@
13
14 hooks:
15 - add hooks which run during program crash, to collect more runtime data
16+
17+retracers:
18+ - cache Contents.gz
19+
20+hookutils:
21+- run hooks for related packages in attach_related_packages
22+
23+apt-dpkg backend:
24+- use python-apt's Version.get_source() instead of apt-get source
25
26=== modified file 'apport/crashdb_impl/launchpad.py'
27--- apport/crashdb_impl/launchpad.py 2009-09-23 22:04:34 +0000
28+++ apport/crashdb_impl/launchpad.py 2009-09-27 10:15:22 +0000
29@@ -17,6 +17,8 @@
30 from httplib2 import ServerNotFoundError
31 from launchpadlib.launchpad import Launchpad, STAGING_SERVICE_ROOT, EDGE_SERVICE_ROOT
32 from launchpadlib.credentials import Credentials
33+from launchpadlib.errors import CredentialsFileError
34+from ConfigParser import MissingSectionHeaderError, NoOptionError
35
36 import apport.crashdb
37 import apport
38@@ -93,24 +95,24 @@
39 os.makedirs(auth_dir)
40
41 try:
42- if os.path.exists(self.auth):
43- # use existing credentials
44+ try: # use existing credentials
45 credentials = Credentials()
46 credentials.load(open(self.auth))
47 self.__launchpad = Launchpad(credentials, launchpad_instance,
48- self.__lpcache)
49- else:
50- # get credentials and save them
51- try:
52- self.__launchpad = Launchpad.get_token_and_login('apport-collect',
53- launchpad_instance, self.__lpcache)
54- except HTTPError, e:
55- print >> sys.stderr, 'Error connecting to Launchpad: %s\nYou have to allow "Change anything" privileges.' % str(e)
56- sys.exit(1)
57- f = open(self.auth, 'w')
58- os.chmod(self.auth, 0600)
59- self.__launchpad.credentials.save(f)
60- f.close()
61+ self.__lpcache)
62+ # FIXME: launchpadlib doesn't catch ConfigParser exceptions into CredentialsFileError.
63+ except (IOError, CredentialsFileError, MissingSectionHeaderError, NoOptionError):
64+ pass
65+ try: # get credentials and save them
66+ self.__launchpad = Launchpad.get_token_and_login('apport-collect',
67+ launchpad_instance, self.__lpcache)
68+ except HTTPError, e:
69+ print >> sys.stderr, 'Error connecting to Launchpad: %s\nYou have to allow "Change anything" privileges.' % str(e)
70+ sys.exit(1)
71+ f = open(self.auth, 'w')
72+ os.chmod(self.auth, 0600)
73+ self.__launchpad.credentials.save(f)
74+ f.close()
75 except (socket.error, ServerNotFoundError), e:
76 print >> sys.stderr, 'Error connecting to Launchpad: %s' % str(e)
77 sys.exit(99) # transient error
78@@ -173,6 +175,10 @@
79 hdr['Subscribers'] = 'apport'
80 if report.has_key('Tags'):
81 hdr['Tags'] += ' ' + report['Tags']
82+ if 'VmCore' in report:
83+ if report['DistroRelease'].split()[0] == 'Ubuntu':
84+ hdr['Private'] = 'yes'
85+ hdr['Subscribers'] = 'apport'
86
87 # write MIME/Multipart version into temporary file
88 mime = tempfile.TemporaryFile()
89
90=== modified file 'apport/hookutils.py'
91--- apport/hookutils.py 2009-09-22 10:11:34 +0000
92+++ apport/hookutils.py 2009-09-27 10:15:22 +0000
93@@ -63,6 +63,45 @@
94
95 report[key] = read_file(path)
96
97+def attach_conffiles(report, package, conffiles=None):
98+ '''Attach information about any modified or deleted conffiles'''
99+
100+ try:
101+ dpkg = subprocess.Popen(['dpkg-query','-W','--showformat=${Conffiles}',
102+ package], stdout=subprocess.PIPE, close_fds=True)
103+ except OSError, e:
104+ return 'Error: ' + str(e)
105+
106+ out = dpkg.communicate()[0]
107+ if dpkg.returncode != 0:
108+ return
109+
110+ for line in out.splitlines():
111+ if not line:
112+ continue
113+ # just take the first two fields, to not stumble over obsolete
114+ # conffiles
115+ path, default_md5sum = line.strip().split()[:2]
116+
117+ if conffiles and path not in conffiles: continue
118+
119+ key = 'modified.conffile.' + path_to_key(path)
120+
121+ if os.path.exists(path):
122+ contents = open(path).read()
123+ m = hashlib.md5()
124+ m.update(contents)
125+ calculated_md5sum = m.hexdigest()
126+
127+ if calculated_md5sum != default_md5sum:
128+ report[key] = contents
129+ statinfo = os.stat(path)
130+ mtime = datetime.datetime.fromtimestamp(statinfo.st_mtime)
131+ mtime_key = 'mtime.conffile.' + path_to_key(path)
132+ report[mtime_key] = mtime.isoformat()
133+ else:
134+ report[key] = '[deleted]'
135+
136 def attach_dmesg(report):
137 '''Attach information from the kernel ring buffer (dmesg).'''
138
139
140=== removed file 'backends/packaging_rpm.py'
141--- backends/packaging_rpm.py 2009-04-11 16:40:06 +0000
142+++ backends/packaging_rpm.py 1970-01-01 00:00:00 +0000
143@@ -1,309 +0,0 @@
144-'''A partial apport.PackageInfo class implementation for RPM, as found in
145-Fedora, RHEL, openSUSE, SUSE Linux, and many other distributions.
146-
147-Copyright (C) 2007 Red Hat Inc.
148-Copyright (C) 2008 Nikolay Derkach
149-Author: Will Woods <wwoods@redhat.com>, Nikolay Derkach <nderkach@gmail.com>
150-
151-This program is free software; you can redistribute it and/or modify it
152-under the terms of the GNU General Public License as published by the
153-Free Software Foundation; either version 2 of the License, or (at your
154-option) any later version. See http://www.gnu.org/copyleft/gpl.html for
155-the full text of the license.
156-'''
157-
158-# N.B. There's some distro-specific bits in here (e.g. is_distro_package()).
159-# So this is actually an abstract base class (or a template, if you like) for
160-# RPM-based distributions.
161-# A proper implementation needs to (at least) set official_keylist to a list
162-# of GPG keyids used by official packages. You might have to extend
163-# is_distro_package() as well, if you don't sign all your official packages
164-# (cough cough Fedora rawhide cough)
165-
166-# It'd be convenient to use rpmUtils from yum, but I'm trying to keep this
167-# class distro-agnostic.
168-import rpm, hashlib, os, stat, subprocess
169-
170-class RPMPackageInfo:
171- '''Partial apport.PackageInfo class implementation for RPM, as
172- found in Fedora, RHEL, CentOS, etc.'''
173-
174- # Empty keylist. Should contain a list of key ids (8 lowercase hex digits).
175- # e.g. official_keylist = ('30c9ecf8','4f2a6fd2','897da07a','1ac70ce6')
176- official_keylist = ()
177-
178- def __init__(self):
179- self.ts = rpm.TransactionSet() # connect to the rpmdb
180- self._mirror = None
181-
182- def get_version(self, package):
183- '''Return the installed version of a package.'''
184- hdr = self._get_header(package)
185- if hdr == None:
186- raise ValueError
187- # Note - "version" here seems to refer to the full EVR, so..
188- if not hdr['e']:
189- return hdr['v'] + '-' + hdr['r']
190- if not hdr['v'] or not hdr['r']:
191- return None
192- else:
193- return hdr['e'] + ':' + hdr['v'] + '-' + hdr['r']
194-
195- def get_available_version(self, package):
196- '''Return the latest available version of a package.'''
197- # used in report.py, which is used by the frontends
198- raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
199-
200- def get_dependencies(self, package):
201- '''Return a list of packages a package depends on.'''
202- hdr = self._get_header(package)
203- # parse this package's Requires
204- reqs=[]
205- for r in hdr['requires']:
206- if r.startswith('rpmlib') or r.startswith('uname('):
207- continue # we've got rpmlib, thanks
208- if r[0] == '/': # file requires
209- req_heads = self._get_headers_by_tag('basenames',r)
210- else: # other requires
211- req_heads = self._get_headers_by_tag('provides',r)
212- for rh in req_heads:
213- rh_envra = self._make_envra_from_header(rh)
214- if rh_envra not in reqs:
215- reqs.append(rh_envra)
216- return reqs
217-
218- def get_source(self, package):
219- '''Return the source package name for a package.'''
220- hdr = self._get_header(package)
221- return hdr['sourcerpm']
222-
223- def get_architecture(self, package):
224- '''Return the architecture of a package.
225-
226- This might differ on multiarch architectures (e. g. an i386 Firefox
227- package on a x86_64 system)'''
228- # Yeah, this is kind of redundant, as package is ENVRA, but I want
229- # to do this the right way (in case we change what 'package' is)
230- hdr = self._get_header(package)
231- return hdr['arch']
232-
233- def get_files(self, package):
234- '''Return list of files shipped by a package.'''
235- hdr = self._get_header(package)
236- files = []
237- for (f, mode) in zip(hdr['filenames'],hdr['filemodes']):
238- if not stat.S_ISDIR(mode):
239- files.append(f)
240- return files
241-
242- def get_modified_files(self, package):
243- '''Return list of all modified files of a package.'''
244- hdr = self._get_header(package)
245-
246- files = hdr['filenames']
247- mtimes = hdr['filemtimes']
248- md5s = hdr['filemd5s']
249-
250- modified = []
251- for i in xrange(len(files)):
252- # Skip files we're not tracking md5s for
253- if not md5s[i]: continue
254- # Skip files we can't read
255- if not os.access(files[i],os.R_OK): continue
256- # Skip things that aren't real files
257- s = os.stat(files[i])
258- if not stat.S_ISREG(s.st_mode): continue
259- # Skip things that haven't been modified
260- if mtimes[i] == s.st_mtime: continue
261- # Oh boy, an actual possibly-modified file. Check the md5sum!
262- if not self._checkmd5(files[i],md5s[i]):
263- modified.append(files[i])
264-
265- return modified
266-
267- def get_file_package(self, file):
268- '''Return the package a file belongs to, or None if the file is not
269- shipped by any package.
270-
271- Under normal use, the 'file' argument will always be the executable
272- that crashed.
273- '''
274- # The policy for handling files which belong to multiple packages depends on the distro
275- raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
276-
277- def get_system_architecture(self):
278- '''Return the architecture of the system, in the notation used by the
279- particular distribution.'''
280- rpmarch = subprocess.Popen(['rpm', '--eval', '%_target_cpu'],
281- stdout=subprocess.PIPE)
282- arch = rpmarch.communicate()[0].strip()
283- return arch
284-
285- def is_distro_package(self, package):
286- '''Check if a package is a genuine distro package (True) or comes from
287- a third-party source.'''
288- # This is a list of official keys, set by the concrete subclass
289- if not self.official_keylist:
290- raise Exception, 'Subclass the RPM implementation for your distro!'
291- hdr = self._get_header(package)
292- if not hdr:
293- return False
294- # Check the GPG sig and key ID to see if this package was signed
295- # with an official key.
296- if hdr['siggpg']:
297- # Package is signed
298- keyid = hdr['siggpg'][13:17].encode('hex')
299- if keyid in self.official_keylist:
300- return True
301- return False
302-
303- def set_mirror(self, url):
304- '''Explicitly set a distribution mirror URL for operations that need to
305- fetch distribution files/packages from the network.
306-
307- By default, the mirror will be read from the system configuration
308- files.'''
309- # FIXME C&P from apt-dpkg implementation, might move to subclass
310- self._mirror = url
311-
312- def get_source_tree(self, srcpackage, dir, version=None):
313- '''Download given source package and unpack it into dir (which should
314- be empty).
315-
316- This also has to care about applying patches etc., so that dir will
317- eventually contain the actually compiled source.
318-
319- If version is given, this particular version will be retrieved.
320- Otherwise this will fetch the latest available version.
321-
322- Return the directory that contains the actual source root directory
323- (which might be a subdirectory of dir). Return None if the source is
324- not available.'''
325- # Used only by apport-retrace.
326- raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
327-
328- def compare_versions(self, ver1, ver2):
329- '''Compare two package versions.
330-
331- Return -1 for ver < ver2, 0 for ver1 == ver2, and 1 for ver1 > ver2.'''
332- # Used by crashdb.py (i.e. the frontends)
333- # I could duplicate stringToVersion/compareEVR from rpmUtils.misc,
334- # but I hate duplicating code. So if you don't want to require rpmUtils
335- # you can implement this function yourself. Probably you've got
336- # equivalent code in whatever your distro uses instead of yum anyway.
337- raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
338-
339- def package_name_glob(self, glob):
340- '''Return known package names which match given glob.'''
341-
342- raise NotImplementedError, 'TODO'
343-
344- #
345- # Internal helper methods. These are only single-underscore, so you can use
346- # use them in extending/overriding the methods above in your subclasses
347- #
348-
349- def _get_headers_by_tag(self,tag,arg):
350- '''Get a list of RPM headers by doing dbMatch on the given tag and
351- argument.'''
352- matches = self.ts.dbMatch(tag,arg)
353- if matches.count() == 0:
354- raise ValueError, 'Could not find package with %s: %s' % (tag,arg)
355- return [m for m in matches]
356-
357- def _get_header(self,envra):
358- '''Get the RPM header that matches the given ENVRA.'''
359-
360- querystr = envra
361- qlen = len(envra)
362- while qlen > 0:
363- mi = impl.ts.dbMatch('name', querystr)
364- hdrs = [m for m in mi]
365- if len(hdrs) > 0:
366- # yay! we found something
367- # Unless there's some rpmdb breakage, you should have one header
368- # here. If you do manage to have two rpms with the same ENVRA,
369- # who cares which one you get?
370- h = hdrs[0]
371- break
372-
373- # remove the last char of querystr and retry the search
374- querystr = querystr[0:len(querystr)-1]
375- qlen = qlen - 1
376-
377- if qlen == 0:
378- raise ValueError, 'No headers found for this envra: %s' % envra
379- return h
380-
381- def _make_envra_from_header(self,h):
382- '''Generate an ENVRA string from an rpm header'''
383- nvra="%s-%s-%s.%s" % (h['n'],h['v'],h['r'],h['arch'])
384- if h['e']:
385- envra = "%s:%s" % (h['e'],nvra)
386- else:
387- envra = nvra
388- return envra
389-
390- def _checkmd5(self,filename,filemd5):
391- '''Internal function to check a file's md5sum'''
392- m = hashlib.md5()
393- f = open(filename)
394- data = f.read()
395- f.close()
396- m.update(data)
397- return (filemd5 == m.hexdigest())
398-
399-impl = RPMPackageInfo()
400-
401-#
402-# Unit test
403-#
404-
405-if __name__ == '__main__':
406- import unittest
407-
408- class RPMPackageInfoTest(unittest.TestCase):
409-
410- def test_get_dependencies(self):
411- '''get_dependencies().'''
412-
413- deps = impl.get_dependencies('bash')
414- self.assertNotEqual(deps, [])
415-
416- def test_get_header(self):
417- '''_get_header().'''
418-
419- hdr = impl._get_header('alsa-utils')
420- self.assertEqual(hdr['n'], 'alsa-utils')
421-
422- def test_get_headers_by_tag(self):
423- '''_get_headers_by_tag().'''
424-
425- headersByTag = impl._get_headers_by_tag('basenames','/bin/bash')
426- self.assertEqual(len(headersByTag), 1)
427- self.assert_(headersByTag[0]['n'].startswith('bash'))
428-
429- def test_get_system_architecture(self):
430- '''get_system_architecture().'''
431-
432- arch = impl.get_system_architecture()
433- # must be nonempty without line breaks
434- self.assertNotEqual(arch, '')
435- self.assert_('\n' not in arch)
436-
437- def test_get_version(self):
438- '''get_version().'''
439-
440- ver = impl.get_version('bash')
441- self.assertNotEqual(ver, None)
442- ver = impl.get_version('alsa-utils')
443- self.assertNotEqual(ver, None)
444-
445-
446- # only execute if rpm is available
447- try:
448- if subprocess.call(['rpm', '--help'], stdout=subprocess.PIPE,
449- stderr=subprocess.PIPE) == 0:
450- unittest.main()
451- except OSError:
452- pass
453
454=== added file 'data/general-hooks/automatix.py'
455--- data/general-hooks/automatix.py 1970-01-01 00:00:00 +0000
456+++ data/general-hooks/automatix.py 2009-09-27 10:15:22 +0000
457@@ -0,0 +1,26 @@
458+'''Do not send any crashes when automatix is or was installed, since it usually
459+causes a mess in the system and causes a lot of package installation failures.
460+
461+Copyright (C) 2007 Canonical Ltd.
462+Author: Martin Pitt <martin.pitt@ubuntu.com>
463+
464+This program is free software; you can redistribute it and/or modify it
465+under the terms of the GNU General Public License as published by the
466+Free Software Foundation; either version 2 of the License, or (at your
467+option) any later version. See http://www.gnu.org/copyleft/gpl.html for
468+the full text of the license.
469+'''
470+
471+import apport.packaging
472+
473+def add_info(report):
474+ try:
475+ if apport.packaging.get_version('automatix') or \
476+ apport.packaging.get_version('automatix2') or \
477+ apport.packaging.get_version('ultamatix'):
478+ report['UnreportableReason'] = 'You have installed automatix or ultamatix on your \
479+system. This is known to cause a lot of instability, thus problem reports \
480+will not be sent to the %s developers.' % report.get('DistroRelease',
481+ 'distribution').split()[0]
482+ except ValueError, e:
483+ return
484
485=== added file 'data/general-hooks/ubuntu.py'
486--- data/general-hooks/ubuntu.py 1970-01-01 00:00:00 +0000
487+++ data/general-hooks/ubuntu.py 2009-09-27 10:15:22 +0000
488@@ -0,0 +1,73 @@
489+'''Attach generally useful information, not specific to any package.
490+
491+Copyright (C) 2009 Canonical Ltd.
492+Author: Matt Zimmerman <mdz@canonical.com>
493+
494+This program is free software; you can redistribute it and/or modify it
495+under the terms of the GNU General Public License as published by the
496+Free Software Foundation; either version 2 of the License, or (at your
497+option) any later version. See http://www.gnu.org/copyleft/gpl.html for
498+the full text of the license.
499+'''
500+
501+import apport.packaging
502+import re
503+from apport.hookutils import *
504+
505+def add_info(report):
506+ # crash reports from live system installer often expose target mount
507+ for f in ('ExecutablePath', 'InterpreterPath'):
508+ if f in report and report[f].startswith('/target/'):
509+ report[f] = report[f][7:]
510+
511+ # if we are running from a live system, add the build timestamp
512+ attach_file_if_exists(report, '/cdrom/.disk/info', 'LiveMediaBuild')
513+
514+ # This includes the Ubuntu packaged kernel version
515+ attach_file_if_exists(report, '/proc/version_signature', 'ProcVersionSignature')
516+
517+ # https://wiki.ubuntu.com/FoundationsTeam/Specs/OemTrackingId
518+ attach_file_if_exists(report, '/var/lib/ubuntu_dist_channel',
519+ 'DistributionChannelDescriptor')
520+
521+ # There are enough of these now that it is probably worth refactoring...
522+ # -mdz
523+ if report['ProblemType'] == 'Package':
524+ if report['Package'] not in ['grub', 'grub2']:
525+ # linux-image postinst emits this when update-grub fails
526+ # https://wiki.ubuntu.com/KernelTeam/DebuggingUpdateErrors
527+ if 'DpkgTerminalLog' in report and re.search(r'^User postinst hook script \[.*update-grub\] exited with value', report['DpkgTerminalLog'], re.MULTILINE):
528+ # File these reports on the grub package instead
529+ grub_package = apport.packaging.get_file_package('/usr/sbin/update-grub')
530+ if grub_package is None or grub_package == 'grub':
531+ report['SourcePackage'] = 'grub'
532+ else:
533+ report['SourcePackage'] = 'grub2'
534+
535+ if report['Package'] != 'initramfs-tools':
536+ # update-initramfs emits this when it fails, usually invoked from the linux-image postinst
537+ # https://wiki.ubuntu.com/KernelTeam/DebuggingUpdateErrors
538+ if 'DpkgTerminalLog' in report and re.search(r'^update-initramfs: failed for ', report['DpkgTerminalLog'], re.MULTILINE):
539+ # File these reports on the initramfs-tools package instead
540+ report['SourcePackage'] = 'initramfs-tools'
541+
542+ if report['Package'].startswith('linux-image-') and 'DpkgTerminalLog' in report:
543+ # /etc/kernel/*.d failures from kernel package postinst
544+ m = re.search(r'^run-parts: (/etc/kernel/\S+\.d/\S+) exited with return code \d+', report['DpkgTerminalLog'], re.MULTILINE)
545+ if m:
546+ path = m.group(1)
547+ package = apport.packaging.get_file_package(path)
548+ if package:
549+ report['SourcePackage'] = package
550+ report['ErrorMessage'] = m.group(0)
551+ else:
552+ report['UnreportableReason'] = 'This failure was caused by a program which did not originate from Ubuntu'
553+
554+ if 'Package' in report:
555+ package = report['Package'].split()[0]
556+ if package and 'attach_conffiles' in dir():
557+ attach_conffiles(report, package)
558+
559+ # do not file bugs against "upgrade-system" if it is not installed (LP#404727)
560+ if package == 'upgrade-system' and 'not installed' in report['Package']:
561+ report['UnreportableReason'] = 'You do not have the upgrade-system package installed. Please report package upgrade failures against the package that failed to install, or against upgrade-manager.'
562
563=== added file 'data/package-hooks/source_debian-installer.py'
564--- data/package-hooks/source_debian-installer.py 1970-01-01 00:00:00 +0000
565+++ data/package-hooks/source_debian-installer.py 2009-09-27 10:15:22 +0000
566@@ -0,0 +1,35 @@
567+'''Apport package hook for the Debian installer.
568+
569+Copyright (C) 2009 Canonical Ltd.
570+Author: Colin Watson <cjwatson@ubuntu.com>'''
571+
572+from apport.hookutils import attach_hardware, command_available, command_output
573+
574+def add_info(report):
575+ attach_hardware(report)
576+
577+ report['DiskUsage'] = command_output(['df'])
578+ report['MemoryUsage'] = command_output(['free'])
579+
580+ if command_available('dmraid'):
581+ report['DmraidSets'] = command_output(['dmraid', '-s'])
582+ report['DmraidDevices'] = command_output(['dmraid', '-r'])
583+ if command_available('dmsetup'):
584+ report['DeviceMapperTables'] = command_output(['dmsetup', 'table'])
585+
586+ try:
587+ installer_version = open('/var/log/installer/version')
588+ for line in installer_version:
589+ if line.startswith('ubiquity '):
590+ # File these reports on the ubiquity package instead
591+ report['SourcePackage'] = 'ubiquity'
592+ break
593+ installer_version.close()
594+ except IOError:
595+ pass
596+
597+if __name__ == '__main__':
598+ report = {}
599+ add_info(report)
600+ for key in report:
601+ print '%s: %s' % (key, report[key].split('\n', 1)[0])
602
603=== added file 'data/package-hooks/source_linux.py'
604--- data/package-hooks/source_linux.py 1970-01-01 00:00:00 +0000
605+++ data/package-hooks/source_linux.py 2009-09-27 10:15:22 +0000
606@@ -0,0 +1,58 @@
607+'''Apport package hook for the Linux kernel.
608+
609+(c) 2008 Canonical Ltd.
610+Contributors:
611+Matt Zimmerman <mdz@canonical.com>
612+Martin Pitt <martin.pitt@canonical.com>
613+
614+This program is free software; you can redistribute it and/or modify it
615+under the terms of the GNU General Public License as published by the
616+Free Software Foundation; either version 2 of the License, or (at your
617+option) any later version. See http://www.gnu.org/copyleft/gpl.html for
618+the full text of the license.
619+'''
620+
621+import os
622+import subprocess
623+from apport.hookutils import *
624+
625+SUBMIT_SCRIPT = "/usr/bin/kerneloops-submit"
626+
627+def add_info(report, ui):
628+ attach_hardware(report)
629+ attach_alsa(report)
630+ attach_wifi(report)
631+
632+ attach_file_if_exists(report, "/etc/initramfs-tools/conf.d/resume",
633+ key="HibernationDevice")
634+
635+ version_signature = report.get('ProcVersionSignature', '')
636+ if not version_signature.startswith('Ubuntu '):
637+ report['UnreportableReason'] = _('The running kernel is not an Ubuntu kernel')
638+ return
639+
640+ uname_release = os.uname()[2]
641+ lrm_package_name = 'linux-restricted-modules-%s' % uname_release
642+ lbm_package_name = 'linux-backports-modules-%s' % uname_release
643+
644+ attach_related_packages(report, [lrm_package_name, lbm_package_name, 'linux-firmware'])
645+
646+ if ('Failure' in report and report['Failure'] == 'oops'
647+ and 'OopsText' in report and os.path.exists(SUBMIT_SCRIPT)):
648+ #it's from kerneloops, ask the user whether to submit there as well
649+ if ui is not None:
650+ if ui.yesno("This report may also be submitted to "
651+ "http://kerneloops.org/ in order to help collect aggregate "
652+ "information about kernel problems. This aids in identifying "
653+ "widespread issues and problematic areas. Would you like to "
654+ "submit information about this crash there?"):
655+ text = report['OopsText']
656+ proc = subprocess.Popen(SUBMIT_SCRIPT,
657+ stdin=subprocess.PIPE)
658+ proc.communicate(text)
659+
660+if __name__ == '__main__':
661+ report = {}
662+ add_info(report, None)
663+ for key in report:
664+ print '%s: %s' % (key, report[key].split('\n', 1)[0])
665
666=== added directory 'debian'
667=== added file 'debian/apport-gtk.install'
668--- debian/apport-gtk.install 1970-01-01 00:00:00 +0000
669+++ debian/apport-gtk.install 2009-09-27 10:15:22 +0000
670@@ -0,0 +1,2 @@
671+usr/share/apport/*gtk*
672+usr/share/applications/*gtk-mime*
673
674=== added file 'debian/apport-kde.install'
675--- debian/apport-kde.install 1970-01-01 00:00:00 +0000
676+++ debian/apport-kde.install 2009-09-27 10:15:22 +0000
677@@ -0,0 +1,7 @@
678+usr/share/apport/*kde*
679+usr/share/apport/progress.ui
680+usr/share/apport/error.ui
681+usr/share/apport/bugreport.ui
682+usr/share/apport/choices.ui
683+usr/share/applications/apport-kde-mime.desktop
684+usr/share/applications/apport-kde-mimelnk.desktop usr/share/mimelnk/text
685
686=== added file 'debian/apport-retrace.install'
687--- debian/apport-retrace.install 1970-01-01 00:00:00 +0000
688+++ debian/apport-retrace.install 2009-09-27 10:15:22 +0000
689@@ -0,0 +1,3 @@
690+usr/bin/apport-retrace
691+usr/bin/dupdb-admin
692+../local/apport-chroot usr/bin
693
694=== added file 'debian/apport-retrace.manpages'
695--- debian/apport-retrace.manpages 1970-01-01 00:00:00 +0000
696+++ debian/apport-retrace.manpages 2009-09-27 10:15:22 +0000
697@@ -0,0 +1,3 @@
698+man/apport-retrace.1
699+man/dupdb-admin.1
700+debian/local/apport-chroot.1
701
702=== added file 'debian/apport.install'
703--- debian/apport.install 1970-01-01 00:00:00 +0000
704+++ debian/apport.install 2009-09-27 10:15:22 +0000
705@@ -0,0 +1,20 @@
706+etc/default
707+etc/cron.daily
708+usr/share/apport/apport
709+usr/share/apport/apport-checkreports
710+usr/share/apport/package_hook
711+usr/share/apport/kernel_crashdump
712+usr/share/apport/kernel_oops
713+usr/share/apport/gcc_ice_hook
714+usr/share/apport/apportcheckresume
715+usr/share/apport/testsuite/
716+usr/share/doc/apport
717+usr/share/locale
718+usr/share/icons
719+usr/share/mime
720+usr/share/apport/package-hooks
721+usr/share/apport/general-hooks
722+usr/bin/apport-cli
723+usr/bin/apport-unpack
724+usr/bin/apport-bug
725+../local/apport-collect usr/bin
726
727=== added file 'debian/apport.links'
728--- debian/apport.links 1970-01-01 00:00:00 +0000
729+++ debian/apport.links 2009-09-27 10:15:22 +0000
730@@ -0,0 +1,3 @@
731+/usr/share/apport/package-hooks/source_linux.py /usr/share/apport/package-hooks/source_linux-meta.py
732+/usr/bin/apport-bug /usr/bin/ubuntu-bug
733+/usr/share/man/man1/apport-bug.1.gz /usr/share/man/man1/ubuntu-bug.1.gz
734
735=== added file 'debian/apport.logrotate'
736--- debian/apport.logrotate 1970-01-01 00:00:00 +0000
737+++ debian/apport.logrotate 2009-09-27 10:15:22 +0000
738@@ -0,0 +1,9 @@
739+/var/log/apport.log {
740+ daily
741+ rotate 7
742+ delaycompress
743+ compress
744+ notifempty
745+ missingok
746+}
747+
748
749=== added file 'debian/apport.manpages'
750--- debian/apport.manpages 1970-01-01 00:00:00 +0000
751+++ debian/apport.manpages 2009-09-27 10:15:22 +0000
752@@ -0,0 +1,4 @@
753+man/apport-unpack.1
754+man/apport-cli.1
755+man/apport-bug.1
756+debian/local/apport-collect.1
757
758=== added file 'debian/apport.upstart'
759--- debian/apport.upstart 1970-01-01 00:00:00 +0000
760+++ debian/apport.upstart 2009-09-27 10:15:22 +0000
761@@ -0,0 +1,50 @@
762+# apport - automatic crash report generation
763+#
764+# While this job is active, core dumps will captured by apport and
765+# used to generate automatic crash reports.
766+
767+description "automatic crash report generation"
768+
769+start on runlevel [2345]
770+stop on runlevel [!2345]
771+
772+env enabled=1
773+
774+pre-start script
775+ . /etc/default/apport
776+ [ "$enabled" = "1" ]
777+
778+ mkdir -p -m 1777 /var/crash
779+
780+ # check for kernel crash dump, convert it to apport report
781+ if [ -e /var/crash/vmcore ]
782+ then
783+ /usr/share/apport/kernel_crashdump || true
784+ fi
785+
786+ # check for incomplete suspend/resume or hibernate
787+ if [ -e /var/lib/pm-utils/status ]
788+ then
789+ /usr/share/apport/apportcheckresume || true
790+ rm -f /var/lib/pm-utils/status
791+ rm -f /var/lib/pm-utils/resume-hang.log
792+ fi
793+
794+ echo "|/usr/share/apport/apport %p %s %c" > /proc/sys/kernel/core_pattern
795+end script
796+
797+post-stop script
798+ # Check for a hung resume. If we find one try and grab everything
799+ # we can to aid in its discovery
800+ if [ -e /var/lib/pm-utils/status ]
801+ then
802+ ps -wwef > /var/lib/pm-utils/resume-hang.log
803+ fi
804+
805+ if [ "`dd if=/proc/sys/kernel/core_pattern count=1 bs=1 2>/dev/null`" != "|" ]
806+ then
807+ exit 1
808+ else
809+ echo "core" > /proc/sys/kernel/core_pattern
810+ fi
811+end script
812
813=== added file 'debian/changelog'
814--- debian/changelog 1970-01-01 00:00:00 +0000
815+++ debian/changelog 2009-09-27 10:15:22 +0000
816@@ -0,0 +1,4195 @@
817+apport (1.9.1-0ubuntu1) karmic; urgency=low
818+
819+ [ Martin Pitt ]
820+ * New upstream bug fix release:
821+ - hookutils.py, attach_hardware(): Do not attach empty Pccardctl*.
822+ - apport/report.py, add_gdb_info(): Do not throw away stderr from gdb.
823+ - data/general-hooks/parse_segv.py:
824+ + Handle arithmetic wrapping correctly.
825+ + Handle empty base, scale, or index registers in disassembly.
826+ + Handle in/out ioport faults.
827+ - Various improvements to user-visible strings, thanks to Marco Rodrigues!
828+ (LP: #178507)
829+ - Various apport-retrace robustifications.
830+ - setup.py: Fix DistUtilsExtra version check. (LP: #428337)
831+ - hookutils.py, attach_gconf(): Do not overwrite previous values from
832+ other packages, thanks Loïc Minier!
833+ - hookutils.py, attach_gconf(): Fix crash with nonexisting <applyto> tags.
834+
835+ [ Loïc Minier ]
836+ * Upstream source is at https://launchpad.net/apport/+download not
837+ archive.ubuntu.com.
838+
839+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 22 Sep 2009 12:51:38 +0200
840+
841+apport (1.9-0ubuntu6) karmic; urgency=low
842+
843+ * debian/apport.upstart:
844+ - Use "exit" in Upstart script rather than "return".
845+ - Fix post-stop script to write to the correct file. LP: #430895.
846+
847+ -- Scott James Remnant <scott@ubuntu.com> Wed, 16 Sep 2009 20:33:49 +0100
848+
849+apport (1.9-0ubuntu5) karmic; urgency=low
850+
851+ * Merge bug fixes from trunk:
852+ - hookutils.py, attach_hardware(): Do not attach empty Pccardctl*.
853+ - apport/ui.py: Show a better message when failed connection to crash
854+ database. Thanks to Marco Rodrigues! (LP: #178507)
855+ - Do not throw away stderr from gdb.
856+ - data/general-hooks/parse_segv.py: Handle arithmetic wrapping correctly.
857+ - backends/packaging-apt-dpkg.py: More robust of missing ExecutablePath
858+ due to outdated packages.
859+ - setup.py: Fix DistUtilsExtra version check. (LP: #428337)
860+ * data/general-hooks/ubuntu.py: Add distribution channel descriptor, as per
861+ https://wiki.ubuntu.com/FoundationsTeam/Specs/OemTrackingId .
862+ * data/general-hooks/ubuntu.py: Do not allow users to file bugs against
863+ upgrade-system if the package isn't actually installed. Way too many
864+ upgrade failures get wrongly reported against this. (LP: #404727)
865+ * debian/rules: Entirely drop obsolete dh_installinit call.
866+
867+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 15 Sep 2009 17:31:26 +0200
868+
869+apport (1.9-0ubuntu4) karmic; urgency=low
870+
871+ FFE LP: #427356.
872+
873+ * Replace init script with Upstart job.
874+ * debian/control:
875+ - Bump build-dependency on debhelper for Upstart-aware dh_installinit
876+
877+ -- Scott James Remnant <scott@ubuntu.com> Tue, 15 Sep 2009 03:33:57 +0100
878+
879+apport (1.9-0ubuntu3) karmic; urgency=low
880+
881+ * apport/report.py: add upstream bzr commit 1591:
882+ - include stderr in gdb command output
883+
884+ -- Kees Cook <kees@ubuntu.com> Wed, 09 Sep 2009 19:32:05 -0700
885+
886+apport (1.9-0ubuntu2) karmic; urgency=low
887+
888+ * Add missing python-apt build dependency.
889+
890+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 08 Sep 2009 17:41:04 +0200
891+
892+apport (1.9-0ubuntu1) karmic; urgency=low
893+
894+ * New upstream release:
895+ - Add "do what I mean" mode to command line argument parsing (applies to
896+ all interfaces: -cli, -gtk, -kde). When giving a single argument and no
897+ options, determine the most likely mode, like reporting a bug against a
898+ symptom, package, executable name, or PID.
899+ - Add program "apport-bug" which determines the most appropriate user
900+ interface (GTK, KDE, CLI) and files a bug through it, using the single
901+ argument "do what I mean" mode. This is an improved version of Ubuntu's
902+ "ubuntu-bug" script.
903+ - Update apport-cli manpage to current set of options and behaviour. Also
904+ point out that apport-gtk and apport-kde share the same CLI.
905+ - setup.py now installs apport-{gtk,kde} into $prefix/share/apport/, they
906+ are not supposed to be called directly. This also reflects the path
907+ which the .desktop files expect.
908+ - setup.py now installs the internal helper scripts like
909+ "kernel_crashdump", "apport", or "apportcheckresume" into
910+ $prefix/share/apport instead of $prefix/bin.
911+ - Update usage of gettext to work around Python bug of gettext() not
912+ returning unicodes, but str. Fixes UnicodeDecodeErrors on translated
913+ --help output.
914+ - Add missing gettext wrapping for user-visible strings in
915+ apport-{retrace,unpack} and ui.py; thanks to Marco Rodrigues!
916+ - backends/packaging-apt-dpkg.py: Robustify get_{source,architecture} for
917+ uninstalled packages
918+ - ui.py: Add --version option. Thanks Marco Rodrigues! (LP: #383694)
919+ * debian/local/apport-collect: Fix KeyError crash on nonexisting LP bug
920+ number. Thanks Marco Rodrigues! (LP: #424273)
921+ * debian/control: Bump Standards-Version to 3.8.3 (no changes necessary).
922+ * debian/local/apport-collect: Point out that you need to select "Change
923+ anything" privileges. (LP: #373700)
924+ * debian/control: Drop obsolete texlive-latex-recommended build dependency.
925+ * debian/rules: Drop --install-scripts, upstream now installs the files and
926+ binaries into the right place. Adapt debian/*.install accordingly.
927+ * Drop debian/local/ubuntu-bug{,.1} and replace them with symlinks to
928+ apport-bug{,.1}, which is a more robust version of ubuntu-bug.
929+
930+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 08 Sep 2009 15:53:33 +0200
931+
932+apport (1.8.2-0ubuntu1) karmic; urgency=low
933+
934+ [ Martin Pitt ]
935+ * New upstream bug fix release:
936+ - crashdb.py: Fix handling of non-ASCII crash signatures
937+ - packaging-apt-dpkg.py: Run ExecutablePath/InterpreterPath check later,
938+ so that it does not always have to be done
939+ - crashdb.py: Never mark a bug as a duplicate of itself.
940+ - launchpad.py, close_duplicate(): Add duplicate assertion
941+ - Update Ubuntu bug pattern URL
942+ - launchpad.py: Add "cache_dir" option and $APPORT_LAUNCHPAD_CACHE
943+ environment variable to specify a non-temporary cache directory.
944+ (LP: #416804)
945+ - packaging-apt-dpkg.py, get_architecture(): Only use installed
946+ architecture if package is actually installed
947+ - launchpad.py: Drop explicit temporary cache dir, launchpadlib does that
948+ automatically now. Thanks to Marco Rodriguez!
949+
950+ [ Marco Rodrigues ]
951+ * debian/local/setup-apport-retracer: Switch to karmic.
952+
953+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 05 Sep 2009 13:04:16 +0200
954+
955+apport (1.8.1-0ubuntu1) karmic; urgency=low
956+
957+ * New upstream bug fix release:
958+ - data/general-hooks/generic.py: Check $HOME, not /home for enough space.
959+ (LP: #422658)
960+ - launchpad.py: Intercept httplib2.ServerNotFoundError as well, to avoid
961+ crashes when being offline. (LP: #396276)
962+ - apport-cli: Save reports with .apport extension instead of .txt. Thanks
963+ to Steve Beattie! (LP: #401983)
964+ - fileutils.py, likely_packaged(): Ignored crashes in /var, packages don't
965+ ship executables there, and it creates false positives. (LP: #414368)
966+ - packaging-apt-dpkg.py, get_modified_files(): Fix crash with empty lines.
967+ (LP: #408280)
968+ - packaging-apt-dpkg.py: Use installed version instead of candidate
969+ version where appropriate. This also fixes a crash where an obsolete
970+ package is not available any more. (LP: #423511)
971+ - hookutils.py, attach_gconf(): Fix crash with keys which do not have a
972+ schema default. (LP: #422277)
973+ - launchpad.py: Remove LP #353805 workaround, seems fixed now.
974+ - launchpad.py: Talk to staging if $APPORT_STAGING is set.
975+ - launchpad.py: Explicitly supply content_type for addAttachment, current
976+ wadllib requires it now.
977+ - apport_python_hook.py: Paper over inexplicable import error.
978+ (LP: #348250)
979+ - apport_python_hook.py: Protect against nonexisting sys.argv.
980+ (LP: #418051)
981+ - apport/ui.py, load_report(): Check that report has ProblemType field.
982+ (LP: #198543)
983+ - ui.py: Fix handling of complete vs. reduced report size. (LP: #92653).
984+ This also fixes a race condition crash with os.path.getsize().
985+ (LP: #348137)
986+ - fi.po: Fix mistranslation of "&Cancel". (LP: #355303)
987+ - apport-{gtk,kde}: Check for having $DISPLAY at startup to avoid crashes.
988+ (LP: #411276)
989+ - report.py, add_gdb_info(): Fix race condition in unlink_core, thanks to
990+ Tommi Komulainen! (LP: #397945)
991+ - ui.py, load_report(): Robustify check whether program is still
992+ installed. (LP: #329184)
993+ - packaging-apt-dpkg.py, install_retracing_packages(): Install package for
994+ ExecutablePath/InterpreterPath if missing; this can happen with package
995+ hooks which reassing package
996+ - launchpad.py: Add a comment when marking a bug as a duplicate.
997+ (LP: #418871)
998+ * Move gdb dependency from apport to GUI packages to avoid pulling in gdb on
999+ Ubuntu server. Thanks to Steve Beattie! (LP: #354172)
1000+ * ubuntu-bug: Fix handling of .crash file arguments, thanks to Marco
1001+ Rodrigues for pointing this out! (LP: #422881)
1002+ * debian/local/apport-collect: Set content_type and description, wadllib
1003+ requires them now. (LP: #423512) Also drop the ASCII reencoding
1004+ workaround, this doesn't seem to be necessary any more.
1005+ * apport/hookutils.py, attach_conffiles(): Fix crash with obsolete
1006+ conffiles. (LP: #412132)
1007+ * debian/local/apport-collect: Do not upload data if the affected package
1008+ isn't installed and there is no source package hook available either.
1009+ (LP: #417277)
1010+ * debian/local/ubuntu-bug: Accept .apport extension, too; thanks to Steve
1011+ Beattie! (LP: #401983)
1012+ * debian/local/apport-collect: Drop $APPORT_STAGING check, it's done by
1013+ launchpad.py itself now.
1014+
1015+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 03 Sep 2009 21:08:31 +0200
1016+
1017+apport (1.8-0ubuntu2) karmic; urgency=low
1018+
1019+ * apport/report.py: add upstream bzr 1538 commit:
1020+ - change to upstream glibc's __abort_msg variable name.
1021+ - filter out memory addresses when matching assert-bug duplicates.
1022+
1023+ -- Kees Cook <kees@ubuntu.com> Fri, 28 Aug 2009 12:47:14 -0700
1024+
1025+apport (1.8-0ubuntu1) karmic; urgency=low
1026+
1027+ * New upstream release:
1028+ - Do not generally ignore SIGABRT any more. Try to extract the assertion
1029+ message from the core dump, and add it as "AssertionMessage" field. Mark
1030+ reports as unreportable if they do not have an assertion message and crashed
1031+ with SIGABRT. This implements UbuntuSpec:security-karmic-apport-abort.
1032+ - report.py, add_hooks_info(): Add optional package/srcpackage argument. Hooks
1033+ can use that to change the affected package or call hooks from different
1034+ packages.
1035+ - KDE frontend implementation of ui_question_userpass(), for crash databases
1036+ which need to ask for credentials.
1037+ - hookutils.py: New funtion attach_wifi() to add wireless network related
1038+ information to reports.
1039+ - Fix the test suite on current kernels; test/crash previously often failed
1040+ with python segfaults, since it killed the test processes too early.
1041+
1042+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 26 Aug 2009 13:19:51 +0200
1043+
1044+apport (1.7-0ubuntu4) karmic; urgency=low
1045+
1046+ [ Colin Watson ]
1047+ * data/package-hooks/source_debian-installer.py: Report Ubiquity bugs
1048+ against the ubiquity source package, rather than rejecting them.
1049+
1050+ [ James Westby ]
1051+ * data/package-hooks/source_linux.py: submit oopses back if the user
1052+ accepts. Use the new kerneloops-submit to do it.
1053+ * bin/kernel_oops: kerneloops will now pass the checksum, so if it does
1054+ then base the report path on that to uniquify the reports.
1055+ * apport/fileutils.py: allow uid to be a string so that we can use
1056+ the checksum in place of the uid.
1057+
1058+ -- James Westby <james.westby@ubuntu.com> Tue, 25 Aug 2009 21:15:24 +0100
1059+
1060+apport (1.7-0ubuntu3) karmic; urgency=low
1061+
1062+ [ Colin Watson ]
1063+ * data/general-hooks/ubuntu.py: File update-grub bugs on grub2 instead of
1064+ grub if appropriate.
1065+ * apport/hookutils.py: Add command_available method, and use it to add
1066+ prtconf and pccardctl output if those commands are available.
1067+ * data/package-hooks/source_debian-installer.py: New hook, providing
1068+ roughly the same information as is provided by the 'report-hw' tool in
1069+ installation-report.
1070+
1071+ [ Matt Zimmerman ]
1072+ * apport/hookutils.py: Include modem-manager syslog messages in WifiSyslog
1073+ * data/general-hooks/ubuntu.py: Exclude bugs already aimed at grub2 from the
1074+ update-grub test (in support of Colin's change above)
1075+ * data/general-hooks/ubuntu.py: Redirect failures in /etc/kernel/*.d to the
1076+ package owning the file which failed
1077+ * Make sure that kernel crash dumps are marked as private in Launchpad
1078+ (LP: #417059)
1079+
1080+ -- Kees Cook <kees@ubuntu.com> Fri, 21 Aug 2009 11:32:06 -0700
1081+
1082+apport (1.7-0ubuntu2) karmic; urgency=low
1083+
1084+ [ Matt Zimmerman ]
1085+ * data/general-hooks/ubuntu.py: Detect when a kernel upgrade failure is
1086+ caused by update-grub failing, and file the bug on grub instead of linux
1087+ * data/general-hooks/ubuntu.py: Detect when a kernel upgrade failure is
1088+ caused by update-initramfs failing, and file the bug on initramfs-tools
1089+ instead of linux
1090+ * data/package-hooks/source_linux.py: Per discussion with ogasawara, attach
1091+ ALSA details on kernel bug reports by default. About 9% of sampled kernel
1092+ bugs are audio-related.
1093+ * data/package-hooks/source_linux.py: Add linux-firmware version to kernel
1094+ bug reports
1095+ * apport/hookutils.py: Add attach_wifi function with wifi-related debug info
1096+ * data/package-hooks/source_linux.py: Attach wifi info by default to kernel
1097+ bugs
1098+
1099+ [ Martin Pitt ]
1100+ * Merge trunk:
1101+ - report.py, add_hooks_info(): Add optional package/srcpackage argument.
1102+ - Implemented ui_question_userpass [Caio Romão].
1103+
1104+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 08 Aug 2009 12:20:39 +0200
1105+
1106+apport (1.7-0ubuntu1) karmic; urgency=low
1107+
1108+ * New upstream release:
1109+ - Add support for symptoms.
1110+ * debian/control: Recommend apport-symptoms.
1111+ * debian/local/ubuntu-bug: When called without arguments, run in "show
1112+ available symptoms" mode.
1113+
1114+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 05 Aug 2009 19:32:39 +0100
1115+
1116+apport (1.6-0ubuntu3) karmic; urgency=low
1117+
1118+ * Merge trunk:
1119+ - apport-gtk: Fix ordering of choices
1120+ - bin/package_hook: Fix crash for subdirectories in log dir. (LP: #332350)
1121+ - doc/package-hooks.txt: Document allowed chars in report keys.
1122+ - Show precise error message for damaged reports.
1123+ * ubuntu-bug: Call apport-kde instead of apport-qt.
1124+
1125+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 04 Aug 2009 18:50:26 +0100
1126+
1127+apport (1.6-0ubuntu2) karmic; urgency=low
1128+
1129+ * Re-enable Apport by default, for the alpha-3 release.
1130+
1131+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 21 Jul 2009 00:44:50 +0200
1132+
1133+apport (1.6-0ubuntu1) karmic; urgency=low
1134+
1135+ * New upstream release:
1136+ - Add support for kernel crashes, thanks to Michael Vogt!
1137+ - apport/ui.py, run_crash(): Do not re-collect information if we already
1138+ have a Dependencies field. This happens when calling apport on an already
1139+ pre-processed .crash file with -c. (LP: #394497)
1140+ - apport/hookutils.py, pci_devices(): Deliver all matching devices, not
1141+ just the last one. (LP: #398906)
1142+ - hookutils.py, _get_module_license(): Return "invalid" if modinfo fails,
1143+ so that they do not count as "free". (LP: #341720)
1144+ - packaging-apt-dpkg.py: Support additional custom native origins in
1145+ /etc/apport/native-origins.d/ . (LP: #386052)
1146+ - packaging-apt-dpkg.py: Drop PPA origin hack, launchpad behaves properly
1147+ now
1148+ - apport-gtk: Avoid focus stealing when being called without arguments (i.
1149+ e. auto-launched). LP: #396243)
1150+ - apport-kde: Use standard gettext again
1151+ - Fix handling of PC lacking disassembly due to invalid memory location.
1152+ * debian/local/apport-collect: Tag bugs with "apport-collected" on success.
1153+ (LP: #391392)
1154+
1155+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 15 Jul 2009 18:02:59 +0200
1156+
1157+apport (1.5-0ubuntu2) karmic; urgency=low
1158+
1159+ * Merge fixes from trunk:
1160+ - packaging-apt-dpkg.py: Fix install_retracing_packages() for pre-0.7.9
1161+ python-apt API.
1162+ - Sort the list of dependencies so it's easier to scan (LP: #391021)
1163+
1164+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 30 Jun 2009 22:39:18 +0200
1165+
1166+apport (1.5-0ubuntu1) karmic; urgency=low
1167+
1168+ * New upstream release:
1169+ - Drop all Makefiles, po/POTFILES.in, and most code from setup.py, and use
1170+ DistUtilsExtras.auto which "just does the right thing" for most build
1171+ system tasks. This requires python-distutils-extra >= 2.2, see
1172+ https://launchpad.net/python-distutils-extra
1173+ - Move all test scripts into test/, to unclutter source tree.
1174+ - setup.py now auto-detects the required packaging backend if
1175+ apport/packaging_impl.py is not manually installed.
1176+ * debian/control: Add python-distutils-extra build dependency.
1177+ * debian/rules: Drop stuff which is now properly done by the upstream build
1178+ system.
1179+ * Drop debian/apport.examples, preloadlib died long ago.
1180+ * Adapt debian/apport-{gtk,kde}.install to new upstream build system, which
1181+ now installs the .desktop files itself.
1182+
1183+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 29 Jun 2009 12:00:21 +0200
1184+
1185+apport (1.4-0ubuntu1) karmic; urgency=low
1186+
1187+ * New upstream release. Compared to our previous snapshot, this changes:
1188+ - Replace Qt4 frontend with KDE frontend, thanks to Richard Johnson!
1189+ - apport/ui.py, run_report_bug(): Clean up PID information collection.
1190+ - gtk/apport-gtk.ui: Drop invalid icon reference. (LP: #389064)
1191+ - ui.py: Do not reject non-distro package reports if report sets CrashDB
1192+ (for third-party destination). (LP: #391015)
1193+ - bin/kernel_crashdump: Use packaging API properly.
1194+ - apport-gtk.ui: Drop erroneous translatable flag from stock buttons.
1195+ - Update German translations.
1196+ * debian/*: qt → kde, add transitional package for apport-qt.
1197+ * Drop backends/packaging_rpm.py. We don't use it in the Ubuntu package at
1198+ all, and it's still in trunk.
1199+ * debian/rules: Drop some deprecated dh_* calls, cdbs's debhelper.mk has
1200+ done them for a long time.
1201+ * debian/control: Bump Standards-Version to 3.8.2 (no changes necessary).
1202+ * debian/control: Replace URLs in descriptions with proper Homepage: field.
1203+
1204+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 26 Jun 2009 10:44:54 +0200
1205+
1206+apport (1.3-0ubuntu2) karmic; urgency=low
1207+
1208+ * debian/local/apport-collect: Pass None as HookUI object. This will crash
1209+ with interactive hooks, but is a good enough immediate bandaid.
1210+ (LP: #385811)
1211+ * Merge fixes from trunk:
1212+ - packaging-apt-dpkg.py: Add backwards compatibility code for python-apt <
1213+ 0.7.9 to not break backportability.
1214+ - hookutils.py, command_output(): Force LC_MESSAGES=C, to avoid translated
1215+ output in bug reports. (LP: #383230)
1216+ - apport-gtk.ui: Make details window resizable, and lower default size, so
1217+ that it will fit on small screens. (LP: #365517)
1218+
1219+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 12 Jun 2009 12:47:59 +0200
1220+
1221+apport (1.3-0ubuntu1) karmic; urgency=low
1222+
1223+ * New upstream release. Compared to our bzr snapshot, this has:
1224+ - Interactive package hooks:
1225+ + Add apport.ui.HookUI class which provides GUI functionality such as
1226+ yes/no
1227+ questions or file dialogs to hooks.
1228+ + add_info() in package hooks now can (optionally) take a second argument
1229+ which is the HookUI instance.
1230+ + See doc/package-hooks.txt for details.
1231+ + See UbuntuSpec:desktop-karmic-symptom-based-bug-reporting
1232+ - New function apport.hookutils.root_command_output() to run a command as root,
1233+ through gksu/kdesudo/sudo, depending on the desktop environment.
1234+
1235+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 10 Jun 2009 16:49:13 +0200
1236+
1237+apport (1.2.1-0ubuntu3) karmic; urgency=low
1238+
1239+ * debian/control: Bump Standards-Version to 3.8.1 (no changes necessary).
1240+ * debian/control: Bump debhelper dependency for dh_icons, to satisfy
1241+ lintian.
1242+ * general-hooks/ubuntu.py: Fix IndexError crash if report does not have a
1243+ Package field. Check whether we actually have attach_conffiles() (which is
1244+ not the case when running the upstream version).
1245+ * Merge trunk:
1246+ - launchpad.py: Fix crash for unset titles.
1247+ - Add segfault analysis hook for quick segv reviews. Thanks to Kees Cook!
1248+ - run-tests: Replace hardcoded Python path with dynamically detected path.
1249+
1250+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 03 Jun 2009 09:52:03 +0200
1251+
1252+apport (1.2.1-0ubuntu2) karmic; urgency=low
1253+
1254+ * debian/control: Update Vcs-Bzr: for new location (moved from project
1255+ branch to package branch).
1256+ * Merge bug fixes from trunk:
1257+ - apport-cli: Fix report saving in "bug report" mode. (LP: #353253)
1258+ - Drop "UnsupportableReason" field, it is too similar to
1259+ UnreportableReason and just confusing.
1260+ - ui.py: Check UnreportableReason for run_report_bug() as well.
1261+ (LP: #361359)
1262+ - general-hooks/generic.py: Do not report problems with low free space on
1263+ / or /home. (LP: #381047)
1264+ - launchpad.py: Do not overwrite report['Title'].
1265+ - launchpad.py: Repair support for extra tags.
1266+ - New function apport.hookutils.root_command_output() to run a command as
1267+ root, through gksu/kdesudo/sudo, depending on the desktop environment.
1268+ (Part of UbuntuSpec:desktop-karmic-symptom-based-bug-reporting)
1269+ - launchpad.py: Fetch DpkgTerminalLog. (LP: #382589)
1270+ - launchpad.py: More robust download(), fixes other part of (LP: #382589)
1271+ - problem_report.py: Allow dashes and underscores in key names. Update
1272+ doc/data-format.tex accordingly. (LP: #380811)
1273+
1274+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 02 Jun 2009 11:59:41 +0200
1275+
1276+apport (1.2.1-0ubuntu1) karmic; urgency=low
1277+
1278+ * New upstream release:
1279+ - Moving away from deprecated APIs:
1280+ + packaging-apt-dpkg.py: Use python-apt >= 0.7.9 official API and drop
1281+ usage of internal symbols.
1282+ + hookutils.py: Drop hal related functions and queries, replace with
1283+ udev database, udev log file, and DMI information from sysfs.
1284+ + gtk UI: Convert from libglade to gtk.Builder.
1285+ - Bug fixes:
1286+ + hookutils.py: Drop /proc/version_signature collection, it is Ubuntu
1287+ specific.
1288+ + apportcheckresume: Fix log collection from pm-utils.
1289+ + Fix various crashes and report properties for reporting against
1290+ uninstalled packages.
1291+ * debian/control: Drop python-glade2 dependency, bump python-gtk2 dependency
1292+ to ensure availability of gtk.Builder.
1293+ * hookutils, attach_conffiles(): Remove leftover debugging spew.
1294+ * debian/apport-qt.install: Install the individual Qt .ui files instead of
1295+ *.ui, since GTK's are now also called *.ui.
1296+
1297+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 15 May 2009 11:28:34 +0200
1298+
1299+apport (1.1.1-0ubuntu2) karmic; urgency=low
1300+
1301+ [ Martin Pitt ]
1302+ * hookutils.py: Do not attach /proc/version_signature, it's Ubuntu specific.
1303+ (Merged from trunk). Instead, attach it in general-hooks/ubuntu.py.
1304+ * general-hooks/ubuntu.py: Attach package conffile information.
1305+ * debian/local/apport-collect: Add workaround for launchpadlib bug
1306+ LP#353805, to avoid crashing with non-UTF8 attachments. (LP: #368004)
1307+ * debian/local/apport-collect: Fix import of launchpadlib's HTTPError.
1308+ * apport/hookutils.py, attach_conffiles(): Ignore empty lines from
1309+ dpkg-query output.
1310+ * general-hooks/ubuntu.py: Strip off '/target' prefix from ExecutablePath
1311+ and InterpreterPath, to correctly process crash reports from the live
1312+ system installer.
1313+ * apport/hookutils.py, attach_conffiles(): Do not use command_output(),
1314+ since that causes error messages to get parsed as conffiles. Use
1315+ subprocess properly.
1316+ * backends/packaging-apt-dpkg.py: Replace deprecated python-apt properties
1317+ with current ones (merged from trunk). Update python-apt dependency to
1318+ >= 0.7.9.
1319+ * packaging-apt-dpkg.py, get_modified_files(): Do not show package list file
1320+ as modified if the package is not installed (merged from trunk).
1321+ (LP: #364533)
1322+ * backends/packaging-apt-dpkg.py, install_retracing_packages(): Fix syntax
1323+ error which broke the retracers.
1324+
1325+ [ Andy Whitcroft ]
1326+ * bin/apportcheckresume: the suspend _and_ hibernate logs are both in
1327+ pm-suspend.log.
1328+ * bin/apportcheckresume: remove redunant check for file before attaching
1329+ stress log.
1330+
1331+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 13 May 2009 15:22:53 +0200
1332+
1333+apport (1.1.1-0ubuntu1) karmic; urgency=low
1334+
1335+ [ Martin Pitt ]
1336+ * New upstream security update:
1337+ - etc/cron.daily/apport: Only attempt to remove files and symlinks, do not
1338+ descend into subdirectories of /var/crash/. Doing so might be exploited by
1339+ a race condition between find traversing a huge directory tree, changing
1340+ an existing subdir into a symlink to e. g. /etc/, and finally getting
1341+ that piped to rm. This also changes the find command to not use GNU
1342+ extensions. Thanks to Stephane Chazelas for discovering this!
1343+ (LP: #357024, CVE-2009-1295)
1344+ - Other fixes were already cherrypicked in the previous upload.
1345+
1346+ [ Matt Zimmerman ]
1347+ * package-hooks/source_linux.py: Attach info for linux-restricted-modules
1348+ and linux-backports-modules
1349+
1350+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 30 Apr 2009 09:08:29 +0200
1351+
1352+apport (1.1-0ubuntu1) karmic; urgency=low
1353+
1354+ * New upstream release:
1355+ - Drop some remaining distro specific pieces of code from non-backends.
1356+ - Add hookutils methods for attaching relevant packages, greatly improve
1357+ attach_alsa() for sound problem debugging.
1358+ - Move launchpad crash database implementation from ever-breaking
1359+ python-launchpad-bugs (screenscraping) to launchpadlib (official and
1360+ stable Launchpad API). (LP: #353879)
1361+ - Add new field Report.pid which gets set on add_proc_info() and can be
1362+ used by hooks.
1363+ - setup.py: Properly clean up all generated files, install missing
1364+ mimetypes/text-x-apport.svg icon symlink.
1365+ - Add README file.
1366+ - Add translations from Launchpad.
1367+ - Remove preloadlib/*; it's undermaintained, and not really useful any
1368+ more these days.
1369+ - Various bug fixes; most visible being the misnamed
1370+ etc/default/apport.default file (which should just be
1371+ etc/default/apport).
1372+ * Merge some bug fixes from trunk:
1373+ - launchpad.py: Send and read Date: field again, reverting r1128; it is
1374+ useful after all. (LP: #349139)
1375+ - report.py, add_proc_info(): Only add ProcAttrCurrent if it is not
1376+ "unconfined".
1377+ - ui.py: Detect invalid PIDs (such as for kernel processes) and give a
1378+ friendly error message. (LP: #360608)
1379+ - report.py, add_hooks_info(): Always run common hooks, and run source
1380+ package hooks if we do not have a binary package name. (LP: #350131)
1381+ - launchpad.py: Consider socket errors when connecting as transient, so
1382+ that crash-digger doesn't stop completely on them.
1383+ * Drop debian/apport.README.Debian, superseded by upstream README.
1384+ * Drop debian/apport.links, done by upstream setup.py now.
1385+ * debian/rules, debian/apport.preinst: Drop upgrade fix for misnamed default
1386+ file again, was only necessary for intra-Jaunty upgrades.
1387+ * debian/control: python-launchpad-bugs → python-launchpadlib dependencies.
1388+ * debian/local/apport-collect: Drop launchpadlib login code, just use the
1389+ CrashDatabase implementation from apport/crashdb_impl/launchpad.py.
1390+ * Make package backportable to hardy and intrepid:
1391+ - debian/control: Relax python-central buil-dependency to 0.5.6.
1392+ - debian/rules: Determine DH_PYCENTRAL value ("include-links" vs.
1393+ "nomove") based on the installed pycentral version.
1394+ - debian/rules: Only supply --install-layout=deb when Python version is
1395+ 2.6.
1396+ * apport/hookutils.py: Add docstring for attach_hardware, thanks Matt
1397+ Zimmerman! (Merged from lp:~mdz/apport/hookutils)
1398+ * apport/crashdb_impl/launchpad.py: Support older wadllib API
1399+ where bug.date_created was a string instead of a datetime object.
1400+ (Cherrypicked from trunk).
1401+ * debian/control: Drop apport dependency to python-xdg, it's not required.
1402+ (LP: #354172)
1403+ * debian/control: Drop gdb from Depends: to Recommends:. (LP: #354172)
1404+ * debian/local/apport-collect: Print a friendly error message instead of
1405+ crashing if the bug number is not an integer. (LP: #351050)
1406+ * debian/local/apport-collect: Change incomplete tasks back to "New" after
1407+ data collection. (LP: #363126)
1408+ * debian/apport.links: source_linux-meta.py -> source_linux.py package hook,
1409+ so that apport-collect works on "linux" source bug tasks. These get
1410+ opportunistically translated into binary packages, but the binary "linux"
1411+ is built by the source "linux-meta". (LP: #350131)
1412+ * debian/local/setup-apport-retracer:
1413+ - Use ports.ubuntu.com for non-{i386,amd64,lpia}.
1414+ - Set up Jaunty by default.
1415+ - Fix test for being in local unpackaged apport source tree.
1416+ - Drop installation of python-launchpad-bugs.
1417+ - Install bzr branches/packages necessary for launchpad, in a shared
1418+ ~/launchpadlib/ tree: launchpadlib, wadllib, oauth, lazr.uri, httplib2,
1419+ simplejson.
1420+ - Clean up apport-chroot calling for extra packages.
1421+
1422+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 28 Apr 2009 10:50:49 +0200
1423+
1424+apport (1.0-0ubuntu5) jaunty; urgency=low
1425+
1426+ [ Martin Pitt ]
1427+ * Rename etc/default/apport.default to etc/default/apport (brown paperbag),
1428+ and add debian/apport.preinst to remove the apport.default file on
1429+ upgrades. (LP: #361543)
1430+ * debian/rules: Call dh_installinit with --onlyscripts, so that the package
1431+ calls update-rc.d again. This fixes the calling of init script again,
1432+ which got broken in 1.0-0ubuntu1. (LP: #361579)
1433+
1434+ [ Matt Zimmerman ]
1435+ * package-hooks/source_linux.py: Attach /etc/initramfs-tools/conf.d/resume to
1436+ show the resume device for hibernation
1437+
1438+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 15 Apr 2009 22:36:33 +0200
1439+
1440+apport (1.0-0ubuntu4) jaunty; urgency=low
1441+
1442+ * etc/default/apport.default: Disable Apport by default for the final
1443+ release.
1444+
1445+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 14 Apr 2009 11:47:29 +0200
1446+
1447+apport (1.0-0ubuntu3) jaunty; urgency=low
1448+
1449+ * apport/hookutils.py: Factor out package_versions() to generate a simple
1450+ text listing of relevant package versions and use it in attach_printing()
1451+ * apport/hookutils.py: Add new function attach_relevant_packages() to attach
1452+ version information (and perhaps eventually run hooks?) for related
1453+ packages
1454+ * apport/hookutils.py: Add glob matching to package_versions()
1455+ * apport/hookutils.py: Add fuser info and dmesg to attach_alsa
1456+ * apport/hookutils.py: Add codec info to attach_alsa
1457+
1458+ -- Matt Zimmerman <mdz@ubuntu.com> Thu, 09 Apr 2009 07:36:45 -0700
1459+
1460+apport (1.0-0ubuntu2) jaunty; urgency=low
1461+
1462+ * backends/packaging-apt-dpkg.py: Add missing shutil import.
1463+ * debian/local/ubuntu-bug: Filter out -p and -P, for backwards calling
1464+ compatibility. (LP: #356755)
1465+
1466+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 23:04:39 -0700
1467+
1468+apport (1.0-0ubuntu1) jaunty; urgency=low
1469+
1470+ * Apport has a proper upstream trunk now (lp:apport) and made an 1.0
1471+ upstream release. Use this as an orig.tar.gz. This does not change any
1472+ code for Jaunty, just removes the Fedora/OpenSUSE specific .spec and init
1473+ scripts.
1474+ * Add bzr-builddeb configuration (merge mode).
1475+ * Add debian/watch for upstream releases on Launchpad.
1476+ * Drop debian/python-apport.postinst, obsolete for a long time.
1477+
1478+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 17:37:48 -0700
1479+
1480+apport (0.149) jaunty; urgency=low
1481+
1482+ Do some internal cleanup of distribution specific stuff:
1483+
1484+ * problem_report.py, man/apport-unpack.1: Fix description of .crash file
1485+ syntax (RFC822, not "Debian control").
1486+ * Move cron.daily, init script, and default file from debian/ to etc/, and
1487+ install them in setup.py. These files are appropriate for upstream
1488+ installation.
1489+ * Move crashdb.conf and doc/README.blacklist to etc/, to simplify setup.py.
1490+ * setup.py: Move *.mo generation/installation into my_install_data class,
1491+ for cleanliness.
1492+ * Move installation of missing packages for retracing from
1493+ bin/apport-retrace to new abstract interface apport/packaging.py,
1494+ install_retracing_packages() and remove_packages(), and move the apt/dpkg
1495+ code to backends/packaging-apt-dpkg.py. This removes a major piece of
1496+ apt/dpkg specific code from non-backends.
1497+ * bin/apport-retrace: Rename option --no-dpkg to --no-pkg and update
1498+ bin/apport-chroot accordingly.
1499+ * Move bin/apport-chroot and man/apport-chroot.1 to debian/local, since they
1500+ are totally Debian/Ubuntu specific.
1501+ * debian/local/setup-apport-retracer: Update apport-chroot and crashdb.conf
1502+ paths for above changes.
1503+ * apport/hookutils.py, files_in_package(): Replace dpkg-query call with
1504+ packaging.get_files(), to avoid Debianism.
1505+ * man/apport-retrace.1: Drop reference to "apt", simply talk about package
1506+ installation.
1507+
1508+ Bug fixes:
1509+
1510+ * setup.py: Fix homepage URL.
1511+ * debian/local/apport-chroot: If multiple distro IDs point to the same
1512+ chroot, do not upgrade them more than once with "upgrade all".
1513+
1514+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 16:06:33 -0700
1515+
1516+apport (0.148) jaunty; urgency=low
1517+
1518+ [ Matt Zimmerman ]
1519+ * apport/hookutils.py: add attach_media_build to include information about
1520+ the build of installation media in use (i.e. in a casper live CD
1521+ environment)
1522+ * general-hooks/ubuntu.py: use attach_media_build (LP: #351781)
1523+ * bin/apportcheckresume: Use attach_file_if_exists rather than attach_file to
1524+ avoid spurious error messages about non-existent log files (LP: #351973)
1525+
1526+ [ Martin Pitt ]
1527+ * debian/local/ubuntu-bug: Drop generic passthrough of apport-{cli,gtk,kde}
1528+ options since this leads to too much confusion. Instead just support a
1529+ single argument and check whether it is a pid, a package name, a .crash
1530+ file, or a program path. This does the right thing when calling it with a
1531+ .crash file (LP: #347392) and fixes the help output (LP: #344923) Update
1532+ manpage accordingly.
1533+ * apport/hookutils.py: Move attach_media_build() to
1534+ general-hooks/ubuntu.py, since it is Ubuntu specific.
1535+ * bin/apport-retrace: Fix KeyError crash on bugs with an ExecutablePath
1536+ which does not exist any more. Close the bug as invalid instead.
1537+ (LP: #352331)
1538+ * bin/kernel_oops: Add "kernel-oops" tag. Since both bin/kernel_oops and
1539+ bin/apportcheckresume use the "kerneloops" bug class, it previously was
1540+ hard to filter out the bug reports which were real oopses. (LP: #349621)
1541+
1542+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 01 Apr 2009 18:10:01 +0200
1543+
1544+apport (0.147) jaunty; urgency=low
1545+
1546+ * bin/apportcheckresume: report the pm-suspend.log/pm-hibernate.log
1547+ from /var/lib.
1548+ * bin/apportcheckresume: only attempt to attach the stress log if its is
1549+ present.
1550+ * bin/apportcheckresume, debian/apport.init: add detection for late
1551+ resume hangs, those where the user thinks the system was working.
1552+ (LP: #335323)
1553+
1554+ -- Andy Whitcroft <apw@canonical.com> Mon, 30 Mar 2009 09:47:28 +0200
1555+
1556+apport (0.146) jaunty; urgency=low
1557+
1558+ * apport/report.py, _generate_sigsegv_report(): Turn into a class method, so
1559+ that it can be used by test cases in other modules as well. Also add
1560+ missing Signal field.
1561+ * apport/crashdb_impl/launchpad.py: Fully enable operation with
1562+ staging.launchpad.net.
1563+ * apport/crashdb_impl/launchpad.py: Add initial test suite, performing data
1564+ upload, Python and SEGV bug reporting, report download, report updating,
1565+ tag and duplicate handling. This happens on staging.launchpad.net.
1566+ * apport/crashdb.py: Add new interface duplicate_of(id) to return the master
1567+ bug of a duplicate. Also document that close_duplicate() with "None"
1568+ master bug will un-duplicate the bug.
1569+ * apport/crashdb_impl/{launchpad,memory}.py: Implement duplicate_of() and
1570+ add test cases. The Launchpad test case reproduces the
1571+ "duplicate-of-a-duplicate" regression, which now got fixed in
1572+ python-launchpad-bugs bzr head.
1573+ * apport/ui.py, open_url(): Also consider a sesssion as "GNOME" if gconfd-2
1574+ is running; some variants such as UNR do not have gnome-panel; this fixes
1575+ using the preferred browser for them. (LP: #322386)
1576+ * debian/local/apport-collect: Add new option -p to explicitly specify a
1577+ (binary) package name instead of guesstimating it from the bug's source
1578+ package tasks. Document new option in debian/local/apport-collect.1.
1579+ (LP: #333875)
1580+ * apport/crashdb.py, duplicate_db_consolidate(): Add logging about removing
1581+ invalidated bugs from the duplicate database, now that this actually
1582+ works.
1583+ * debian/local/ubuntu-bug.1: Update for the possibility to specify a package
1584+ name or PID without any options. Also document the "ubuntu-bug linux"
1585+ special case. (LP: #348985)
1586+ * debian/local/ubuntu-bug.1: Add missing documentation of the case of
1587+ specifying a path name.
1588+ * backends/packaging-apt-dpkg.py: When unpacking source trees, try
1589+ "debian/rules setup" last, since it is the least common variant.
1590+ * debian/local/ubuntu-fat-chroot: Divert away
1591+ /usr/lib/xulrunner-1.9.1b3/xulrunner-bin. It is called on debian/rules
1592+ patch in xulrunner-1.9.1 and hangs eternally in the fakechroots. This is
1593+ only a temporary kludge, though, until the next xulrunner version lands.
1594+ * apport/crashdb_impl/launchpad.py: Add test case: Update a bug report which
1595+ got marked as a duplicate during processing. This reproduces #349407.
1596+ * apport/crashdb_impl/launchpad.py, update(): Intercept and ignore IOErrors
1597+ when changing the bug priority. This happens if a bug gets duplicated
1598+ underneath us. (LP: #349407)
1599+ * apport/crashdb.py, get_crashdb(): Print syntax errors from parsing
1600+ conf.d/*.conf to stderr.
1601+ * apport/crashdb_impl/launchpad.py: Support new CrashDB option "project"
1602+ which can be set to a LP project name to file bugs against that project
1603+ instead of the distribution. Add test case for filing crash bug against a
1604+ project, updating it, duplicating/unduplicating it, and determining fixed
1605+ version. (LP: #338835)
1606+ * bin/crash-digger: If apport-retrace exits with 99, consider it a transient
1607+ error and just stop the retracer, but don't leave the lock file behind.
1608+ Add appropriate test case to test-crash-digger.
1609+ * bin/apport-retrace: If apt update fails due to a "hash sum mismatch", exit
1610+ with a "transient error" code, to stop (but not break) the retracing
1611+ cycle.
1612+
1613+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 27 Mar 2009 17:01:08 +0100
1614+
1615+apport (0.145) jaunty; urgency=low
1616+
1617+ * apport/crashdb_impl/launchpad.py: Fix typo in previous upload.
1618+ * debian/local/apport-collect: Do not crash on
1619+ launchpadlib.errors.HTTPError, but give a proper error message and point
1620+ out that this script needs "change anything" privileges. (LP: #338201)
1621+ * apport_python_hook.py: Fix crash for already existing reports, and make
1622+ behaviour equivalent to bin/apport: Silently exit for existing unseen
1623+ crash report, and overwrite existing seen crash report. Add test cases.
1624+ (LP: #323714)
1625+ * general-hooks/automatix.py: Refuse to send bug reports when ultamatix is
1626+ installed.
1627+
1628+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Mar 2009 18:45:34 +0100
1629+
1630+apport (0.144) jaunty; urgency=low
1631+
1632+ * apport/crashdb_impl/launchpad.py, mark_retrace_failed(): If report is
1633+ invalid, remove CoreDump.gz and other attachments.
1634+ * bin/apport-retrace: If we didn't find the ExecutablePath on the system
1635+ because the package is out of date, don't crash, but close the bug as
1636+ invalid.
1637+
1638+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Mar 2009 10:45:56 +0100
1639+
1640+apport (0.143) jaunty; urgency=low
1641+
1642+ * debian/apport.README.Debian: Document how to temporarily and permanently
1643+ enable crash interception.
1644+ * backends/packaging-apt-dpkg.py, is_distro_package(): Do not consider a
1645+ package a native distro one if installed version is "None". This happens
1646+ with some PPA packages. (LP: #252734)
1647+ * apport/report.py, anonymize(): Move user name anonymization into the
1648+ "non-root" case as well; fixes uninitialized variable. (LP: #338847)
1649+
1650+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 09 Mar 2009 12:16:49 +0100
1651+
1652+apport (0.142) jaunty; urgency=low
1653+
1654+ * apport/report.py: Do not include lsb_release's stderr in the
1655+ DistroRelease: output.
1656+ * apport/hookutils.py: Fix attach_printing():
1657+ - Correct spelling or "error_log".
1658+ - Do not call fgrep with no file names (if /etc/cups/ppd/ is empty), since
1659+ that hangs forever.
1660+ * apport/report.py, _gen_stacktrace_top(): Fix parsing of stacktraces
1661+ with some addresses missing. Add test cases. (LP: #269133)
1662+ * apport/ui.py, run_report_bug(): Show details of collected information and
1663+ give the user a chance to cancel. Previously, collected data was sent
1664+ directly to Launchpad. Nowadays lots of packages have hooks, so we cannot
1665+ guarantee any more that bug reports only have non-sensitive information.
1666+ (LP: #195514) This also allows the user to cancel if (s)he inadvertedly
1667+ clicked on "Report a problem". (LP: #279033)
1668+ * apport/ui.py: Fix crash in get_complete_size() for reports that are
1669+ constructed on the fly instead of loaded from a file (i. e. for bug
1670+ reports). Fixes displaying of report in apport-cli.
1671+ * apport/report.py: Slight robustification of test_add_gdb_info_script()
1672+ test case.
1673+ * debian/local/ubuntu-bug: Fix invocation with "--help". (LP: #305841)
1674+ * apport/ui.py, load_report(): Clearer error message if report file does not
1675+ exist. (LP: #204198)
1676+ * Remove redundant verbiage from test suite docstrings.
1677+ * apport/report.py, anonymize(): Fix crash when processing root-owned
1678+ reports. (LP: #338033)
1679+ * apport/report.py, anonymize(): Do not anonymize single-character user and
1680+ host names, since they create an utter mess in bug reports, and also are
1681+ very low-sensitive.
1682+ * debian/apport.init: Also start apport if force_start=1 is given. This
1683+ provides a convenient method of starting apport just for a session without
1684+ changing the default file. Add a comment to debian/apport.default about
1685+ this possibility. Thanks to Milan for the suggestion and the initial
1686+ patch! (LP: #320467)
1687+ * backends/packaging-apt-dpkg.py, _get_mirror(): Only consider http://
1688+ mirrors for fetching Contents.gz. (LP: #315797)
1689+
1690+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 05 Mar 2009 17:01:05 +0100
1691+
1692+apport (0.141) jaunty; urgency=low
1693+
1694+ * apport/hookutils.py: Add cups error log to attach_printing()
1695+
1696+ -- Brian Murray <brian@ubuntu.com> Mon, 02 Mar 2009 10:55:53 -0800
1697+
1698+apport (0.140) jaunty; urgency=low
1699+
1700+ * debian/python-{apport,problem-report}.install: Fix site-packages →
1701+ *-packages.
1702+ * run-tests: Only check for local packaging_impl.py if running local tests.
1703+ This unbreaks running tests from /usr/share/apport/testsuite/.
1704+
1705+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Mar 2009 11:56:59 +0100
1706+
1707+apport (0.139) jaunty; urgency=low
1708+
1709+ * apport/report.py, anonymize(): Do not anonymize "root". (Side
1710+ issue in LP #333542)
1711+ * debian/rules: Supply --install-layout=deb to setup.py.
1712+ * debian/local/apport-collect: Attach new info to
1713+ staging.launchpad.net if $APPORT_STAGING is defined. This makes
1714+ testing easier. Describe in debian/local/apport-collect.1.
1715+ * debian/local/apport-collect: Ignore ValueErrors from
1716+ add_package_info(), which happens if the bug has a source package
1717+ task which does not have an identically named binary package name.
1718+ Slightly ugly, but it's nontrivial to do that in a sensible
1719+ manner; let's just fix the crash for now, since the focus of this
1720+ tool is to collect information from hooks. (LP: #334823)
1721+ * apport/hookutils.py, hal_dump_udi(): Filter out serial numbers.
1722+ (Mentioned in LP #107103)
1723+
1724+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Mar 2009 11:36:18 +0100
1725+
1726+apport (0.138) jaunty; urgency=low
1727+
1728+ * apport/crashdb_impl/launchpad.py: Consider an useful stack trace
1729+ sufficient for automatically removing the core dump, it doesn't
1730+ need to be perfect. This is in accordance with not setting the
1731+ apport-failed-retrace tag for useful, but non-perfect retraces any
1732+ more.
1733+ * apport/hookutils.py, backends/packaging_rpm.py: Convert usage of
1734+ md5 module (which is deprecated in 2.6) to hashlib.
1735+ * Replace all instances of using an exception's .message attribute
1736+ with str(exception), since message is deprecated in Python 2.6.
1737+ * apport/hookutils.py: Add attach_printing(). Thanks to Brian Murray
1738+ for the initial patch! (LP: #333582)
1739+
1740+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Feb 2009 22:24:31 +0100
1741+
1742+apport (0.137) jaunty; urgency=low
1743+
1744+ * Set python-version to all, include symlinks in the package.
1745+
1746+ -- Matthias Klose <doko@ubuntu.com> Tue, 24 Feb 2009 21:22:36 +0100
1747+
1748+apport (0.136) jaunty; urgency=low
1749+
1750+ [ Andy Whitcroft ]
1751+ * bin/apportcheckresume: remove originator in suspend/hibernate/resume
1752+ reporting. This was intended for debugging only and is now redundant.
1753+ * bin/apportcheckresume, apport/report.py: when collecting resume failures
1754+ in very early boot hal may not be running and we thus unable to obtain
1755+ the machine type information. Move title generation to the reporting
1756+ engine.
1757+
1758+ [ Martin Pitt ]
1759+ * debian/local/apport-collect: Add user environment information, too
1760+ (LANG, PATH, SHELL). (LP: #332578)
1761+
1762+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Feb 2009 14:25:21 +0100
1763+
1764+apport (0.135) jaunty; urgency=low
1765+
1766+ * problem_report.py, test_write_mime_text(): Add test cases for
1767+ single-line and two-line UTF-8 values, single-line and two-line
1768+ Unicode values and a single-line LF-terminated value. Fix handling
1769+ of the latter two.
1770+ * problem_report.py, test_write(): Add test cases for single-line
1771+ and two-line UTF-8 and Unicode values, and fix handling of these
1772+ in write().
1773+ * debian/local/apport-collect: Collect package, OS, and user
1774+ information as well. (LP: #332578)
1775+ * package-hooks/source_apport.py: Robustify by using hookutils, and
1776+ avoid stat errors if /var/crash/* does not exist.
1777+ * test-hooks: Update dodgy test for uninstalled package,
1778+ libdb4.3-tcl is not available in Jaunty any more.
1779+
1780+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 23 Feb 2009 13:14:24 +0100
1781+
1782+apport (0.134) jaunty; urgency=low
1783+
1784+ * debian/local/apport-collect: Do not collect information for closed
1785+ tasks. Thanks for Brian Murray for the initial patch! (LP: #331839)
1786+ * apport/crashdb_impl/launchpad.py, download(): Download
1787+ DpkgTerminalLog.txt attachment as well.
1788+ * apport/report.py: If downloading a nonexisting bug pattern file
1789+ name succeeds and returns a HTML snippet with "404 Not Found",
1790+ consider this as failure. This repairs falling back to source
1791+ package names. (LP: #328751)
1792+ * apport/hookutils.py: Replace tabs with spaces.
1793+
1794+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 20 Feb 2009 11:22:15 +0100
1795+
1796+apport (0.133) jaunty; urgency=low
1797+
1798+ [ Andy Whitcroft ]
1799+ * apport/hookutils.py: define and include a machine type from the hardware
1800+ information in the report, using HAL information where available.
1801+ * bin/apportcheckresume: include the machine type in the suspend/hibernate
1802+ report title. They are generally machine specific.
1803+
1804+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 19 Feb 2009 17:49:03 +0100
1805+
1806+apport (0.132) jaunty; urgency=low
1807+
1808+ [ Martin Pitt ]
1809+ * Add debian/local/apport-collect: Download a Launchpad bug report,
1810+ get its source package, check if it has apport hooks, and if so,
1811+ run and upload them. Add manpage, too. (LP: #124338)
1812+ * debian/control: Add Suggests: python-launchpadlib; this is only
1813+ needed by apport-collect, thus we don't need to pull that into
1814+ every default installation; if it's not installed apport-collect
1815+ will detect and point this out.
1816+ * debian/control: Add ${misc:Depends} dependencies.
1817+
1818+ [ Jonathan Riddell ]
1819+ * Set window icon in apport-qt
1820+
1821+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 19 Feb 2009 13:50:34 +0100
1822+
1823+apport (0.131) jaunty; urgency=low
1824+
1825+ [ Andy Whitcroft ]
1826+ * bin/apportcheckresume, bin/kernel_oops, cli/apport-cli, gtk/apport-gtk,
1827+ gtk/apport-gtk.glade, qt4/apport-qt: generalised the KernelOops
1828+ dialog and handling to allow suspend and hibernate failures present
1829+ more accurate reasons for the report. Also commonises all messages
1830+ in the three implementations to simplify internationalisation.
1831+
1832+ [ Martin Pitt ]
1833+ * po/Makefile: Fix merge-po rule to actually work again.
1834+ * cli/apport-cli, qt4/apport-qt: Unify string with apport-gtk.
1835+ * apport/ui.py: Drop some bogus translatable strings.
1836+ * Update German translations.
1837+
1838+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 16 Feb 2009 19:31:41 +0100
1839+
1840+apport (0.130) jaunty; urgency=low
1841+
1842+ [ Martin Pitt ]
1843+ * bin/kernel_crashdump: Don't crash if vmcore.log does not exist.
1844+ * crashdb_impl/launchpad.py: Tag bugs with the architecture they are
1845+ being reported on.
1846+ * bin/crash-digger: Revert catching "database is locked" errors
1847+ during consolidation, since it just hides more fundamental errors.
1848+ * apport/crashdb_impl/memory.py: Improve docstrings of test suite.
1849+ * bin/apport-retrace: Do not try to install -dbgsym packages with
1850+ nonmatching versions, unless --unpack-only is used. Thanks to
1851+ hggdh for the initial patch! (LP: #309208)
1852+
1853+ [ Andy Whitcroft ]
1854+ * bin/apportcheckresume: modify the oops title and thereby the launchpad
1855+ bug title to say suspend or hibernate.
1856+ * bin/apportcheckresume: modify the tags to bin/apportcheckresume:
1857+ modify the oops title and thereby the launchpad be resume+suspend or
1858+ resume+hibernate as appropriate.
1859+ * bin/apportcheckresume: include any non-free modules in the bug title.
1860+
1861+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 12 Feb 2009 22:09:35 +0100
1862+
1863+apport (0.129) jaunty; urgency=low
1864+
1865+ * bin/apport-retrace: Log broken reports.
1866+ * bin/apport-retrace: Do not mark bugs as invalid after they are
1867+ already marked as a duplicate, since that does not work in
1868+ Launchpad.
1869+ * debian/local/ubuntu-fat-chroot: Symlink /target -> /, to work
1870+ for crashes which appear in /target during installation.
1871+ * bin/apport: Move argv length/usage help before lock check, so that
1872+ it works if the user cannot lock /var/crash/.lock. Thanks to Kees
1873+ Cook!
1874+ * doc/package-hooks.txt: Point out apport.hookutils.
1875+ * apport/ui.py: Check environment variable APPORT_REPORT_THIRDPARTY
1876+ in addition to the 'thirdparty' configuration file option for
1877+ overriding the "genuine distro package" check. Thanks to Oumar
1878+ Aziz OUATTARA!
1879+ * apport/crashdb_impl/launchpad.py: In third-party mode, report bugs
1880+ against Launchpad projects. Thanks to Oumar
1881+ Aziz OUATTARA for his branch! (LP: #213454)
1882+ * bin/apportcheckresume: Include /var/lib/pm-utils/stress.log, too.
1883+ Thanks to Andy Whitcroft for the initial patch, rewrote to use
1884+ apport.hookutils.
1885+ * apport/crashdb.py, init_duplicate_db(): Run an integrity check and
1886+ raise exception if it fails, to avoid running the retracers on a
1887+ corrupt duplicate db. Add test case to
1888+ apport/crashdb_impl/memory.py.
1889+ * bin/crash-digger: Create a backup of the duplicates database right
1890+ after initializing it (which verifies integrity).
1891+ * dupdb-admin: Add new command "consolidate".
1892+ * apport/crashdb_impl/launchpad.py: Request bug lists with batch
1893+ size 300, for slight speedup of consolidation.
1894+ * apport/crashdb.py, duplicate_db_consolidate(): Warn about a bug
1895+ which is not yet fixed, but does not appear in get_unfixed(). In
1896+ Launchpad, this means that the bug does not have the
1897+ 'apport-crash' tag any more; if there are many, those would be a
1898+ huge time/bandwidth waste.
1899+
1900+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Jan 2009 16:04:16 +0100
1901+
1902+apport (0.128) jaunty; urgency=low
1903+
1904+ * apport/ui.py: Introduce new configuration option "thirdparty" and
1905+ ignore the is_distro_package() check if it is set to true.
1906+ * bin/apport-retrace: Call Cache.open() after Cache.update().
1907+ * bin/apport-retrace: If downloading a report fails (e. g. the
1908+ description was invalidly modified), mark the bug as invalid with
1909+ a proper explanation instead of crashing, unless we are in
1910+ "stdout" or "output file" mode.
1911+ * apport/crashdb_impl/launchpad.py: Apply some heuristics to attempt
1912+ recovering broken descriptions as in LP #315728 (intermediate
1913+ blank lines, and non-apport data append).
1914+
1915+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Jan 2009 17:49:55 +0100
1916+
1917+apport (0.127) jaunty; urgency=low
1918+
1919+ * bin/apportcheckresume, debian/apport.init: integrate with pm-utils to
1920+ detect suspend/resume failures. Thanks to Steve Conklin and Andy
1921+ Whitcroft. LP: #316419.
1922+
1923+ -- Steve Langasek <steve.langasek@ubuntu.com> Tue, 13 Jan 2009 12:54:12 -0800
1924+
1925+apport (0.126) jaunty; urgency=low
1926+
1927+ * bin/apport-chroot: If --auth is specified in "login" mode, symlink
1928+ the file into /tmp/auth in the fakechroot. This makes it much
1929+ easier to interactively debug retracing.
1930+ * bin/apport-retrace: Exit with zero for bugs which do not have a
1931+ core dump, so that it does not completely stop the retracers.
1932+
1933+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Jan 2009 22:49:48 +0100
1934+
1935+apport (0.125) jaunty; urgency=low
1936+
1937+ * bin/apport-chroot: Exit with apport-retraces' exit status, to
1938+ propagate errors upwards to crash-digger.
1939+ * bin/apport-retrace: Do not put outdated -dbgsym comments into the
1940+ bug comments.
1941+ * Rewrite bin/crash-digger to become much more robust and easier for
1942+ retracer maintainers:
1943+ - Now designed around cron-based maintenance: start, process all
1944+ pending bugs, exit. This makes memory leaks irrelevant, and gets
1945+ rid of all the logging, daemonizing, and looping code.
1946+ - Adapt stdout/stderr reporting to be suitable for cron and
1947+ redirecting stdout to a log file.
1948+ - Use lock files to avoid overlapping instances and avoid damaging
1949+ bugs with broken retracers after crash-digger failed.
1950+ - Handle chroot upgrading, so that this does not need separate
1951+ cronjobs any more.
1952+ - Drop old -i option, replace with -D/--dupcheck which is a mode
1953+ which *only* checks duplicates of Python crashes (no fakechroot
1954+ handling).
1955+ - Mark bug as retraced after apport-chroot retrace finished
1956+ successfully; the process is robust enough now to avoid enless
1957+ loops even if retracing fails.
1958+ - Adapt test-crash-digger accordingly.
1959+ - UbuntuSpec:apport-retracer-maintenance
1960+
1961+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Jan 2009 12:14:44 +0100
1962+
1963+apport (0.124) jaunty; urgency=low
1964+
1965+ * debian/local/ubuntu-fat-chroot: Divert touch to touch.real and
1966+ wrap it into a shell wrapper which ignores failures. Some packages
1967+ use "touch -m" which fails with EPERM on directories under
1968+ fakechroot. Also disable gconf-schemas and polkit-auth, since they
1969+ do not work in fakechroots.
1970+ * apport/crashdb_impl/launchpad.py: Allow using staging for testing.
1971+ * apport/crashdb.py, mark_retrace_failed(): Add new optional
1972+ argument "invalid_msg", intended for crashes which cannot be
1973+ retraced properly (e. g. due to outdated packages). Implement this
1974+ in apport/crashdb_impl/launchpad.py.
1975+ * bin/apport-retrace: If we do not have an usable stack trace, and
1976+ encounter outdated package versions in the crash, close the report
1977+ as invalid with an appropriate comment. (LP: #308917)
1978+ * bin/apport-retrace: Update the apt cache before looking for, and
1979+ installing packages. (Part of UbuntuSpec:apport-retracer-maintenance)
1980+ * debian/apport.default: Enable by default again for Jaunty. Let the
1981+ flood begin!
1982+
1983+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 08 Jan 2009 14:05:07 +0100
1984+
1985+apport (0.123) jaunty; urgency=low
1986+
1987+ * bin/apport: Do not write the report into the log file if opening
1988+ the report file failed; just log the error.
1989+ * bin/apport: Remove a previously seen report file, so that the
1990+ following creation with O_EXCL actually works.
1991+ * apport/report.py, add_proc_info(): Only try to attach
1992+ /proc/pid/attr/current if we are root. This works around Python
1993+ segfaulting regression when encountering EPERM on read() (see
1994+ LP #314065).
1995+ * apport/report.py testsuite: Use "isofs" for module license check
1996+ testing instead of "usbcore", since the latter is more likely to
1997+ get built into the kernel.
1998+ * apport/report.py, add_proc_environ(): Use "PATH=(...)" instead of
1999+ "PATH: ..." notation, to be consistent with other environment
2000+ variables. Unbreaks the apport test suite.
2001+
2002+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 05 Jan 2009 18:05:38 +0100
2003+
2004+apport (0.122) jaunty; urgency=low
2005+
2006+ * apport/crashdb_impl/launchpad.py: Support extra tags in the
2007+ report's "Tags:" field, and set them in the Launchpad bug.
2008+ Document this in doc/data-format.tex. Thanks to Steve Conklin for
2009+ the patch!
2010+
2011+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 05 Jan 2009 10:06:49 +0100
2012+
2013+apport (0.121) jaunty; urgency=low
2014+
2015+ * debian/apport.init: Drop long obsolete setting of
2016+ /proc/sys/kernel/crashdump-size.
2017+ * debian/apport.init: Make restart actually work if the default file was
2018+ changed. (LP: #292402)
2019+ * apport/report.py, add_proc_environ(): Do not include verbatim $PATH, only
2020+ classify it as "default" (does not appear at all then), "custom,
2021+ user" (/home or /tmp in $PATH), or "custom, no user". Add appropriate test
2022+ case. Update the data format documentation accordingly. (LP: #245263)
2023+
2024+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 08 Dec 2008 19:37:53 -0800
2025+
2026+apport (0.120) jaunty; urgency=low
2027+
2028+ * man/apport-cli.1: Fix "sytem" typo. (LP: #288977)
2029+ * apport/fileutils.py: Add new function get_options() to read
2030+ ~/.config/apport/settings. In the future, the apport-ignore.xml file will
2031+ move to this directory, too. Based on idea and initial patch from Nikolay
2032+ Derkach.
2033+ * bin/apport: Check config option "unpackaged", and if it is set to True,
2034+ create a crash dump for unpackaged programs, too. Bump apport package
2035+ dependency to python-apport for this.
2036+ * apport/ui.py: Fix regression introduced in in 0.115 for checking
2037+ successful package name determination.
2038+ * apport/report.py: Some distro portability fixes in the test suite, thanks
2039+ to Nikolay Derkach!
2040+ * Add OpenSUSE spec file, init script, and RPM packaging backend. Thanks to
2041+ Nikolay Derkach!
2042+ * apport_python_hook.py, bin/apport: Create files in a race free way to
2043+ avoid symlink attacks. Thanks to Sebastian Kramer <krahmer@novell.com> for
2044+ finding them!
2045+ * problem_report.py test suite: Create debugging leftover which left /tmp/r
2046+ behind.
2047+ * apport/crashdb_impl/memory.py: Use example.com, not bug.net, since the
2048+ latter actually exists now.
2049+ * apport/hookutils.py: Add attach_network(), attach_alsa(), and
2050+ attach_hardware(), and add proper docstrings. Thanks to Matt Zimmerman for
2051+ the branch!
2052+ * source_linux.py hook: Use above tool functions, which greatly simplifies
2053+ the hook.
2054+ * apport/report.py: Also print exceptions from binary and source package
2055+ hooks, not just from common ones.
2056+ * apport/report.py, add_hooks_info(): Do not print an error if a source
2057+ package hook does not exist.
2058+ * apport/hookutils.py, _parse_gconf_schema(): Correctly handle bool values.
2059+
2060+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 26 Nov 2008 19:24:23 +0100
2061+
2062+apport (0.119) intrepid; urgency=low
2063+
2064+ * debian/apport.default: Disable Apport by default for the final release.
2065+
2066+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 23 Oct 2008 09:34:41 +0200
2067+
2068+apport (0.118) intrepid; urgency=low
2069+
2070+ * apport/hookutils.py: add attach_gconf() function to add non-default gconf
2071+ settings to a report
2072+
2073+ -- Matt Zimmerman <mdz@ubuntu.com> Mon, 13 Oct 2008 20:10:33 +0100
2074+
2075+apport (0.117) intrepid; urgency=low
2076+
2077+ * backends/packaging-apt-dpkg.py, is_distro_package(): Fix crash if
2078+ apt.Cache()[pkg].origins is None. (LP: #279353)
2079+ * bin/apport: Log that we are ignoring SIGABRT, since it is a common cause
2080+ of confusion.
2081+ * test-apport, create_test_process(): Fix race condition: wait until the
2082+ child process has fully execve()ed, to avoid coredumping it while it is
2083+ still running as test-apport process.
2084+ * apport/crashdb_impl/launchpad.py, update(): Set source package of a bug if
2085+ the reporter removed it and the task is against 'Ubuntu'. (LP: #269045)
2086+
2087+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 07 Oct 2008 16:38:06 +0200
2088+
2089+apport (0.116) intrepid; urgency=low
2090+
2091+ * Update AUTHORS and debian/copyright, Michael and Troy released their
2092+ copyright to Canonical. Properly attribute them as authors in the
2093+ respective files.
2094+ * debian/local/ubuntu-bug: Fix quoting of the command line arguments, so
2095+ that several options do not end up as one big argument when being passed
2096+ to apport-{cli,gtk,qt}. This also repairs launchpad-integration.
2097+ (LP: #260242)
2098+
2099+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 26 Sep 2008 10:32:45 +0200
2100+
2101+apport (0.115) intrepid; urgency=low
2102+
2103+ [ Matt Zimmerman ]
2104+ * Add apport/hookutils.py with some convenience functions for writing hook
2105+ scripts (work in progress)
2106+ * Extend ubuntu-bug to accept a path as an argument and look up the package
2107+ name
2108+ * Rename kernel_hook to kernel_crashdump (there are other kernel hooks)
2109+ * Change kernel crash report type to KernelCrash
2110+ * Fix automatix.py to not crash when automatix isn't installed (LP: #267004)
2111+ * Add bin/kernel_oops hook to capture a kernel oops (eg. via kerneloops)
2112+
2113+ [ Martin Pitt ]
2114+ * Add AUTHORS file for collecting the list of major contributors and
2115+ copyright holders.
2116+ * apport/report.py: If we do not find a bug pattern file for the binary
2117+ package, fall back to looking for one with the source package name.
2118+ * run-tests: Provide a better error message if apport/packaging_impl.py does
2119+ not exist.
2120+
2121+ [ Brian Murray ]
2122+ * apport/crashdb_impl/launchpad.py: Add regression-retracer tag to bugs
2123+ which seem to be a regression (duplicate, and crash happens in a later
2124+ version than the fix). (LP: #271876)
2125+
2126+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 18 Sep 2008 18:18:03 -0700
2127+
2128+apport (0.114) intrepid; urgency=low
2129+
2130+ [ Fabien Tassin ]
2131+ * apport/ui.py: Use preferred browser when it's recognized as a
2132+ Mozilla browser (firefox, seamonkey, flock) or Epiphany (LP: #131350)
2133+
2134+ [ Oumar Aziz OUATTARA ]
2135+ * apport/crashdb.py: Add support for /etc/apport/crashdb.conf.d/*.conf crash
2136+ database configuration files. Document it in doc/crashdb-conf.txt.
2137+ * apport/ui.py: Support a new field "CrashDB" in apport reports which select
2138+ a non-default crash database. Document this in doc/package-hooks.txt.
2139+
2140+ [ Martin Pitt ]
2141+ * apport/report.py: If a hook crashes with an exception, print it to
2142+ stderr, for easier debugging of hooks.
2143+ * apport/crashdb_impl/launchpad.py: If PackageArchitecture is 'all', fall
2144+ back to looking at Architecture instead of not adding a
2145+ needs-$ARCH-retrace tag at all. This prevented signal crashes originating
2146+ from e. g. Python packages from being automatically retraced.
2147+
2148+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 04 Sep 2008 10:51:24 +0200
2149+
2150+apport (0.113) intrepid; urgency=low
2151+
2152+ * apport-qt recommends update-notifier-kde instead of adept-notifier
2153+
2154+ -- Anthony Mercatante <tonio@ubuntu.com> Thu, 28 Aug 2008 15:02:20 +0200
2155+
2156+apport (0.112) intrepid; urgency=low
2157+
2158+ * apport/crashdb_impl/launchpad.py: Update attachment handling to current
2159+ python-launchpad-bugs API, thanks Markus Korn!
2160+ * apport/ui.py: Use gnome-panel as indicator for a running GNOME session;
2161+ 'gnome-session' now calls itself x-session-manager, which isn't useful
2162+ to tell apart session types.
2163+
2164+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 07 Aug 2008 17:09:49 +0200
2165+
2166+apport (0.111) intrepid; urgency=low
2167+
2168+ The "(Kernel) OOPS, I dumped it again!" release.
2169+
2170+ * apport/ui.py: Fix test_run_report_bug_unpackaged_pid() to work with the
2171+ installed run-tests from the package as well.
2172+ * apport/crashdb_impl/launchpad.py: Ignore broken LP bug tasks instead of
2173+ crashing on them.
2174+ * apport/report.py, add_proc_info(): Report the AppArmor or SELinux context
2175+ in a new ProcAttrCurrent field, read from /proc/pid/attr/current.
2176+ Document it in doc/data-format.tex. The field will not be added if the
2177+ proc attribute cannot be read or isn't present. Thanks to Steve Beattie
2178+ for the patch and the suggestion!
2179+ * debian/local/setup-apport-retracer: Switch to intrepid.
2180+ * debian/local/setup-apport-retracer: Fix installation of python-apt. Also
2181+ install apt, to avoid library version mismatches to python-apt.
2182+ * debian/apport.default: Enable apport by default again, now that we have
2183+ working retracers.
2184+ * apport/report.py, test_add_gdb_info_script(): Use bash, not dash as test
2185+ program for core dumping; stack trace is awkwardly bad with dash, so that
2186+ the test case cannot really work any more.
2187+ * Add package-hooks/source_linux.py: Package hook for collecting kernel
2188+ related information. By Matt Zimmerman, thank you! (LP: #251441)
2189+ * debian/local/ubuntu-bug.1: Fix documentation of -p, it specifies the
2190+ binary package name, not the source.
2191+ * apport/packaging.py: Add get_kernel_package() to return the actual Linux
2192+ kernel package name; useful if the user reports a bug against just
2193+ "linux". Implement it in backends/packaging-apt-dpkg.py.
2194+ * apport/ui.py: "Do what I mean" when filing a bug against "linux" and
2195+ report it against the actual kernel package.
2196+ * debian/local/ubuntu-bug: If just one argument is given, infer -p/-P from
2197+ the type of the argument.
2198+ * apport/ui.py: Drop the PackageArchitecture field for the uploaded report
2199+ if it is equal to Architecture. Adapt apport/crashdb_impl/launchpad.py to
2200+ fall back to Architecture, and mention the change in doc/data-format.tex.
2201+ * problem_report.py, write_mime(): Add new "skip_keys" argument to filter
2202+ out keys. Add test cases.
2203+ * apport/crashdb_impl/launchpad.py: Do not write the "Date:" field on
2204+ upload(), and fetch it from the bug metadata in download().
2205+ * apport/crashdb_impl/launchpad.py, download(): Support reading bugs with
2206+ the "--- " separator instead of "ProblemType: ". Launchpad doesn't create
2207+ bugs that way ATM, but at least we have the reading part implemented now.
2208+ * package-hooks/source_linux.py: Drop Uname, ProcVersion, and
2209+ RunningKernelVersion fields, since they are all subsumed in the
2210+ ProcVersionSignature field.
2211+ * apport/ui.py, run_report_bug(): Strip spaces from package argument.
2212+ * apport/ui.py, add_hooks_info(): Collect OS info first, then call the
2213+ package hooks, so that the linux hook actually has a chance to delete the
2214+ Uname field.
2215+ * bin/kernel_hook, test-hooks: Throw away the original kernel hook which
2216+ we never used (and got superseded by the proper source_linux.py package
2217+ hook now). Replace it with the new logic of looking for
2218+ /var/crash/vmcore{,.log} and turning that into an apport report.
2219+ * debian/apport.init: Call kernel_hook if /var/crash/vmcore exists.
2220+ (LP: #241322)
2221+ * apport/ui.py: Collect information for "ProblemType: Kernel" as well, so
2222+ that we run the package hook. Adapt test suite to cover this.
2223+ * debian/control: Bump Standards-Version (no required changes).
2224+ * gtk/apport-gtk.glade, qt4/apport-qt: Generalize notification of kernel
2225+ crash, since it now happens after a boot, not right after the BUG/OOPS.
2226+ But in the future we want to cover both cases.
2227+
2228+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2008 18:13:24 +0200
2229+
2230+apport (0.110) intrepid; urgency=low
2231+
2232+ * apport/chroot.py: In the test suite, copy some system binaries/libraries
2233+ into a fakechroot and exercise a lot of standard shell commands (cp, ln
2234+ -s, rm, rm -r, mkdir, echo, chmod, chown, etc.) with absolute/relative
2235+ paths. This reproduces the total breakage of rm'ing, chmod'ing, and
2236+ chown'ing absolute paths in hardy fakechroots.
2237+ * bin/crash-digger: Intercept exceptions when downloading crash reports for
2238+ duplicate checking, so that the retracer does not crash on malformed bug
2239+ reports. (LP: #205178)
2240+ * apport/packaging.py: Introduce a new function enabled() which reports
2241+ whether Apport should create crash reports. Signal crashes are controlled
2242+ by /proc/sys/kernel/core_pattern, but we need that to control whether
2243+ reports for Python, package, or kernel crashes are generated.
2244+ * backends/packaging-apt-dpkg.py: Provide implementation for
2245+ PackageInfo.enabled() for Debian/Ubuntu by evaluating /etc/default/apport.
2246+ Add various test cases for different configuration files and absent files.
2247+ * apport_python_hook.py: Do not create reports if Apport is disabled (in
2248+ /etc/default/apport). (LP: #222260)
2249+
2250+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 17 May 2008 12:44:21 +0200
2251+
2252+apport (0.109) intrepid; urgency=low
2253+
2254+ [ Martin Pitt ]
2255+ * debian/local/setup-apport-retracer: Update for some changes in Hardy.
2256+
2257+ [ Loic Minier ]
2258+ * apport/report.py, add_proc_info(): also strip pathnames starting with
2259+ 'cow', 'squashmnt', and 'persistmnt' to allow apport to locate the
2260+ executable pathname, additionally to 'rofs' added in 0.75. This fixes
2261+ apport for packages installed on the read-write part of the unionfs mounts
2262+ and under UME which uses different names for the mount points. Proper fix
2263+ is to rewrite the pathnames in the kernel. (LP: #224168)
2264+
2265+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 23 Apr 2008 14:30:03 +0200
2266+
2267+apport (0.108) hardy; urgency=low
2268+
2269+ [ Martin Pitt ]
2270+ * apport-{gtk,qt,cli}: Fix handling of file references added by package
2271+ hooks. (LP: #205163)
2272+ * backends/packaging_rpm.py: Fix dependency resolution of uname(*) in the
2273+ RPM backend. Thanks to Patryk Zawadzki! (LP: #213018)
2274+ * backends/packaging_rpm.py: Fix RPM platform parsing, thanks to Patryk
2275+ Zawadzki! (LP: #213015)
2276+ * po/de.po: Fix typo (missing space).
2277+ * debian/apport.default: Disable Apport for the final Hardy release, since
2278+ it is less useful in stable releases, and drains a lot of CPU and I/O
2279+ power on crashes. Disabling it here instead of in update-notifier/adept is
2280+ more discoverable and more centralized.
2281+
2282+ [ Daniel Hahler ]
2283+ * bin/apport-retrace: catch the same exceptions from Report.load() like
2284+ ui.load_report() does (LP: #211899)
2285+ * Fix uncaught exceptions in apport itself (LP: #215929):
2286+ - apport/REThread.py: check if "sys" exists in the except block of
2287+ REThread.run()
2288+ - apport_python_hook.py: check if "sys" exists in the finally block of
2289+ apport_excepthook
2290+ * cli/apport-cli: Fix UnboundLocalError in ui_present_crash, which rendered
2291+ apport-cli useless (for reporting crashes) (LP: #216151)
2292+
2293+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 16 Apr 2008 12:24:32 +0200
2294+
2295+apport (0.107) hardy; urgency=low
2296+
2297+ * cli/apport-cli: Add translator comment for difficult string. (LP: #210948)
2298+ * Update German translations.
2299+ * po/Make{vars,file}: Remove the --language=python option again, since it
2300+ breaks extracting strings from the glade. intltool-update currently does
2301+ not seem to have a way to tag a file as "language python", so add an ugly
2302+ workaround: Create temporary .py symlinks for gtk/apport-gtk & friends,
2303+ and have intltool extract them.
2304+ * apport/ui.py: Disallow filing a bug without specifying a package or a PID.
2305+ Update debian/local/ubuntu-bug.1 accordingly (apport-cli manpage was
2306+ already correct). (LP: #210348)
2307+
2308+ -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 06 Apr 2008 11:44:38 -0600
2309+
2310+apport (0.106) hardy; urgency=low
2311+
2312+ [ Martin Pitt ]
2313+ * apport/crashdb_impl/launchpad.py: Fix spelling mistake in p-lp-bugs API
2314+ (now corrected there).
2315+ * apport_python_hook.py: Catch IndexError for invalid sys.argv[0], too.
2316+ (LP: #204940)
2317+ * apport/ui.py: Add test_run_report_bug_unpackaged_pid() test case which
2318+ reports a bug against a pid which belongs to an unpackaged program. This
2319+ reproduces LP #203764.
2320+ * apport/report.py: Drop add_hooks_info() assertion on nonexisting Package
2321+ field, return silently instead. This conforms to the behaviour of the
2322+ other add_*_info() functions and avoids nasty error handling.
2323+ * apport/ui.py: Generate proper error message when calling with -f -p PID
2324+ and PID belongs to an unpackaged program. (LP: #203764).
2325+
2326+ [ Sebastien Bacher ]
2327+ * po/Makevars: add the --language=python xgettext option so the translations
2328+ template is correctly updated on build since cdbs is using intltool-update
2329+ directly and not the corresponding makefile target
2330+
2331+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 01 Apr 2008 16:02:46 +0200
2332+
2333+apport (0.105) hardy; urgency=low
2334+
2335+ * apport/crashdb_impl/launchpad.py: Ignore ValueErrors when subscribing a
2336+ team, since these are usually due to the team already being subscribed.
2337+ * apport/report.py, anonymize(): Be robust against empty user names and only
2338+ anonymize fields which can potentially contain user specific data.
2339+ (LP: #195706)
2340+ * backends/packaging-apt-dpkg.py, get_architecture(): Return 'unknown'
2341+ instead of None if package architecture cannot be determined.
2342+ (LP: #198548)
2343+ * apport/ui.py, run_crash(): Intercept other IOErrors, too (such as EISDIR)
2344+ and print out proper error message instead of crashing. (LP: #201819)
2345+ * apport_python_hook.py: If the Python script has mutilated sys.argv so that
2346+ even sys.argv[0] does not exist any more, fall back into readlink()ing
2347+ /proc/pid/exe and gracefully handle the failure of that, instead of
2348+ crashing in the crash handler (ugh). Add test case. (LP: #198183)
2349+
2350+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 18 Mar 2008 23:04:57 +0100
2351+
2352+apport (0.104) hardy; urgency=low
2353+
2354+ [ Martin Pitt ]
2355+ * apport/crashdb_impl/launchpad.py, get_source_version(): re-escape the
2356+ package name so that it doesn't stumble over '+' and similar characters.
2357+ * apport/ui.py tests: assert that ProcEnviron is also included into bug
2358+ reports where we do not have a PID, since having the local information is
2359+ interesting and important (and acceptable in terms of personal
2360+ information).
2361+ * apport/report.py: Split out method add_proc_environ() for getting
2362+ ProcEnviron, so that we can call it separately.
2363+ * apport/ui.py, run_report_bug(): Add ProcEnviron if we do not have a pid to
2364+ file a bug against. This way, bugs filed against packages or distro also
2365+ get locale information. (LP: #198514)
2366+ * apport/fileutils.py, mark_report_seen(): Do not crash if the file does not
2367+ exist any more, because it was removed underneath us. (LP: #199932)
2368+ * apport/ui.py, test_collect_info_exepath(): Add a tuple argument and a
2369+ CompressedValue to the test report. This reproduces LP #199349.
2370+ * apport/report.py, anonymize(): Only work on string values. (LP: #199349)
2371+ * apport/ui.py: If a report has a field "Ignore", entirely ignore the report
2372+ without even presenting an explanatory error dialog (as
2373+ "UnsupportableReason" does). Document this in doc/package-hooks.txt.
2374+ (LP: #198863)
2375+ * debian/control: Bump Standards-Version (no changes necessary).
2376+ * debian/control: Fix wrongly spelt project names (Python and GTK+). Thanks
2377+ to lintian's scrutiny.
2378+ * gtk/apport-gtk-mime.desktop.in, qt4/apport-qt-mime.desktop.in: Add a main
2379+ category.
2380+
2381+ [ Kees Cook ]
2382+ * apport/report.py: fix module license checking logic (LP: #199927).
2383+ - nonfree_modules: being unable to find a module should not mean the
2384+ module is non-free.
2385+ - test_module_license_evaluation: check modinfo reporting.
2386+ * problem_report.py: Skip atime test case if file system is mounted noatime.
2387+
2388+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 13 Mar 2008 14:01:30 +0100
2389+
2390+apport (0.103) hardy; urgency=low
2391+
2392+ * bin/apport-unpack: Print error messages instead of crashing for problems
2393+ like nonexisting file names passed as arguments. (LP: #185273)
2394+ * backends/packaging-apt-dpkg.py, is_distro_package(): Explicitly check site
2395+ for "ppa", so that we do not automatically file bugs for PPA packages.
2396+ This works around Soyuz bug LP #140412 for the time being.
2397+ * apport/report.py: Add standard_title() test cases for Python crashes with
2398+ a custom message, and a custom message with newlines. The latter
2399+ reproduces LP #190947.
2400+ * apport/report.py, standard_title(): Do not rely on a fixed position of the
2401+ topmost function; use iteration and regular expression matching instead.
2402+ (LP: #190947)
2403+ * apport/ui.py, parse_argv(): Specify that --pid/-P argument must be an
2404+ integer, to avoid exceptions when it's not. (LP: #193494)
2405+ * apport/report.py: Use uname -srm, not -a, to hide the hostname. (part of
2406+ LP #192786); also use os.uname() instead of calling the system program.
2407+ * problem_report.py(): Make write() work for reports with CompressedValues.
2408+ Add test case.
2409+ * apport/ui.py: Add test case test_run_crash_anonymity() which asserts that
2410+ the crash dump does not contain strings which can identify the user, such
2411+ as the user name, login name, host name, and current directory.
2412+ * apport/report.py: Add method anonymize() which replaces user specific
2413+ strings with generic ones.
2414+ * apport/ui.py, thread_collect_info(): Call anonymize() on the report.
2415+ (LP: #192786)
2416+ * bin/apport-retrace: Only update a bug report with new attachments if it is
2417+ not a duplicate. (LP: #172792)
2418+ * bin/apport-retrace: Print out proper error message instead of an exception
2419+ if trying to do write operations to the bug tracker without specifying
2420+ a cookie file. (LP: #146423)
2421+
2422+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 25 Feb 2008 17:47:13 +0100
2423+
2424+apport (0.102) hardy; urgency=low
2425+
2426+ [ Martin Pitt ]
2427+ * problem_report.py: Support reading reports with legacy zlib
2428+ compression in 'retain compressed values' mode (as used nowadays by
2429+ apport when reporting a crash). Add a test case, too. (LP: #129616)
2430+ * debian/control, debian/rules: Switch from python-support to
2431+ python-central, and use 'nomove' option so that apport works during
2432+ upgrades, too. (LP: #121341)
2433+ * debian/rules: Use dh_icons instead of dh_iconcache.
2434+ * debian/apport.init: Do not stop apport in any runlevel (LSB header).
2435+ * apport/ui.py, run_crash(): Catch zlib.error on invalidly compressed core
2436+ dumps. (LP: #176977)
2437+ * apport/ui.py: Give a meaningful error message instead of crashing if the
2438+ package for a crash report is not installed any more. (LP: #149739)
2439+ * apport/ui.py: Do not include ProcCmdline in bug reports, since these are
2440+ not ack'ed by the user and might contain sensitive data. (LP: #132800)
2441+ * apport/ui.py: Add various test cases for crash reports whose packages have
2442+ been uninstalled between the crash and the report. This reproduces
2443+ LP #186684.
2444+ * apport/ui.py, load_report(): Produce proper error message if
2445+ executable/interpreter path do not exist any more. (LP: #186684)
2446+ * cli/apport-cli: Intercept SIGPIPE when calling sensible-pager, to avoid
2447+ crash when quitting it prematurely. (LP: #153872)
2448+ * bin/apport-checkreports: Print out a list of program names/packages which
2449+ have a pending crash report. (LP: #145117)
2450+ * apport/ui.py, run_argv(): Add return code which indicates whether any
2451+ report has been processed.
2452+ * cli/apport-cli: If no pending crash reports are present, say so and refer
2453+ to --help. (LP: #182985)
2454+ * apport/ui.py: Waive check for obsolete packages if environment defines
2455+ $APPORT_IGNORE_OBSOLETE_PACKAGES. Document this in the apport-cli manpage.
2456+ (LP: #148064)
2457+
2458+ [ Daniel Hahler ]
2459+ * .crash file integration for KDE3 (LP: #177055)
2460+ - debian/apport-qt.install: install added files qt4/apport-qt-mime.desktop
2461+ and qt4/apport-qt-mimelnk.desktop
2462+ * Fixed minor warnings/errors from desktop-file-validate in
2463+ gtk/apport-gtk-mime.desktop.in and qt4/apport-qt.desktop.in (LP: #146957)
2464+
2465+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 06 Feb 2008 12:55:53 +0100
2466+
2467+apport (0.101) hardy; urgency=low
2468+
2469+ * debian/control: Add python-xdg dependency to apport, since apport-cli
2470+ needs it. (LP: #177095)
2471+ * apport/ui.py: Add test case for reporting a report which has been
2472+ preprocessed by apport-retrace, i. e. has a stack trace, but no core dump
2473+ any more (reproducing LP #185084).
2474+ * apport/ui.py, run_crash(): Do not reject reports which have a stack trace,
2475+ but no core dump. (LP: #185084)
2476+ * apport/report.py: Fix test_add_gdb_info_load() test case, the temporary
2477+ executable was already deleted when gdb ran the second time.
2478+
2479+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 23 Jan 2008 17:48:06 +0000
2480+
2481+apport (0.100) hardy; urgency=low
2482+
2483+ * bin/crash-digger: Add option --log for logging to a file, and
2484+ --pidfile/--stop for daemonization. Add test cases to test-crash-digger.
2485+ * bin/apport: Do not re-raise exceptions about failure to create the lock
2486+ file, to avoid crashing in the case that another apport instance tries to
2487+ lock at exactly the same moment. (LP: #147237)
2488+ * apport/report.py testsuite: Check that our methods get along with binary
2489+ data which turn into CompressedValue objects after loading them from a
2490+ file. This reproduces LP #148305.
2491+ * problem_report.py, CompressedValue: Add method splitlines() since we need
2492+ it very often. Add test case to test_compressed_values(). (LP: #148305)
2493+ * problem_report.py: Add test case to check that update() works and does the
2494+ right thing with binary values and overwriting. This confirms that
2495+ importing a dictionary works.
2496+ * debian/local/setup-apport-retracer: Update for hardy.
2497+ * apport/crashdb_impl/launchpad.py: get_source_info() does not work any more
2498+ due to HTML changes in Launchpad, and not showing the component any more
2499+ on /distro/+source/package. Since we do not actually need component and
2500+ release name any more, rename it to get_source_version(), fix the regular
2501+ expression to just get the version, and adapt get_fixed_version()
2502+ accordingly.
2503+ * debian/local/setup-apport-retracer: Update default apt sources to
2504+ http://ddebs.ubuntu.com.
2505+ * apport/ui.py: Robostify cleanup of forked test processes.
2506+ * apport/ui.py: Sleep for 0.5 seconds after creating the test process in the
2507+ test suite to give /proc some time to settle down.
2508+ * bin/apport: Drop evaluation of CORE_* environment variables and mandate
2509+ calling with <pid> <signal> <core ulimit>. Drop the now obsolete
2510+ apport/elfcore.py. Adapt test-apport accordingly.
2511+ * debian/apport.init, use-local: Now call apport with %p, %s, and %c kernel
2512+ macros (since 2.6.24). Drop Edgy support from init script.
2513+
2514+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 21 Dec 2007 02:18:48 +0100
2515+
2516+apport (0.99) hardy; urgency=low
2517+
2518+ * cli/apport-cli, qt4/apport-qt: Fix typo 'send' -> 'sent'.
2519+ (LP: #139288)
2520+ * apport_python_hook.py: Add user info, too. Also add check for this to the
2521+ test suite. (LP: #145109)
2522+ * apport/ui.py, run_crash(): Show a proper UI error message instead of just
2523+ crashing with an exception if the crash report is inaccessible for the
2524+ invoking user. (LP: #146464)
2525+ * apport/crashdb_impl/memory.py: Implement mark_retraced(),
2526+ get_unretraced(), and get_dup_unchecked() for completeness, and define
2527+ _MemoryCrashDBTest also when not running file as __main__. This makes the
2528+ class useful for higher-level test suites. Add test cases for the new
2529+ functions.
2530+ * apport/crashdb_impl/memory.py: Support 'dummy_data' option which adds a
2531+ few dummy crashes by default. This is useful for external test suites
2532+ which cannot otherwise pre-fill the in-memory db. Add checks that this
2533+ works properly.
2534+ * bin/crash-digger: Use self.log() more consistently, and flush stdout in
2535+ log(), so that we do not lose logs on output redirection.
2536+ * Add test-crash-digger: Initial test suite for bin/crash-digger.
2537+ * apport/ui.py, run_crash(): Intercept CRC errors from the info collection
2538+ thread, which happens on broken core dumps. (LP: #132212)
2539+ * cli/apport-cli, ui_present_package_error(): Fix running of dialog, so that
2540+ reporting package problems with apport-cli actually works. (LP: #136369)
2541+ * apport/ui.py, run_crash(): Intercept ENOSPC and present a proper error
2542+ message. (LP: #145100)
2543+ * gtk/apport-gtk.glade: Fix title of upload progress window to comply to
2544+ HIG. Thanks, Bruce Cowan. (LP: #144782)
2545+ * qt4/apport-qt: Fix Unicode <-> UTF-8 conversion. Thanks, Daniel Hahler!
2546+ (LP: #148177)
2547+ * apport/ui.py: Only import xdg.DesktopEntry when a .desktop file has been
2548+ found in the affected package. This avoids the dependency on servers with
2549+ just apport-cli. Thanks, Matthias Gug! (LP: #130013)
2550+ * apport/fileutils.py: Do not fail if there are no packages installed which
2551+ have one or several .desktop files. Thanks, Matthias Gug!
2552+
2553+ -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 28 Oct 2007 18:32:07 -0400
2554+
2555+apport (0.98) gutsy; urgency=low
2556+
2557+ [ Martin Pitt ]
2558+ * debian/local/setup-apport-retracer: launchpadBugs -> launchpadbugs
2559+ (recently renamed Python package in python-launchpad-bugs).
2560+ * apport/crashdb_impl/launchpad.py, test examples: Do not duplicate to bug
2561+ #1, that generates a huge amount of spam. Use another test bug.
2562+ * apport/crashdb_impl/launchpad.py, download(): Use Bug.description_raw,
2563+ since LP mangles spaces in .description. Bump p-lp-bugs dependency.
2564+ * apport/crashdb_impl/launchpad.py, close_duplicate(): Explicitly set the
2565+ duplicate after removing attachments, since the new LP does not allow any
2566+ modification of duplicate bugs.
2567+ * bin/crash-digger: Only consolidate the duplicate DB when -i is given (i.
2568+ e. usually only on one running instance).
2569+
2570+ [ Colin Watson ]
2571+ * Use bugs.launchpad.net for +filebug and +bugs requests. (LP: #138090)
2572+
2573+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 01 Oct 2007 14:35:07 +0200
2574+
2575+apport (0.97) gutsy; urgency=low
2576+
2577+ [Martin Pitt]
2578+ * problem_report.py: Coerce CompressedValue.__len__() to return an int to
2579+ work on Python 2.4, too.
2580+ * debian/local/setup-apport-retracer: Adapt ddeb apt source for the move
2581+ from ~pitti to ~ubuntu-archive.
2582+
2583+ [Markus Korn]
2584+ * port to new python-launchpad-bugs API.
2585+
2586+ [Daniel Holbach]
2587+ * small fixes to the port.
2588+ * debian/control: bumped python-launchpad-bugs Depends to >= 0.2.2.
2589+
2590+ -- Daniel Holbach <daniel.holbach@ubuntu.com> Tue, 04 Sep 2007 11:24:28 +0200
2591+
2592+apport (0.96) gutsy; urgency=low
2593+
2594+ * Create man pages for apport-cli, apport-chroot, and dupdb-admin.
2595+ * apport/fileutils.py, find_file_package(): Try to resolve symlinks in the
2596+ directory path. (LP: #125551)
2597+ * apport/crashdb_impl/launchpad.py, debian/local/setup-apport-retracer: Use
2598+ packaging.get_system_architecture() (which is dpkg --print-architecture on
2599+ Debian/Ubuntu) instead of uname, so that this does the right thing on lpia.
2600+ * problem_report.py, write_mime(): Use base64 encoding for gzipped
2601+ attachments, to not screw up mail servers. Thanks to Tim Yamin for this
2602+ patch!
2603+ * apport/crashdb.py: Drop the last argument (-1), since it is the default
2604+ anyway and did not yet exist on Python 2.4.
2605+
2606+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 21 Aug 2007 14:11:48 +0200
2607+
2608+apport (0.95) gutsy; urgency=low
2609+
2610+ * general-hooks/automatix.py: Remove hashbang, it's not an executable
2611+ script.
2612+ * apport/report.py: Support system-wide blacklisting:
2613+ /etc/apport/blacklist.d/. Add test cases.
2614+ * Add doc/README.blacklist: Document blacklist.d/, install it there in
2615+ setup.py.
2616+ * debian/rules: Blacklist wine-preloader, so that we ignore wine crashes
2617+ until an appropriate way is found to deal with them. (Point 6 of
2618+ apport-better-retracing spec.)
2619+
2620+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 11 Aug 2007 18:10:54 +0200
2621+
2622+apport (0.94) gutsy; urgency=low
2623+
2624+ * doc/data-format.tex: Some updates to incorporate feedback from Gnome
2625+ upstream:
2626+ - Do not talk about "Distributions" any more, but "Operating systems".
2627+ Gnome is used on non-Linux OSs, too.
2628+ - Split "DistroRelease:" field into "OS:" and "OSRelease:".
2629+ - Explicitly mention that CoreDump, StackTrace etc. can also contain
2630+ minidump output.
2631+ - Increase document version to 0.2.
2632+ * apport/report.py, obsolete_packages(): Fix crash when apt does not know an
2633+ available version of a package. (LP: #128176)
2634+ * test-apport: Add check that apport aborts immediately if another apport
2635+ instance is already running. Also test that a symlink attack on the lock
2636+ file is not possible.
2637+ * bin/apport: Abort running several apport instances at the same time, by
2638+ lockf()'ing /var/crashes/.lock and aborting on failure. (LP: #119622)
2639+ * Add bin/gcc_ice_hook: Script to create an apport report for a gcc ICE
2640+ (internal compiler exception). Add test cases to test-hooks, and ship it
2641+ in the 'apport' package. (LP: #125551)
2642+ * run-tests: In 'local' mode, only explicitly run the apt/dpkg
2643+ implementation instead of backends/*, since the RPM ones don't have tests
2644+ yet.
2645+ * apport/crashdb.py: Add a second optional parameter to upload() to specify
2646+ an upload progress callback function. Adapt the declarations in the
2647+ Launchpad and Memory implementations, too.
2648+ * apport/crashdb_impl/launchpad.py, upload(): Pass upload progress callback
2649+ handler to launchpadBugs.storeblob.upload(), which supports this since
2650+ version 0.2~39. Bump dependency to it accordingly.
2651+ * apport/ui.py, file_report(): Define an upload progress callback handler,
2652+ pass it to the crashdb upload(), and feed ui_set_upload_progress() with
2653+ some actual data. (LP: #91521)
2654+ * problem_report.py: Remove support for reading bz2 compressed binary data.
2655+ That was only relevant during edgy's development cycle.
2656+ * apport/report.py, test_add_proc_info(): Fix determination of /bin/zgrep
2657+ interpreter.
2658+ * problem_report.py: Switch encoding of binary values from bare zlib to
2659+ proper gzip format, since this is much more useful when reusing the
2660+ compressed value. Retain support for zlib-only reports. Add test cases for
2661+ both old and new encodings, and adapt the other test cases for the new
2662+ format. Update doc/data-format.tex accordingly.
2663+ * problem_report.py, write(): Add new permitted 'binary' argument value
2664+ 'compressed', which retains gzip compressed binary values instead of
2665+ unpacking them transparently. Add test cases.
2666+ * problem_report, write_mime(): Eliminate unnecessary usage of StringIO.
2667+ * problem_report, write_mime(): Make function work for compressed binary
2668+ values. Add test case.
2669+ * apport/report.py, add_gdb_info(): Make function work if CoreDump is a
2670+ compressed value.
2671+ * apport/ui.py: Load crash report with keeping compressed binaries. This
2672+ avoids loading the entire uncompressed core dump into memory, and avoids
2673+ recompressing it all over again for generating the crash database upload
2674+ MIME document. This greatly speeds up crash reporting, too. (LP: #98562)
2675+
2676+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 31 Jul 2007 21:32:00 +0200
2677+
2678+apport (0.93) gutsy; urgency=low
2679+
2680+ * apport/crashdb.py: Set sqlite connect timeout to two hours, instead of the
2681+ default 5 seconds. Previously, one retracer always crashed when the other
2682+ was consolidating the database.
2683+ * bin/dupdb-admin, command_dump(): Correctly interpret empty version strings
2684+ as 'fixed in unknown verrsion', not 'unfixed'.
2685+ * apport/crashdb_impl/launchpad.py: Fix typo in bug comment string.
2686+ * apport/crashdb_impl/launchpad.py: Add function get_source_info() which
2687+ parses out release, version, and component from
2688+ https://launchpad.net/$DISTRO/+source/$PACKAGE.
2689+ * apport/crashdb_impl/launchpad.py, get_fixed_version(): If a bug is fixed,
2690+ return the current version (as approximation of the version where the bug
2691+ was fixed), instead of an empty string (which meant 'fixed in unknown
2692+ version'). [apport-crash-duplicates spec]
2693+
2694+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 25 Jul 2007 17:04:27 +0200
2695+
2696+apport (0.92) gutsy; urgency=low
2697+
2698+ * bin/crash-digger: Do not crash if duplicate db is locked when attempting
2699+ to consolidate it. This happens often because in the DC we have two
2700+ parallel instances (for amd64 and i386).
2701+ * Move ubuntu-fat-chroot from bin/ to debian/local/, since it is so heavily
2702+ Ubuntu specific.
2703+ * debian/local/ubuntu-fat-chroot: Use diversions for the binaries we want to
2704+ disable, so that chroot upgrades do not trash the modifications.
2705+ * debian/local/setup-apport-retracer: launchpad-crash-digger ->
2706+ crash-digger.
2707+ * bin/crash-digger: Add option -i/--arch-indep-dupcheck to explicitly enable
2708+ duplicate checking of arch-independent crashes like Python exceptions. We
2709+ only want to process them on one architecture to avoid scattering the
2710+ duplicate database.
2711+ * apport/crashdb_impl/launchpad.py, get_unfixed(): Search for 'apport-crash'
2712+ tag, not 'apport'.
2713+ * bin/apport-unpack: Fix format string in error message.
2714+ * apport/ui.py, __init__(): Intercept ImportError, which can happen for
2715+ crashes during system upgrades. (LP: #124354)
2716+ * Add general-hooks/automatix.py: Refuse to send problem reports if
2717+ automatix is installed.
2718+ * doc/package-hooks.txt: Do not document UnsupportableReason, since it does
2719+ not make sense to set it in package hooks (it is checked before calling
2720+ the hooks). Hooks should use UnreportableReason only.
2721+ * apport/ui.py, test_run_crash_package(): Check that 'Package' problem
2722+ reports collect additional information, too.
2723+ * apport/ui.py, collect_info(): Collect additional information for 'Package'
2724+ problem reports, too.
2725+ * Revive preloadlib/:
2726+ - Remove PIPE_CORE #ifdefs and make them the default. We do not need to
2727+ support the Edgy kernel patches in this version any more.
2728+ - Install signal handler for SIGABRT, too.
2729+ - Read core ulimit, pass it to apport in CORE_REAL_RLIM, and set it to
2730+ zero for the program, since we do not actually want the kernel to write
2731+ core files when we pipe the core dump to apport.
2732+ - test-apport: Pass APPORT_REPORT_DIR to the manually called apport
2733+ instance in the memory clipping test; otherwise it'll write into
2734+ /var/crash/, which we do not consider in library mode.
2735+ * apport/crashdb_impl/launchpad.py, __init__(): Only do the "download bug
2736+ #2" hack if we actually have an authentication cookie. Thus, do it only on
2737+ the retracing servers, not on the client side. (LP: #125142)
2738+ * apport/report.py, crash_signature(): Generate a signature for one-line
2739+ Python tracebacks, too. This sometimes seems to happen, e. g. LP#124588.
2740+ (LP: #125020)
2741+ * apport/crashdb_impl/launchpad.py, update(): Set bug importance to Medium
2742+ if retracing was successful. (LP: #106379)
2743+
2744+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Jul 2007 21:50:34 +0200
2745+
2746+apport (0.91) gutsy; urgency=low
2747+
2748+ * bin/apport: Remove code that supported the Edgy kernel way of core dump
2749+ passing. Also factorize the CORE_REAL_RLIM evaluation, since it is likely
2750+ to change in the near future.
2751+ * apport/crashdb_impl/launchpad.py, close_duplicate(): Delete some
2752+ attachments, as specified in apport-crash-duplicates spec, and make the
2753+ bug public afterwards.
2754+ * apport/crashdb_impl/launchpad.py, close_duplicate(): If the master bug is
2755+ already duped to yet another bug, mark the bug to that one instead of the
2756+ master.
2757+ * apport/crashdb.py: Split out duplicate_db_last_consolidation() for getting
2758+ the date (or seconds since) the last consolidation, so that we can use it
2759+ externally.
2760+ * apport/crashdb.py: Add duplicate_db_change_master_id() to change the
2761+ master ID of a crash. Add test case to apport/crashdb_impl/memory.py.
2762+ * Add bin/dupdb-admin: Initial version of duplicate db CLI app; can dump the
2763+ db, display consolidation state, and change master bug IDs for now. Ship
2764+ it in apport-retrace.
2765+ * apport/crashdb.py, duplicate_db_last_consolidation(): Fix timedelta
2766+ seconds calculation to actually take the days into account, too.
2767+ * bin/crash-digger: Fix dumping of dup db after consolidation.
2768+ * apport/ui.py:
2769+ - test_run_report_bug_package(): Add test case for calling the UI in bug
2770+ filing mode with an invalid package name.
2771+ - run_report_bug(): Do not crash on invalid package name, generate an
2772+ error message instead. (LP: #123644)
2773+ * apport/fileutils.py, mark_report_seen(): Do not crash if the file has
2774+ already been deleted underneath us. (LP: #122347)
2775+ * apport/ui.py, run_report_bug(): Do not crash if the target process runs as
2776+ a different user. Print a proper error message instead. Add test case
2777+ test_run_report_bug_noperm_pid(). (LP: #121121)
2778+ * apport/fileutils.py, likely_packaged(): Ignore /var/lib/schroot. Add test
2779+ case. (LP: #122859)
2780+ * apport/ui.py, open_url(): Intercept weird race condition for os.close()
2781+ trying to close an already invalidated fd. (LP: #123180)
2782+
2783+ Merge the fedora branch, thanks to Will Woods <wwoods@redhat.com>:
2784+
2785+ * Add apport.init.fedora: Fedora specific init script.
2786+ * Add apport.spec: RPM build recipe.
2787+ * Add backends/packaging_rpm.py: Partial implementation of the packaging
2788+ backend for RPM which applies to all RPM-based distros.
2789+ * Add backends/packaging_fedora.py: Concrete packaging backend
2790+ implementation for Fedora.
2791+ * apport/elfcore.py: Classes for parsing general ELF files, and information
2792+ from core dumps.
2793+ * bin/apport: Fall back to reading signal number and PID directly from the
2794+ core file (via elfcore.py) if CORE_SIGNAL and CORE_PID are not defined (i.
2795+ e. when running on a non-Ubuntu kernel).
2796+ * crashdb.conf: Add stanzas for Fedora and a 'debug' database which uses the
2797+ 'memory' crashdb implementation.
2798+
2799+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 14 Jul 2007 15:08:35 +0200
2800+
2801+apport (0.90) gutsy; urgency=low
2802+
2803+ * apport/ui.py, load_report(): Catch IOError, too. LP: #118827
2804+ * Merge apport-cli package into apport itself. The program itself is just 3
2805+ kB compressed, and it's not worth wasting another 34 kB compressed
2806+ changelog for this tiny bit.
2807+ * apport/report.py, obsolete_packages(): Use the version comparison from the
2808+ packaging system instead of just testing for inequality. This catches zero
2809+ epochs. Thanks to Will Woods <wwoods@redhat.com>!
2810+ * apport/ui.py: Add option -c/--crash-file to run the UI with a particular
2811+ crash file (which can be anywhere) instead of all pending crashes in
2812+ /var/crash/.
2813+ * Add xdg-mime/apport.xml: XDG MIME type definition for .crash files.
2814+ * Add gtk/apport-gtk-mime.desktop.in: Link text/x-apport MIME type to
2815+ apport-gtk -c, so that .crash files can be reported with Gnome.
2816+ * Add debian/apport.links: Install an icon symlink for the MIME type.
2817+ * apport/ui.py: Do not ask the initial "Do you want to report this?"
2818+ question when being invoked with --crash-file.
2819+ * po/POTFILES.in: Add missing cli/apport-cli.
2820+ * po/de.po: Updated for apport-cli.
2821+ * cli/apport-cli: Add option for keeping the report file without sending it,
2822+ and to display its path. This is for sending the report later, copying
2823+ it from a server to a workstation with internet connection, etc.
2824+ * apport/crashdb_impl/launchpad.py: Simplify _subscribe_triaging_team(), now
2825+ that we do not differ between main and universe policies any more.
2826+ * apport/report.py: Support another hook directory
2827+ /usr/share/apport/general-hooks/ for scripts which are run for every
2828+ problem report. This was requested for adding e. g. AppArmor logs, etc.
2829+ Add test cases.
2830+ * Add debian/apport.dirs again to ship that hook directory.
2831+ * doc/package-hooks.txt: Document the general hooks.
2832+
2833+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Jul 2007 21:10:19 +0100
2834+
2835+apport (0.89) gutsy; urgency=low
2836+
2837+ Implement private crash bug handling, according to
2838+ https://wiki.ubuntu.com/CrashReporting:
2839+
2840+ * apport/crashdb_impl/launchpad.py:
2841+ - upload(): If we have an Ubuntu bug, mark it as private and only
2842+ subscribe 'apport' (the 'Apport retracing service' user).
2843+ - Add function _subscribe_triaging_team() which subscribes
2844+ ubuntu-crashes-main for source packages in Ubuntu main or restricted, or
2845+ ubuntu-crashes-universe for other packages. It does not touch non-Ubuntu
2846+ bugs, since these are not marked private by default and are outside of
2847+ the scope of this spec.
2848+ - update(), _mark_dup_checked(): Call _subscribe_triaging_team().
2849+ - Note: This entire spec is a gross hack, and Ubuntu derivatives do not
2850+ benefit from it at all. We have to live with this until LP grows a real
2851+ crash database.
2852+ - get_distro_release(): Make this function work with private bugs, too, by
2853+ using p-lp-bugs' safe_urlopen().
2854+
2855+ Bug fixes:
2856+
2857+ * apport/crashdb_impl/launchpad.py: Revert simplification change of 0.85:
2858+ BugList returns a set of strings, not integers; due to non-identity they
2859+ do not work with the usual set operations.
2860+ * apport/crashdb_impl/launchpad.py: Add function get_source_component() to
2861+ query Launchpad for the component of a given distribution and source
2862+ package. (This will be required for implementing crash-reporting).
2863+ * backends/packaging-apt-dpkg.py, _search_contents(): Package list is
2864+ actually comma separated, only take the first item. This fixes retracing
2865+ of e. g. #124139.
2866+ * backends/packaging-apt-dpkg.py, _search_contents(): Fix package name
2867+ parsing for non-main components. This fixes retracing of e. g. #124111.
2868+ * apport/report.py, _read_maps(): Revert ptrace hack when maps cannot be
2869+ read. maps file is now protected based on process ownership, not ptracing.
2870+ * apport/crashdb.py, apport/crashdb_impl/launchpad.py,
2871+ apport/crashdb_impl/memory.py: Remove official interface
2872+ mark_dup_checked(), as it should only be an internally used function. Add
2873+ report parameter, since we will need it there in the future. Remove
2874+ explicit call from bin/crash-digger and instead change check_duplicate()
2875+ to call it on its own.
2876+ * apport/crashdb_impl/launchpad.py, download(): Replace dodgy parsing of
2877+ fields from the description with proper code, so that multi-line fields
2878+ are read correctly, too.
2879+
2880+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 06 Jul 2007 11:19:22 +0200
2881+
2882+apport (0.88) gutsy; urgency=low
2883+
2884+ * po/de.po: Update.
2885+ * backends/packaging-apt-dpkg.py, _search_contents(): Do not check the
2886+ return value of zgrep. It usually errors out with 'stdout: broken pipe'
2887+ when called with -m1.
2888+ * bin/crash-digger: Mark a bug as retraced if DistroRelease: cannot be
2889+ determined. Those are bugs apport cannot handle.
2890+ * backends/packaging-apt-dpkg.py, get_source_tree(): Call apt-get source
2891+ with --assume-yes to not block on VCS confirmations.
2892+ * apport/crashdb.py: Add interface mark_retrace_failed(). Implement it in
2893+ apport/crashdb_impl/launchpad.py.
2894+ * bin/apport-retrace: If retraced report does not have a crash signature,
2895+ mark it as failed with above new function. Bump python-apport dependency
2896+ for this.
2897+ * apport/crashdb_impl/launchpad.py, update(): Delete CoreDump.gz attachment
2898+ if the retrace was successful (i. e. if the report has a crash signature).
2899+ * apport/ui.py, test_run_crash(): Set the message box title, text, and
2900+ severity as assertion message if the run_crash() test fails, so that you
2901+ know why it fails. This usually happens if libc6 or another dependency of
2902+ the test crash is out of date.
2903+ * gtk/apport-gtk.glade: Mark string as translatable. LP: #119621
2904+
2905+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 03 Jul 2007 21:38:05 +0200
2906+
2907+apport (0.87) gutsy; urgency=low
2908+
2909+ * apport/report.py:
2910+ - test_gen_stacktrace_top(): Add test case for unwinding a Gnome assertion
2911+ (g_logv(), g_assert_warning() and similar), see LP #123462.
2912+ - _gen_stacktrace_top(): Generalize for unwinding multiple functions and a
2913+ set of function names, and add the Gnome assertion ones.
2914+
2915+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Jul 2007 11:00:44 +0200
2916+
2917+apport (0.86) gutsy; urgency=low
2918+
2919+ * test-apport: Check that apport does not create reports for emtpy core
2920+ dumps.
2921+ * problem_report.py: Introduce a fourth optional parameter "fail_on_empty"
2922+ to file pointer tuples which causes write() to raise an IOError if no data
2923+ was read. Add test cases.
2924+ * bin/apport: Enforce non-emptyness of CoreDump.
2925+ * problem_report.py: Add test case for delayed piping of data passed as file
2926+ object pointers. This was supposed to explain the reason for getting bugs
2927+ with zero-byte core dumps, but already works correctly.
2928+ * apport/report.py, check_ignored(): round the mtime to an int (just like
2929+ mark_ignore() does), to not get wrong results on file systems that support
2930+ subsecond file timestamps. This fixes running the test suite on the live
2931+ CD.
2932+ * test-apport: Clarify assertion message if /var/crash is not empty.
2933+
2934+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 28 Jun 2007 19:14:36 +0200
2935+
2936+apport (0.85) gutsy; urgency=low
2937+
2938+ * apport/crashdb_impl/launchpad.py: BugList.bugs is already a set, simplify
2939+ code a bit.
2940+ * debian/control: Add dpkg-dev dependency to apport-retrace, for getting
2941+ dpkg-source.
2942+ * apport/report.py, crash_signature(): Allow ':' and '~' as part of function
2943+ names to cover C++. Adapt test case to cover this.
2944+ * apport/report.py test suite: Do not assume that /bin/zgrep uses /bin/sh,
2945+ it was recently changed to use bash. Directly read the interpreter from
2946+ the shebang line.
2947+ * bin/apport-chroot, command_upgrade(): Supply -y to 'apt-get upgrade' also
2948+ in verbose mode.
2949+ * bin/apport-chroot, command_upgrade(): Run 'apt-get clean' before
2950+ regenerating the chroot tarball.
2951+ * backends/packaging-apt-dpkg.py, get_dependencies(): Fix crash when
2952+ encountering a virtual package. LP: #122274
2953+ * apport/report.py, obsolete_packages(): Do not consider virtual packages as
2954+ obsolete.
2955+ * apport/crashdb_impl/launchpad.py: Do a bogus call to Bug() in the ctor.
2956+ This initializes python-launchpad-bugs to use a cookie for the urlopen in
2957+ BugList, so that get_unretraced() and get_dup_unchecked() return private
2958+ bugs, too. This works around LP #122126.
2959+
2960+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 25 Jun 2007 16:38:43 +0200
2961+
2962+apport (0.84) gutsy; urgency=low
2963+
2964+ * apport/crashdb.py: Add new abstract methods:
2965+ - get_unretraced() and mark_retraced(id) to get a list of crashes that
2966+ need to be retraced and chalk them off.
2967+ - get_dup_unchecked() and mark_dup_checked() to get a list of crashes that
2968+ need to be checked for being a duplicate and chalk them off. This is
2969+ aimed at crashes which do not need retracing, such as unhandled Python
2970+ exceptions.
2971+ * apport/crashdb_impl/launchpad.py: Implement above methods for launchpad
2972+ (moving the code from bin/launchpad-crash-digger).
2973+ * apport/crashdb_impl/launchpad.py: Set "need-duplicate-check" tag for
2974+ Python crashes.
2975+ * apport/crashdb_impl/launchpad.py, download(): Fetch Traceback.txt, too, so
2976+ that we can do duplicate checking for Python crashes.
2977+ * bin/launchpad-crash-digger: Drop Launchpad specific code and replace it
2978+ with calls to above new functions. Rename to bin/crash-digger. Also rename
2979+ all 'cookie' to 'auth' (as happened with the other applications earlier).
2980+ * bin/crash-digger: Do duplicate checking for needs-duplicate-check crash
2981+ bugs (such as Python crashes).
2982+ * bin/apport-retrace, bin/crash-digger: More language cleanup; we should
2983+ stop talking about 'bugs' and use 'crash' consistently.
2984+
2985+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Jun 2007 19:50:24 +0200
2986+
2987+apport (0.83) gutsy; urgency=low
2988+
2989+ * apport/crashdb.py: Separate abstract from implemented functions.
2990+ * apport/crashdb.py, apport/packaging.py, apport/ui.py: Use
2991+ NotImplementedError instead of Exception in the abstract methods.
2992+ * apport/packaging.py: Add interface compare_versions() for comparing
2993+ package version numbers.
2994+ * backends/packaging-apt-dpkg.py: Implement compare_versions() using
2995+ apt.VersionCompare(), add some test cases.
2996+ * apport/report.py: Fix typo: 'none' -> 'None'.
2997+ * apport/chroot.py: Do not include /usr/local/lib and /usr/lib in
2998+ LD_LIBRARY_PATH, just /lib, so that we still use the libc from outside,
2999+ but e. g. libxml2 from inside the chroot.
3000+
3001+ https://blueprints.launchpad.net/ubuntu/+spec/apport-crash-duplicates: Merge
3002+ crash-dups branch, which implements automatic crash duplicate detection:
3003+
3004+ * apport/crashdb.py: Add methods for crash duplicate detection.
3005+ * apport/crashdb_impl/memory.py: Change internal data management to track
3006+ fixed version and duplicates.
3007+ * apport/crashdb_impl/memory.py: Add a test suite for all methods, including
3008+ the duplicate detection API of the base CrashDatabase (since it is
3009+ much easier to test it here, on an actual implementation).
3010+ * debian/pyversions: Bump minimal Python version to 2.5, since this starts
3011+ providing the sqlite3 module.
3012+ * apport/crashdb_impl/launchpad.py: Implement new methods required for crash
3013+ duplicate detection. get_fixed_version() does not approximate version
3014+ tracking yet; it just returns '' for fixed bugs (which means 'fixed, but
3015+ unknown version'). Bump python-launchpad-bugs dependency for this to
3016+ ensure the availability of Bug.mark_duplicate().
3017+ * bin/apport-retrace: Add option --duplicate-db which specifies the path to
3018+ the duplicate sqlite database and enables duplicate detection.
3019+ * Abin/apport-chroot: Add option --duplicate-db. If a file is given, symlink
3020+ it into the chroot and pass --duplicate-db to apport-retrace.
3021+ * bin/launchpad-crash-digger: Add --duplicate-db and pass it to
3022+ apport-chroot.
3023+ * apport/crashdb.py: Track last run of duplicate_db_consolidate() in an
3024+ extra table and add a method duplicate_db_needs_consolidation() which
3025+ returns True if the last run was more than a given number of seconds ago.
3026+ Add test cases to apport/crashdb_impl/memory.py.
3027+ * bin/launchpad-crash-digger, fill_pool(): Check whether the duplicate
3028+ database needs consolidation (i. e. updating the bug states to the reality
3029+ in the bug tracker) and if so, trigger it.
3030+
3031+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 13 Jun 2007 13:09:57 +0200
3032+
3033+apport (0.82) gutsy; urgency=low
3034+
3035+ * Add bin/ubuntu-fat-chroot: Script to install a set of commonly needed
3036+ packages into a minimal Ubuntu chroot (as created by apport-chroot). This
3037+ requires some hacking of postinst and /usr/sbin/ files in between the
3038+ installation stages and thus deserves a script on its own.
3039+ * apport/packaging.py:
3040+ - Add "uninstalled" option to get_file_package(). If set to True, this
3041+ will do an expensive search of files/packages which are not installed.
3042+ - Add interface "set_mirror(URL)" for functions which need to retrieve
3043+ packages and data from distribution mirrors.
3044+ * backends/packaging-apt-dpkg.py: Implement "uninstalled" option and
3045+ "set_mirror(URL)", add test cases.
3046+ * bin/apport-retrace: Use "uninstalled" option now to install packages and
3047+ corresponding -dbgsyms for uninstalled files mentioned in ProcMaps
3048+ (Point 1 of apport-better-retracing spec). Bump python-apport dependency.
3049+ * apport/packaging.py: Add interface get_available_version(package).
3050+ * backends/packaging-apt-dpkg.py: Implement get_available_version(), add
3051+ shallow test case.
3052+ * apport/report.py: Add function obsolete_packages() to return packages in
3053+ Package: and Depends: which are not up to date. Add test cases.
3054+ * apport/ui.py, thread_collect_info(): For crashes, call obsolete_packages()
3055+ and set UnreportableReason: if there are any (Point 2 of
3056+ apport-better-retracing spec).
3057+ * apport/ui.py, thread_collect_info(): call standard_title() and add it to
3058+ the report as 'Title' field. This is useful if reporters modify the
3059+ default title (per request of Brian Murray, thanks). Add test case.
3060+ * apport/ui.py: Fix declaration of the test suite's
3061+ ui_set_upload_progress(). Funny that this has never been triggered before.
3062+ * apport/report.py, add_gdb_info(): Split out StacktraceTop generation into
3063+ separate funtion _gen_stacktrace_top(), so that we can test it separately.
3064+ * apport/report.py, _gen_stacktrace_top(): Step back from the crashed
3065+ program's own signal handlers, since those are generally not useful for
3066+ the purposes of StacktraceTop and only impede duplicate matching
3067+ (Point 4 of apport-better-retracing spec). Add various test cases.
3068+ * apport/report.py: Add method crash_signature() to calculate an unique
3069+ identifier of a signal or Python crash, to be used for duplicate
3070+ detection. Add various test cases.
3071+ * apport/packaging.py: Add interface get_source_tree() to fetch and unpack a
3072+ source package to a given directory, optionally specifying a particular
3073+ version.
3074+ * backends/packaging-apt-dpkg.py: Implement get_source_tree(). This has a
3075+ rather crude 'call apt-get source and guess about directories'
3076+ implementation until python-apt learns about doing this directly and more
3077+ elegantly (see LP #118788).
3078+ * bin/apport-retrace: Add gen_source_stacktrace() and a few helper functions
3079+ to construct a field 'StacktraceSource' with the source code around the
3080+ affected lines in the stack trace (as available). (Point 5 of
3081+ apport-better-retracing spec).
3082+ * apport/crashdb_impl/launchpad.py, update(): Attach StacktraceSource to the
3083+ bug if it exists.
3084+ * apport/crashdb_impl/launchpad.py: Check PackageArchitecture for 'all', to
3085+ not set a retracer tag 'need-all-retrace'.
3086+ * test-apport: Clarify assertion failure message when an unexpected core
3087+ dump is present.
3088+ * apport/report.py, get_module_license(): Do not iterate over Popen.stdout,
3089+ use communicate() instead. The latter is already fixed to not trip over
3090+ SIGINTR. (LP: #118965)
3091+
3092+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 08 Jun 2007 07:47:04 +0200
3093+
3094+apport (0.81) gutsy; urgency=low
3095+
3096+ * apport/report.py: Remove '[apport]' default bug title prefix. (LP: #94819)
3097+ * apport/crashdb_impl/launchpad.py: Tag new bugs with
3098+ 'apport-<problemtype>'. This replaces the former '[apport]' prefixing.
3099+ * debian/local/setup-apport-retracer: Specify a path in '.' command and
3100+ use sh again. Yay for me needing three attempts before actually RTFMing
3101+ how '.' works (which is really nasty and strange IMHO).
3102+ * bin/apport-chroot: Fix symlinks before repackaging the chroot tarball in
3103+ 'install' and 'installdeb' modes.
3104+ * debian/local/setup-apport-retracer: Install python-libxml2 and python-apt.
3105+ * bin/launchpad-crash-digger: Supply --auth instead of the deprecated
3106+ --cookie to apport-chroot.
3107+ * bin/apport-chroot: Fix identifier name in command_retrace().
3108+ * debian/local/setup-apport-retracer: Set APPORT_CRASHDB_CONF to the local
3109+ crashdb.conf.
3110+ * bin/apport-chroot: Unset APPORT_CRASHDB_CONF for login and retrace.
3111+ * bin/launchpad-crash-digger: Check the release of a bug and whether we have
3112+ a chroot for it before untagging it. This avoids loosing tags for bugs we
3113+ do not yet have a working retracer chroot for.
3114+ * bin/apport-retrace: Do not abort with an exception if package installation
3115+ fails. Give a proper error message instead and point to -u. (LP: #115681)
3116+ * apport/crashdb_impl/launchpad.py, update(): Create a temporary directory
3117+ and use proper file names for the new attachments. With TemporaryFile(),
3118+ attachment file names ended up as '<fdopen>'. (LP: #115347)
3119+ * apport/report.py, add_os_info(): Add field 'NonfreeKernelModules' which
3120+ lists loaded kernel modules which do not have a FOSS license. This is
3121+ particularly helpful for quickly checking for restricted graphics drivers.
3122+ (LP: #103239)
3123+ * apport_python_hook.py: Move the apport.* imports into the try: block and
3124+ move the likely_packaged() test to the top, to avoid importing
3125+ apport.report and creating a Report object for non-packaged scripts. This
3126+ makes the entire code more efficient and robust against errors in the
3127+ apport modules. (LP: #109955)
3128+ * apport/report.py, add_gdb_info(): Intercept OSError from gdb invocation
3129+ (which might be segfaulting itself) and just do not put any gdb output
3130+ into the report. The automatic retracers can try their luck again.
3131+ (LP: #112501)
3132+ * bin/apport-retrace: Fix handling of packages which are still known to
3133+ /var/lib/dpkg/status, but do not have an apt record any more; treat them
3134+ like virtual packages and just issue a warning instead of falling over.
3135+ (LP: #107474)
3136+ * Add doc/data-format.tex: Documentation of the structure, encoding, and
3137+ standard keys of the Apport report file format. [apport-for-upstreams
3138+ blueprint]
3139+ * Add doc/Makefile: Build and clean rules for generating data-format.pdf.
3140+ * debian/rules, setup.py: Call doc/Makefile and install the PDF
3141+ documentation. Add texlive-latex-recommended build dependency for that.
3142+
3143+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 24 May 2007 19:39:12 +0200
3144+
3145+apport (0.80) gutsy; urgency=low
3146+
3147+ Collect all Launchpad specific bits in a separate class and provide an
3148+ abstract base class. This will greatly help for getting upstream acceptance
3149+ and the possibility of automatically forwarding crashes upstream
3150+ (apport-for-upstreams specification):
3151+
3152+ * Add apport/crashdb.py: Abstract crash database interface. This also offers
3153+ a factory function get_crashdb() which reads a configuration file to find
3154+ the default crash database to be used.
3155+ * Add ./crashdb.conf: Crash database configuration file, for Ubuntu on
3156+ Launchpad. Modify setup.py and debian/python-apport.install to ship it in
3157+ python-apport.
3158+ * Add apport/crashdb_impl/memory.py: Simple in-memory implementation of
3159+ crash database interface for testing.
3160+ * Add apport/crashdb_impl/launchpad.py: Launchpad implementation of crash
3161+ database interface.
3162+ * apport/ui.py: Drop LP specific bits and move towards new CrashDatabase
3163+ interface.
3164+ * apport/ui.py, test suite: Do not overwrite file_report() any more, but
3165+ use the memory CrashDatabase. This will test the actual file_report()
3166+ implementation and allows the test suite to check the precise value of
3167+ opened URLs.
3168+ * apport/{report,ui}.py: Move UserInterface.create_crash_bug_title() and its
3169+ test cases to Report.standard_title(). It is much more appropriate there
3170+ and can be used in the retracer as well.
3171+ * bin/apport-retrace: Drop LP specific bits and move to CrashDatabase
3172+ interface. Remove the --remove-tag option, we really should not have it
3173+ here; remove it from man/apport-retrace.1 as well.
3174+ * bin/apport-chroot: Drop --remove-tag option here, too.
3175+ * bin/apport-chroot: Drop LP specific bits and move to CrashDatabase
3176+ interface.
3177+ * bin/launchpad-crash-digger: Remove retracing tag directly instead of
3178+ passing --remove-tag to apport-chroot. This is a much cleaner design and
3179+ avoids infinitely looping on some weirdly failing retraces.
3180+ * debian/control: Bump some python-apport dependencies for the API changes.
3181+
3182+ Some debranding:
3183+
3184+ * setup.py: Use apport wiki home page for 'url'.
3185+ * Remove 'X-Ubuntu-Gettext-Domain' from *.desktop.in, since langpack.mk will
3186+ add it automatically now.
3187+ * *.desktop.in: Remove 'in Ubuntu' from comment.
3188+ * cli/apport-cli, qt4/apport-qt: Generalize window titles.
3189+
3190+ Other fixes:
3191+ * po/de.po: Update.
3192+ * debian/local/setup-apport-retracer: Revert back 'source' to '.' and use
3193+ bash instead of sh. POSIX sh does not seem to have a 'source' command.
3194+
3195+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 May 2007 19:25:31 +0200
3196+
3197+apport (0.79) gutsy; urgency=low
3198+
3199+ * debian/local/setup-apport-retracer: Fix '.' bashism, replace it with
3200+ 'source'.
3201+ * problem_report.py, write_mime(): Drop preamble argument, replace it with
3202+ an extra_headers dictionary. This is much easier to evaluate on clients.
3203+ * apport/ui.py: Convert to new write_mime() interface from above. This
3204+ finally automatically tags bugs with need-$ARCH-retrace. Bump
3205+ p-problem-report dependency of python-apport for this.
3206+ * apport/report.py: Change example URLs in the testsuite from launchpad to
3207+ an artificial ones to avoid the impression that it is LP specific.
3208+ * backends/packaging-apt-dpkg.py: Formally make this a subclass of
3209+ apport.packaging.PackageInfo.
3210+ * debian/control: Use code.lp.net instead of bazaar.lp.net VCS URL.
3211+ * bin/kernel_hook: Fix/improve the collected information:
3212+ - Read /proc/modules instead of lsmod.
3213+ - Fix lspci argument: -n instead of -m.
3214+ - Add /proc/cmdline.
3215+ * debian/rules: Use langpack.mk for updating the .desktop files.
3216+ * Add po/Makevars to specify the domain, to make intltool figure out the
3217+ gettext domain automatically.
3218+ * bin/kernel_hook, ./test-hooks: Do not rely on /proc/version_signature any
3219+ more, it's gone in the gutsy kernel.
3220+
3221+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 May 2007 15:55:10 +0200
3222+
3223+apport (0.78) gutsy; urgency=low
3224+
3225+ * apport/packaging.py, backends/packaging-dpkg.py: Add new interface
3226+ is_distro_package(package) which verifies the origin of a given package.
3227+ Move the dodgy hack from apport/ui.py to the backend, where it belongs to.
3228+ Also add a test case.
3229+ * debian/control: Add python-apt dependency to python-apport.
3230+ * debian/control: Remove debianutils dependency, it's essential.
3231+ * Drop backends/packaging-dpkg.py. It had some hackish usage of python-apt
3232+ anyway, since some things just cannot be figured out with dpkg alone.
3233+ Since we have to give up on that idea, implement a new clean packaging
3234+ backend 'packaging-apt-dpkg.py' which now uses python-apt and dpkg in a
3235+ clean way.
3236+ * apport/report.py, add_gdb_info(): Fix crash when Stacktrace could not be
3237+ created. (LP: #107853)
3238+ * ./test-apport: Check that crashes create a core dump (with proper ulimits)
3239+ when an unseen crash report exists already. This reproduces LP #105976.
3240+ * bin/apport: Create core dump file if aborting because an unseen crash
3241+ report already exists. (LP: #105976)
3242+ * apport/ui.py: Add a comment for translators. (LP: #104703)
3243+ * apport/ui.py, load_report(): Also catch zlib.error on invalid reports.
3244+ (LP: #103547)
3245+ * apport/report.py: Add method has_useful_stacktrace() to determine whether
3246+ the stack trace can be considered useful. The current heuristic is to
3247+ consider it useless if it either is shorter than three lines and has any
3248+ unknown function, or for longer traces, a minority of known functions. Add
3249+ test cases.
3250+ * gtk/apport-gtk, qt4/apport-qt, cli/apport-cli: Do not offer 'reduced
3251+ report' option if the stack trace is useless. (LP: #87430) Bump the
3252+ python-apport dependencies of the frontend packages to ensure that we have
3253+ has_useful_stacktrace().
3254+
3255+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 5 May 2007 17:53:42 +0200
3256+
3257+apport (0.77) gutsy; urgency=low
3258+
3259+ * apport/report.py: Replace any() call with a list comprehension to work
3260+ with Python < 2.5. (LP: #104864)
3261+ * apport/report.py: Move the ctypes import to the one place where we
3262+ actually need it, and do not entirely fail if they do not exist (such as
3263+ in Python 2.4). It is only required for non-default Feisty kernels anyway.
3264+ (LP: #107662)
3265+ * apport/chroot.py: Fix test suite to work with Python 2.4's tarfile module
3266+ output format.
3267+ * debian/local/setup-apport-retracer: Generalized some feisty specific
3268+ bits, set default release to gutsy.
3269+
3270+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 23 Apr 2007 12:22:17 +0200
3271+
3272+apport (0.76) feisty; urgency=low
3273+
3274+ * Move python_hook.py out of the apport module to apport_python_hook.py, so
3275+ that it does not inflict the expensive import of all apport related
3276+ modules to every python program. Adapt module prefixes accordingly.
3277+ (LP: #105764)
3278+ * setup.py, debian/python-apport.install: Install apport_python_hook.py into
3279+ the python-apport binary package.
3280+ * apport/ui.py test suite: Unset locale related environment variables so
3281+ that the tests which check strings are not invalidated by translations.
3282+
3283+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 12 Apr 2007 11:47:50 +0200
3284+
3285+apport (0.75) feisty; urgency=low
3286+
3287+ * apport/report.py, add_proc_info(): Chop off /rofs/ prefix from
3288+ ExecutablePath, so that crashes work on the live system, too. Arguably a
3289+ kernel bug, but probably too hard to fix at this time. (LP: #102909)
3290+ * backends/packaging-dpkg.py, get_modified_files(): Ignore empty lines in
3291+ broken .md5sums file rather than crashing on them. (LP: #102906)
3292+
3293+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Apr 2007 21:51:28 +0200
3294+
3295+apport (0.74) feisty; urgency=low
3296+
3297+ * debian/apport-{gtk,qt}.install: Do not install .desktop files for now,
3298+ until we get a proper guided bug reporting.
3299+ * problem_report.py, write_mime(): Do not re-compress keys which already end
3300+ in .gz. Add test cases.
3301+ * test-hooks: Add a (dodgy) test case for calling package_hook on an
3302+ uninstalled package. After all, this is very likely to happen for
3303+ installation errors. This reproduces #97636.
3304+ * backends/packaging-dpkg.py, get_source(): Add a similarly dodgy fallback
3305+ to apt if the queried package is not installed. This needs to be
3306+ generalized and cleaned up later, but now is the time for unintrusive
3307+ small patches. (LP: #97636)
3308+ * test-apport: Do not fail on non-empty gdb stderr if it only consists of a
3309+ single warning (as happens on powerpc).
3310+ * apport/report.py, test_check_interpreted(): Run gedit test on an actually
3311+ existing file, reproducing the interpreter confusion reported in #102056.
3312+ * apport/report.py, _check_interpreted(): Add a whitelist of common
3313+ interpreters and check ExecutablePath against it. (LP: #102056)
3314+ * apport/ui.py: Ignore SystemError exceptions from apt, which happen on
3315+ badly formatted source.list entries. (LP: #98901)
3316+ * apport/ui.py: Fix crash on None candiateOrigin from the apt cache object.
3317+ (LP: #98961)
3318+ * gtk/apport-gtk.glade: Add window titles to progress and details dialogs.
3319+ (LP: #97640)
3320+
3321+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Apr 2007 14:44:08 +0200
3322+
3323+apport (0.73) feisty; urgency=low
3324+
3325+ * problem_report.py, write(): Allow a third optional argument in tuple
3326+ values, which specify a maximum file size. Above it, the entire key gets
3327+ removed. Add testsuite checks for all boundary cases.
3328+ * bin/apport: Limit core dump size to 75% of usable RAM
3329+ (MemFree+Cached-Writeback). This should avoid trashing people's boxes hard
3330+ on huge core dumps. Bump dependencies on python-problem-report. Create an
3331+ expensive, but realistic check for this in test-apport.
3332+ (LP: #71560)
3333+ * apport/ui.py, run_crash(): If a signal crash report does not have a core
3334+ dump, explain that the computer has too little memory for an automatic
3335+ analysis/report of the crash. Add test suite check.
3336+
3337+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 29 Mar 2007 23:38:23 +0200
3338+
3339+apport (0.72) feisty; urgency=low
3340+
3341+ [ Martin Pitt ]
3342+ * bin/apport-chroot, command_create(): Install gpgv.
3343+ * bin/apport-retrace: Fix error handling in fetch_unpack().
3344+ * Move apport-retrace.1 manpage from package apport to apport-retrace. Bump
3345+ Conflicts/Replaces accordingly.
3346+ * bin/launchpad-crash-digger, apport/ui.py: Remove the special case
3347+ 'powerpc'->'ppc' and use need-powerpc-retrace uniformly.
3348+ * debian/control: Add XS-Vcs-Bzr: header.
3349+ * apport/ui.py: Fix wrong parameter name in help message.
3350+ * Another grammar fix, thanks to Brian Murray!
3351+
3352+ [ Michael Hofmann ]
3353+ * debian/local/ubuntu-bug: Try to use apport-cli, if we do not have a
3354+ $DISPLAY, or neither Gnome nor KDE are running.
3355+ * debian/control: Recommend elinks, since it is the only text browser so far
3356+ that works with Launchpad (see #59510)
3357+ * Add debian/apport-cli.README.Debian: Describe how to integrate
3358+ apport-checkreports and apport-cli into .bashrc for crash notification on
3359+ servers.
3360+ * qt4/apport-qt: Fix undefined symbol in ui_present_package_error().
3361+ (LP: #97282)
3362+
3363+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 29 Mar 2007 11:41:39 +0200
3364+
3365+apport (0.71) feisty; urgency=low
3366+
3367+ * cli/apport-cli, qt4/apport-qt: Fix bad grammar 'some minutes'.
3368+ (LP: #95296)
3369+ * problem_report.py, write_mime(): Add optional 'preamble' parameter. Add
3370+ test case.
3371+ * apport/ui.py, upload_launchpad_blob(): Set need-$ARCH-retrace tag in MIME
3372+ preamble. Bump p-problem-report dependency. (LP: #94790)
3373+ * bin/apport-retrace: In verbose mode, display the path of currently
3374+ extracting deb.
3375+ * bin/apport-retrace: Do not fall over errors of dpkg -x (which happens e.
3376+ g. on udev, where it cannot unpack /dev, since this is a symlink to the
3377+ real /dev). Merely print out a warning about it.
3378+ * apport/ui.py, run_report_bug(): Ignore ENOENT from add_proc_info(). This
3379+ happens if the user closes the application prematurely, so that /proc/pid
3380+ does not exist any more. Add test case. (LP: #95954)
3381+ * backends/packaging-dpkg.py, get_modified_files(): Ignore lines in .md5sums
3382+ files which contain a NUL byte. This Should Not Happenâ„¢, but nevertheless
3383+ did. (LP: #96050)
3384+ * apport/ui.py, doc/package-hooks.txt: Check for a field
3385+ "UnreportableReason: <text>" and display an information box that the
3386+ current crash cannot be reported because of <text>. Add test case.
3387+ Document the new field.
3388+ * apport/ui.py: Check package origin, compare it to DistroRelease:, and
3389+ report crash as unreportable if they do not match. This particularly saves
3390+ the user from uploading large reports for e. g. opera crashes, and avoids
3391+ filing Ubuntu bugs from Debian installations. (LP: #75513)
3392+
3393+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Mar 2007 18:01:24 +0200
3394+
3395+apport (0.70) feisty; urgency=low
3396+
3397+ [ Martin Pitt ]
3398+ * bin/apport-retrace: Add option --remove-tag to remove a Launchpad bug
3399+ tag. This is intended for an automatic Malone crash retracing system.
3400+ * debian/control: Bump python-launchpad-bugs dependency to ensure that we
3401+ have Bug.[gs]et_metadata().
3402+ * man/apport-retrace.1: Add documentation for --confirm and --remove-tag.
3403+ * bin/apport-chroot: Add option --remove-tag and pass it to apport-retrace.
3404+ * apport/chroot.py, fix_symlinks(): Convert chroot path prefixed absolute
3405+ symlinks to relative symlinks to avoid fakechroot's weird handling of
3406+ absolute symlinks.
3407+ * Add bin/launchpad-crash-digger: Daemon for watching out for
3408+ need-$ARCH-retrace tagged Ubuntu bugs in Launchpad and calling
3409+ apport-retrace on them.
3410+ * bin/apport-retrace: Mangle bug comment with StacktraceTop to not contain
3411+ invalid UTF-8, to avoid getting Internal Server Errors from LP.
3412+ * debian/local/setup-apport-retracer: Install libc6-i686{,-dbgsym} into an
3413+ x86 chroot, to get sane x86 backtraces for crashes in libc.
3414+ * debian/local/setup-apport-retracer:
3415+ - Unpack and install python-launchpad-bugs locally if the package is not
3416+ installed.
3417+ - Link launchpad-crash-digger into the retracer's bin/ dir.
3418+ * run-tests: Run tests with python's -tt flag to catch whitespace errors.
3419+ * Replace tabs with spaces in all Python files. (LP: #93561)
3420+ * Remove trailing white space in all Python files.
3421+ * apport/report.py, add_proc_info(): Do not regard symlinks to executables
3422+ as interpreted scripts any more (such as Debian alternatives). Add test
3423+ case. (LP: #94732)
3424+ * problem_report.py: Add new method get_new() which returns a set of all
3425+ keys which have been added since load() or construction. Add test cases.
3426+ * problem_report.py: Add optional parameter only_new to write(), which
3427+ writes only the get_new() keys. Add test case.
3428+ * apport/ui.py: Remember currently processed report file and update it with
3429+ the added information, so that it becomes useful for local evaluation,
3430+ too. Bump python-problem-report dependency to ensure write()'s only_new
3431+ availability. (LP: #94678)
3432+ * apport-chroot: Add forgotten sys.exit(1) after printing the error message
3433+ about an invalid chroot specification.
3434+ * apport/ui.py, run_crash(): Check for a field "UnsupportableReason: <text>"
3435+ and display an information box that the current configuration cannot be
3436+ supported because of <text>, instead of processing and reporting the
3437+ crash. Add test case for this workflow. With special regards to our
3438+ Firefox crash triagers who want to get rid of the hundreds of
3439+ flash-related crashes. :)
3440+ * apport/report.py, add_hooks_info(): Use execfile() instead of
3441+ __import__(), since package names might conflict with module names already
3442+ imported into apport's namespace. Also search for hook named after the
3443+ source package name (prefixed with 'source_'). Add test cases.
3444+ * bin/apport-chroot: When specifying --save for login, only save the tarball
3445+ if the exit status is 0.
3446+ * bin/apport-chroot, create: Install /usr/sbin/policy-rc.d to disable init
3447+ scripts.
3448+ * bin/apport-chroot: Fixed command function selection to not abort with
3449+ 'unknown command' if the DistroRelease: was unknown.
3450+ * bin/apport-retrace: Replace --no-purge with --no-dpkg. With this option,
3451+ do not call dpkg --unpack any more, but dpkg -x, to avoid any fchmod() and
3452+ other calls which cause problems in fakechroots.
3453+ * bin/apport-retrace: Fix ordering of version numbers in warning message.
3454+ * doc/package-hooks.txt: Add some examples, document source package hook.
3455+
3456+ [ Kees Cook ]
3457+ * apport/report.py, add_proc_info(): If reading /proc/pid/maps fails,
3458+ ptrace() the target process to make it readable (proposed security
3459+ improvement in future kernels).
3460+ * bin/apport-retrace: Fix crash for packages unknown to the apt cache.
3461+ * apport/report.py, add_gdb_info(): Limit maximum backtrace depth to 2000 to
3462+ avoid infinitely looped stacks and gdb crashes. (LP: #94455)
3463+ This also caps the maximum size of information that we add to reports.
3464+ (LP: #92653)
3465+ * bin/apport-retrace: Add option -R/--rebuild-package-info, so that
3466+ apport-retrace works on unprocessed crash dumps in /var/crash.
3467+ * Some grammar corrections.
3468+ * Add package-hooks/source_apport.py: Package hook for apport itself.
3469+ Include /var/log/apport.log and the status of files in /var/crash.
3470+
3471+ [ Michael Hofmann ]
3472+ * Add cli/apport-cli, setup.py, debian/apport-cli.install, debian/control:
3473+ Add command line user interface.
3474+ * apport/ui.py, format_filesize(): Use MiB and GiB instead of MB and GB;
3475+ these are the official units. Adapt test cases.
3476+ * apport/ui.py, collect_info()/file_report(): Do not raise an exception on
3477+ KeyboardInterrupt in the subthreads.
3478+ * apport/ui.py, open_url(): Do not use gtk.MessageDialog(), but
3479+ ui_error_message(), and fix error passing so that the message is
3480+ displayed in the parent thread.
3481+ * apport/ui.py, open_url(): Check that $DISPLAY is set before considering
3482+ the KDE/Gnome web browsers.
3483+
3484+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Mar 2007 09:41:03 +0200
3485+
3486+apport (0.69) feisty; urgency=low
3487+
3488+ * apport-chroot: Add command 'installdeb' to conveniently install a bunch of
3489+ .debs into a chroot.
3490+ * apport-chroot: Fix 'login' and 'upgrade' commands to not require
3491+ specifying a chroot map when giving a chroot tarball path as argument.
3492+ * test-apport: Check that core dumps are written for packaged programs as
3493+ well, if ulimits want them. (Test for #92029)
3494+ * bin/apport: Call write_user_coredump() for packaged program crashes and
3495+ SIGABRT as well. (LP: #92029)
3496+
3497+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Mar 2007 17:37:23 +0100
3498+
3499+apport (0.68) feisty; urgency=low
3500+
3501+ [ Michael Hofmann ]
3502+ * qt4/apport-qt: Fix taskbar entry, remove an unused method.
3503+ * qt4/error.ui: Fix icon spacing.
3504+
3505+ [ Martin Pitt ]
3506+ * apport-retrace: Add option --confirm to display the retraced stack traces
3507+ and ask for confirmation before uploading them as LP bug attachments.
3508+ (LP: #91878)
3509+ * apport-chroot: Add option --confirm-attach; if given, call apport-retrace
3510+ with --confirm.
3511+
3512+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 15 Mar 2007 00:05:18 +0100
3513+
3514+apport (0.67) feisty; urgency=low
3515+
3516+ * debian/local/setup-apport-retracer: Add apt sources for restricted,
3517+ universe, and multiverse, too.
3518+ * po/de.po: Update from Rosetta.
3519+ * apport/report.py: Remove undefined call to error_log() in
3520+ _command_output(), replace it with raising proper exceptions.
3521+ * bin/apport-retrace: Fix 'numer' typo. (LP: #91680)
3522+ * test-apport: Check that non-packaged executables generate a core dump on
3523+ SIGABRT, too (test case for bug #92029).
3524+ * bin/apport: Move check for ignoring SIGABRT below the core dump file
3525+ writing for non-packaged binaries. (LP: #92029)
3526+ * gtk/apport-gtk.glade:
3527+ - Remove titles from the progress windows to comply with Gnome HIG and not
3528+ repeat the text content.
3529+ - Improve wording a bit.
3530+ - LP: #92114
3531+ * gtk/apport-gtk{,.glade}: Fix signal handler name of the Cancel button in
3532+ the upload progress dialog, so that it actually works. (LP: #92115)
3533+
3534+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 14 Mar 2007 17:34:57 +0100
3535+
3536+apport (0.66) feisty; urgency=low
3537+
3538+ * Remove apport/MultipartPostHandler.py, this functionality moved to
3539+ python-launchpad-bugs now. Add a dependency to that package.
3540+ * apport/ui.py, upload_launchpad_blob(): Use the shiny new
3541+ launchpadBugs.storeblob.upload().
3542+ * bin/apport-retrace: Attach retraced stack traces back to the Launchpad bug
3543+ report if no other output option is given (This corresponds to the
3544+ in-place editing when a report file is specified). Add option --cookie to
3545+ specify a Mozilla-style cookie file for the necessary Launchpad
3546+ authentication.
3547+ * man/apport-retrace.1: Document above apport-retrace changes.
3548+ * bin/apport-chroot: Add --cookie option: temporarily symlink cookie into
3549+ the chroot and pass it to apport-retrace in retrace mode.
3550+
3551+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 10 Mar 2007 15:01:57 +0100
3552+
3553+apport (0.65) feisty; urgency=low
3554+
3555+ * debian/local/setup-apport-retracer:
3556+ - Replace grep-dctrl with grep call, since grep-dctrl is not installed in
3557+ all the DC chroots.
3558+ - Do not download apport source from archive.u.c., instead require that
3559+ this script lives in the unpacked apport source tree.
3560+ * bin/apport-chroot: Use apt-get options -y and --allow-unauthenticated when
3561+ installing additional packages.
3562+ * bin/apport-chroot: Handle --extra-package for 'upgrade', too, to provide a
3563+ simple way of adding a package to an existing chroot tarball.
3564+ * debian/local/setup-apport-retracer: Create tarball chroots by default.
3565+ It only imposes a negligible overhead, and sharing unpacked directories
3566+ with multiple people is just too brittle.
3567+ * bin/apport-retrace: Add option --no-purge to not purge unpacked packages
3568+ after retracing. This is (only) useful with temporarily unpacked chroots,
3569+ since it's only a waste of time there.
3570+ * bin/apport-chroot: Call apport-retrace with --no-purge when retracing in a
3571+ chroot tarball.
3572+ * apport/chroot.py: Add fix_symlinks() method to remove the chroot root
3573+ directory prefix from symbolic links; they prevent function of tarball
3574+ chroots and moving around directory chroots. Add test case.
3575+ * bin/apport: Fix symlinks after creating and upgrading a chroot.
3576+ * bin/apport-chroot: Add option --save to update a tarball after logging
3577+ in to it.
3578+
3579+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 10 Mar 2007 21:21:25 +0100
3580+
3581+apport (0.64) feisty; urgency=low
3582+
3583+ * bin/apport-chroot: Add 'login' command.
3584+ * bin/apport-chroot: Install apport-retrace into a newly created chroot.
3585+ * Add debian/local/setup-apport-retracer: Script to install local versions
3586+ of apport, debootstrap, fake{,ch}root libraries, and a feisty apport
3587+ fakechroot. This works OOTB on ronne's amd64 and i386 feisty chroots. The
3588+ script is not shipped in any package yet, but it's convenient to ship it
3589+ in revision control and in the source.
3590+ * apport/report.py, _check_interpreted(): When calling an interpreter with a
3591+ script name as argument, set ExecutablePath to the script instead of the
3592+ interpreter. Add test case. (LP: #88794)
3593+ * apport/report.py, search_bug_patterns(): Catch all exceptions from
3594+ urlopen(), not just IOError. Sometimes this fails with funnier errors.
3595+ (LP: #89589)
3596+ * bin/apport-retrace: Give some additional explanation when installing
3597+ packages fails. (LP: #89916)
3598+ * apport/fileutils.py, get_all_{system_,}reports(): Fix file access race
3599+ condition. (LP: #89977)
3600+ * bin/apport-retrace: Add option -p/--extra-package to install an additional
3601+ package for retracing. May be specified multiple times. Document new
3602+ option in man/apport-retrace.1. (LP: #90077)
3603+ * bin/apport-chroot: Add a similar option -p/--extra-package and install
3604+ those in the 'create' command and simply pass it to apport-retrace in the
3605+ 'retrace' command. (LP: #90077)
3606+ * bin/apport-chroot: Add a -v/--verbose option.
3607+ * bin/apport-retrace: Do not complain about missing ddebs for Arch: all
3608+ packages.
3609+
3610+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 6 Mar 2007 16:20:41 +0100
3611+
3612+apport (0.63) feisty; urgency=low
3613+
3614+ New feature: fakechroot support for apport-retrace
3615+
3616+ * bin/apport-retrace:
3617+ - Simplify program design and throw away the complicated debug symbol
3618+ sandbox generation, along with the -d and -C options. Instead, directly
3619+ install the missing packages and ddebs with apt. This makes the tool more
3620+ suitable for running in chroots and has often been requested anyway.
3621+ - Add option -u/--unpack-only which causes additionally installed packages
3622+ to be unpacked without being configured and purged again after
3623+ retracing. This allows apport-retrace to work under fakechroot and has
3624+ the nice side effect of speeding up package installation (we do not care
3625+ about configuration for retracing anyway).
3626+ * man/apport-retrace.1: Update description for the new behaviour, drop
3627+ documentation of the -d and -C options, and add documentation of -u.
3628+ * Add apport/chroot.py: Class for representing and working with chroots;
3629+ this uses the fakeroot and fakechroot libraries when being called as
3630+ non-root.
3631+ * Add bin/apport-chroot: CLI frontend for doing various things with
3632+ chroots (including fakeroot/fakechroot support from the Chroot class). For
3633+ now, this implements:
3634+ - create a chroot (tarball or directory)
3635+ - dist-upgrade a particular or all chroots
3636+ - apport-retrace a bug or Apport report file
3637+ * setup.py: Ship apport-chroot in scripts directory.
3638+ * Add a new package apport-retrace which ships apport-retrace and
3639+ apport-chroot and carries all the heavier dependencies (binutils,
3640+ python-launchpad-bugs, python-apt, etc.). Drop the latter two dependencies
3641+ from the apport package. This allows us to install the apport-retrace
3642+ package in fakechroots (not possible with apport itself) and avoid
3643+ unnecessary dependencies on normal desktop installations.
3644+
3645+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 5 Mar 2007 11:20:36 +0100
3646+
3647+apport (0.62) feisty; urgency=low
3648+
3649+ * apport/ui.py, collect_info(): Use REThread instead of Thread and raise
3650+ exceptions from it, so that errors during info collection actually become
3651+ visible.
3652+ * apport/report.py, add_proc_info(): Check that ExecutablePath actually
3653+ exists, so that invalid values from transient error conditions are ignored
3654+ (such as '/usr/bin/gnome-panel\x00\x00\x8b (deleted)').
3655+ * apport/packaging.py: Add interface get_system_architecture() to return the
3656+ system architecture in the distro specific notation. This can differ from
3657+ get_architecture(package) on multiarch platforms such as amd64.
3658+ * backends/packaging-dpkg.py: Implement get_system_architecture() to return
3659+ dpkg --print-architecture, add a shallow test case.
3660+ * apport/report.py, add_package_info(): Rename key 'Architecture:' to
3661+ 'PackageArchitecture:' for clarity.
3662+ * apport/report.py, add_os_info(): Add system architecture as
3663+ 'Architecture:' field.
3664+ * apport/ui.py, create_crash_bug_title(): Append warning about non-native
3665+ package if package architecture does not match the system's one.
3666+ * All test suites: Remove redundant word 'behaviour' from test descriptions.
3667+ * test-hooks: Run tests on installed hooks in /usr/share/apport by default
3668+ and add a '--local' switch to test the hooks in the source tree instead.
3669+ Use this option in run-tests.
3670+ * apport/report.py, test_add_proc_info(): Change the python script test
3671+ so that it does not depend on being run in the source tree.
3672+ * run-tests: Add a 'local' command line option which runs tests on the files
3673+ and modules in the build tree. Run tests on system files/modules by
3674+ default.
3675+ * setup.py, debian/apport.install: Ship test-hooks, test-apport, and
3676+ run-tests in /usr/share/apport/testsuite/, so that the full test suite can
3677+ be run in the installed system.
3678+ * gtk/apport-gtk.desktop.in: Only show in Gnome and Xfce.
3679+ * qt4/apport-qt.desktop.in: Only show in KDE.
3680+
3681+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 1 Mar 2007 10:43:29 +0100
3682+
3683+apport (0.61) feisty; urgency=low
3684+
3685+ * bin/apport:
3686+ - Kernel 2.6.20-9 now sets CORE_REAL_RLIM to -1 instead of not setting it;
3687+ handle this case correctly. (LP: #87065)
3688+ - Add forgotten multiplication of CORE_REAL_RLIM with 1024, since ulimit
3689+ sets kB, not bytes.
3690+
3691+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 27 Feb 2007 16:06:11 +0100
3692+
3693+apport (0.60) feisty; urgency=low
3694+
3695+ * gtk/apport-gtk.glade: Reintroduce window titles. Since the crash
3696+ notifications are like alerts, title have been removed recently to comply
3697+ with Gnome HIG standards, but then the user will get 'nameless window'
3698+ buttons in the task bar. Let's have the smaller evil then. (LP: #87164)
3699+ * apport/packaging.py: Add get_architecture() interface for determining the
3700+ architecture of a particular package (which might not match the overall
3701+ system architecture on multiarch-capable systems, e. g. an i386 Firefox
3702+ package installed on amd64).
3703+ * backends/packaging-dpkg.py: Implement get_architecture() and add test
3704+ case.
3705+ * apport/report.py, add_package_info(): Add Architecture: field.
3706+ (LP: #87424)
3707+ * apport/ui.py: Already mark report as seen when we load it, not just in the
3708+ information collection thread. That way, reports will only be shown once
3709+ on systems which have /var/crash mounted noatime, too. (LP: #85809)
3710+ * apport/fileutils.py, mark_report_seen(): If os.utime() fails, and opening
3711+ the report file for reading does not change the atime (happens with
3712+ noatime mount option), don't throw an exception, just delete the report.
3713+ (other aspect of LP: #85809)
3714+ * qt4/apport-qt: Wrap gettext() into an unicode(str, 'UTF-8') call,
3715+ otherwise all non-ASCII unicode strings are broken. (LP: #87757)
3716+
3717+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Feb 2007 20:55:40 +0100
3718+
3719+apport (0.59) feisty; urgency=low
3720+
3721+ * apport/report.py: Check that interpreter options are discarded in
3722+ test_check_interpreted_script(). This replicates bug #87005.
3723+ * apport/report.py, _check_interpreted_script(): Filter out interpreter
3724+ command line options. This should make the detection of interpreted
3725+ scripts more robust. (LP: #87005)
3726+ * test-apport, check_crash(): Differ between expecting the program dumping
3727+ core and finding a core dump on disk, because this is not equivalent any
3728+ more with core pipelining.
3729+ * bin/apport: Write core files into a process' cwd if the process' ulimit
3730+ requests and permits it and the crashes process is not packaged, so that
3731+ developers get happy again. Test this behaviour with various ulimits in
3732+ test-apport.
3733+ * test-apport: Check that the core file written by apport is valid. This
3734+ uncovers kernel bugs like #87065
3735+ * problem_report.py test suite: Use assertAlmostEqual() when comparing stat
3736+ times, since they are floats on some systems.
3737+ * apport/report.py, add_gdb_info():
3738+ - Remove all the initial gdb output, which gets rid of the duplicated #0
3739+ line.
3740+ - Replace some stray tabs with spaces.
3741+ - Thanks to Kees Cook for this!
3742+
3743+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 22 Feb 2007 19:52:52 +0100
3744+
3745+apport (0.58) feisty; urgency=low
3746+
3747+ * qt4/apport-qt.desktop.in move to System menu
3748+
3749+ -- Jonathan Riddell <jriddell@ubuntu.com> Tue, 20 Feb 2007 11:35:17 +0000
3750+
3751+apport (0.57) feisty; urgency=low
3752+
3753+ * apport/ui.py: Intercept ENOMEM and fail gracefully; there is little else
3754+ we can do at that point, and there is no point in presenting a crash
3755+ report for this. (LP: #85155)
3756+ * apport/ui.py: Ignore KeyError when deleting the CoreDump field on sending
3757+ a reduced report. This Should Not Happenâ„¢, but nevertheless did.
3758+ (LP: #86083)
3759+ * gtk/apport-gtk, qt4/apport-qt: Intercept ImportError for the non-builtin
3760+ Python modules. This usually happens for crashes when there is a
3761+ dist-upgrade active and some Python packages have not been configured yet.
3762+ (LP: #86007)
3763+ * apport/ui.py: If the problem report does not apply to a packaged program,
3764+ and we have an ExecutablePath, mention it in the error message for easier
3765+ debugging.
3766+ * apport/python_hook.py: Resolve symbolic links in ExecutablePath.
3767+ (LP: #85529)
3768+ * apport/ui.py, open_url(): Remove debugging print statement again, now
3769+ that we tracked down bug #83974.
3770+
3771+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Feb 2007 14:40:29 +0100
3772+
3773+apport (0.56) feisty; urgency=low
3774+
3775+ * apport/ui.py, open_url(): When being invoked as root, call gnome-open or
3776+ firefox as root through sudo instead of dropping our uid/gid and calling
3777+ it normally. The latter does not work for Firefox for some mysterious
3778+ reason. Thanks to Mika Fischer for this trick. (LP: #81207)
3779+ * Add debian/local/ubuntu-bug.1: Manpage for ubuntu-bug. Add it to
3780+ debian/apport.manpages.
3781+ * qt4/apport-qt: Add some missing features that are present in the GTK UI:
3782+ - Do not show details by default, add a button to show them.
3783+ - Add complete/reduced bug report radio buttons.
3784+ - Thanks to Michael Hofmann for this!
3785+
3786+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 15 Feb 2007 14:59:07 +0100
3787+
3788+apport (0.55) feisty; urgency=low
3789+
3790+ * Add debian/local/ubuntu-bug: Check for a running KDE or Gnome session,
3791+ availability of apport-gtk and -qt, and open the appropriate GUI in bug
3792+ filing mode. This makes it convenient for shell users and is also required
3793+ for proper Firefox 'Report a bug...' menu integration (see bug #85041).
3794+ * debian/apport.install: Install ubuntu-bug to /usr/bin.
3795+ * gtk/apport-gtk: Generously add some gtk.main_iteration() calls to avoid
3796+ hanging dialogs, since we do not have a main loop.
3797+ * apport/ui.py: Do not silently ignore exceptions while uploading data to
3798+ Launchpad, but intercept them and display their message in the error
3799+ dialog. (Part of LP: #84992)
3800+ * apport/ui.py: Switch from edge.launchpad.net to production launchpad.net,
3801+ since the necessary bits are now there. (LP: #84992)
3802+
3803+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 14 Feb 2007 13:37:52 +0100
3804+
3805+apport (0.54) feisty; urgency=low
3806+
3807+ * bin/apport: Re-enable, now that our kernel has been fixed to pipe complete
3808+ core dumps to us.
3809+
3810+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 13 Feb 2007 09:33:38 +0100
3811+
3812+apport (0.53) feisty; urgency=low
3813+
3814+ * apport/ui.py, open_url(): Remove some accidentally left-over debugging
3815+ junk.
3816+ * gtk/apport-gtk: Process pending GTK events after hiding the info
3817+ collection window to avoid a hanging dead dialog.
3818+ * gtk/apport-gtk: Do not count the lines of fields with binary data. This
3819+ particularly avoids long delays with huge core dumps. (LP: #81979)
3820+ * apport/ui.py, open_url(): Print URL to stdout, so that we can debug the
3821+ weirdness in #83974.
3822+
3823+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 12 Feb 2007 16:57:05 +0100
3824+
3825+apport (0.52) feisty; urgency=low
3826+
3827+ * apport/report.py: Fix hook directory to be
3828+ /usr/share/apport/package-hooks/, not /u/s/apport/.
3829+ * Add doc/package-hooks.txt: Document per-package hooks, ship in package
3830+ apport.
3831+ * Add debian/apport.dirs: Ship package-hooks/ directory.
3832+ * gtk/apport-gtk, qt4/apport-qt: Fix detection of binary data so that the
3833+ CoreDump is not displayed as incomprehensible gibberish any more.
3834+ * Add qt4/apport-qt.desktop.in and add it to POTFILES.in.
3835+ * bin/apport-retrace: --verbose can now be specified multiple times to
3836+ increase verbosity and debug package installation. Also, fix some quoting
3837+ bugs. Thanks to Kees Cook for this!
3838+ * qt4/apport-qt: Fix restart button handling. (LP: #84202)
3839+ * qt4/apport-qt: Do not try to call splitlines() on a report value that is a
3840+ file reference; just display the reference instead. (LP: #84196)
3841+ * bin/apport: Disable for now, since the current kernel produces cropped
3842+ core dumps and thus we get totally useless crash reports
3843+
3844+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 9 Feb 2007 18:58:08 +0100
3845+
3846+apport (0.51) feisty; urgency=low
3847+
3848+ New feature: Qt4 GUI implementation:
3849+
3850+ * Added qt4/: Qt4 implementation of the abstract user interface. Thanks to
3851+ Michael Hofmann <mh21@piware.de> for that!
3852+ * debian/copyright: Add Michael as copyright holder.
3853+ * setup.py, debian/control, debian/apport-qt.install: Packaging bits for
3854+ apport-qt.
3855+ * Move translations from apport-gtk to apport, since they are shared between
3856+ frontends. Add appropriate Conflicts/Replaces (we don't strictly need it
3857+ here because we strip them anyway, but we need that for the moving icon
3858+ anyway).
3859+ * Move icon from apport-gtk to apport, since it is/can be shared between
3860+ frontends.
3861+
3862+ Improvements:
3863+
3864+ * Replaced old apport.png icon stolen from bug-buddy with nice SVG one.
3865+ Thanks to Troy Sobotka for this!
3866+ * debian/copyright: Add Troy as copyright holder for the icon.
3867+ * bin/apport-retrace, man/apport-retrace.1: Document that report can now be
3868+ a LP bug number.
3869+
3870+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 8 Feb 2007 20:01:12 +0100
3871+
3872+apport (0.50) feisty; urgency=low
3873+
3874+ * gtk/apport-gtk.glade: Fix 'prolem' typo.
3875+ * bin/apport-retrace: Use python-launchpad-bugs to create a Report object
3876+ from a given Launchpad bug number (given as argument instead of the report
3877+ file path). Add appropriate p-l-b dependency.
3878+ * gtk/apport-gtk: Mark '(binary data)' string as translatable.
3879+
3880+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 8 Feb 2007 15:15:47 +0100
3881+
3882+apport (0.49) feisty; urgency=low
3883+
3884+ * gtk/apport-gtk.glade: Fix s/send/sent/ typo. Closes: LP#83061
3885+ * apport/ui.py, create_crash_bug_title(): Cope with odd Tracebacks that are
3886+ shorter than three lines. Add test case from the bug. Closes: LP#83556
3887+ * apport/python_hook: Do not create a report if the binary is ignored. Add
3888+ test case. Closes: LP#83566
3889+ * gtk/apport-gtk: Do not save/alter crash dialog title any more, it's empty
3890+ now.
3891+ * apport/ui.py, open_url(): Check the user's session for
3892+ ksmserver/gnome-session to decide whether to prefer kfmclient or
3893+ gnome-open. Also, only call Firefox directly if gconf's prefered browser
3894+ is actually Firefox. Closes: LP#82007
3895+
3896+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 6 Feb 2007 18:33:15 +0100
3897+
3898+apport (0.48) feisty; urgency=low
3899+
3900+ New feature: Infrastructure for reporting kernel Oopses:
3901+
3902+ * Add bin/kernel_hook and ship it in /usr/share/apport. The kernel can call
3903+ this on an Oops. Add a test suite for it to test-hooks.
3904+ * apport/ui.py: Add support for reporting ProblemType: Kernel reports, and
3905+ add test suite for the workflow.
3906+ * gtk/apport-gtk{,.glade}: Add implementation for ui_present_kernel_error().
3907+
3908+ Improvements:
3909+
3910+ * Merged various apport-retrace improvements from Kees' branch:
3911+ - Add various options to override some report fields with local values.
3912+ - Add --verbose option and be quiet by default.
3913+ - Read ProcMaps for additional library dependencies, to also catch
3914+ libraries loaded at runtime (plugins).
3915+ - Set correct debug file directory when starting an interactive gdb
3916+ session with -g.
3917+ * Add gtk/apport-gtk.desktop.in: Desktop file for calling apport-gtk in
3918+ 'file a distro bug' mode, to be displayed in gnome-panel's System menu
3919+ (see bug-reporting-tool spec). Also add a Makefile to do the
3920+ intltool-merge dance, add it to POTFILES.in, and ship it in
3921+ debian/apport-gtk.install.
3922+ * bin/apport: Call add_os_info(), so that we get architecture information
3923+ even for 'naked' reports which didn't go through UI enrichment.
3924+ * Add ./test-hooks: Test suite for the various package hooks shipped with
3925+ apport. Test the package problem hook for now.
3926+
3927+ Bug fixes:
3928+
3929+ * debian/control: Add missing python-apt dependency to apport
3930+ (apport-retrace needs it). Thanks to Kees Cook for noticing.
3931+ * debian/control: Add gdb dependency to python-apport.
3932+ * backends/packaging-dpkg.py test suite: Verify that packages returned by
3933+ get_dependencies() actually exist. This catches the 'chops off first
3934+ letter of package name sometimes' bug.
3935+ * backends/packaging-dpkg.py, _init_status(): Add missing space to Depends:
3936+ field format in dpkg-query call. This fixes the chopped-off first letters
3937+ in the 'Dependencies' report field.
3938+ * setup.py: Remove version attribute, we do not update and use it anyway.
3939+ * apport/ui.py: Do not crash if Package: specifies a nonexisting package.
3940+ Display a proper error message instead. Add test_run_crash_errors() test
3941+ case.
3942+ * apport/report.py, add_package_info(): Fix crash when the first dependency
3943+ is not installed. Closes: LP#82561
3944+ * gtk/apport-gtk.glade: Remove window titles in alert dialogs to comply with
3945+ Gnome HIG. Closes: LP#83123
3946+
3947+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 5 Feb 2007 12:19:35 +0100
3948+
3949+apport (0.47) feisty; urgency=low
3950+
3951+ * apport/report.py, add_hooks_info(): Only use first part of 'Package:',
3952+ there might be a version number and a changed files list which we must not
3953+ propagate to the import statement. Closes: LP#82566
3954+
3955+ -- Kees Cook <kees@ubuntu.com> Wed, 31 Jan 2007 15:37:11 -0800
3956+
3957+apport (0.46) feisty; urgency=low
3958+
3959+ * debian/control: Bump dependencies to python-apport due to recent changes
3960+ in expected return values in some UI functions. Closes: LP#82267
3961+ * bin/package_hook: Remove erroneous 'import apport.packaging', which
3962+ shadows the packaging variable in the apport package. This unbreaks the
3963+ package problem hook. Closes: LP#82297
3964+
3965+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 31 Jan 2007 07:51:24 +0100
3966+
3967+apport (0.45) feisty; urgency=low
3968+
3969+ New feature: Infrastructure for package install/upgrade failures:
3970+
3971+ * Add bin/package_hook: Script for creating a report for a package
3972+ installation/upgrade failure. It receives a package name, a number of log
3973+ files, and an ErrorMessage: from stdin. This will be called from e.g.
3974+ dist-upgrader.
3975+ * setup.py, debian/apport.install: Ship package_hook.
3976+ * apport/ui.py: If ProblemType is 'Package', call a new function
3977+ self.ui_present_package_error() instead of presenting a crash. Add test
3978+ suite checks for the package error report workflow.
3979+ * apport/ui.py, create_crash_bug_title(): Create default bug title for
3980+ package reports. Add various test cases.
3981+ * gtk/apport-gtk{,.glade}: GTK implementation of ui_present_package_error().
3982+
3983+ New feature: Maintain a per-binary blacklist to inhibit apport crash reports
3984+ until the binary changes. Closes: LP#79408
3985+
3986+ * apport/report.py: Add new Report methods check_ignored() and mark_ignore()
3987+ to check for/set ignore list entries. Add test cases.
3988+ * apport/ui.py: Add another return value of ui_present_crash() to specify
3989+ whether or not to blacklist the current crash's executable. Check workflow
3990+ of both responses in the test suite.
3991+ * gtk/apport-gtk{,.glade}: Add a blacklist checkbox to the crash
3992+ notification dialogs.
3993+ * bin/apport: Do nothing if the current crash is blacklisted.
3994+ * test-apport: Test blacklisting.
3995+
3996+ Bug fixes:
3997+
3998+ * gtk/apport-gtk: Fix return code for restarting the application ('reopen' ->
3999+ 'restart'). Closes: LP#81422
4000+ * test-apport: Adapt to new core_pattern kernel interface mode:
4001+ - Check core_pattern instead of the obsolete crashdump sysctl to determine
4002+ whether or not apport is running.
4003+ - Give apport max. 10 seconds to complete. The current kernel reaps the
4004+ crashed process as soon as writing the core dump to the pipe is
4005+ finished, but apport still needs to write the report file.
4006+ - Do not EXFAIL the test for crashes in nonwriteable cwd any more, since
4007+ it is now supposed to work (we do not write a core dump to the disk any
4008+ more).
4009+ * run-tests, use-local: Adapt to new core_pattern kernel interface.
4010+ * apport: Improve logging of exceptions, include environment variables.
4011+ * apport/report.py test suite: Use gdb to generate a test core dump, do not
4012+ rely on kill(SIGSEGV) and the kernel to do it (since we now use a pipe in
4013+ core_pattern).
4014+ * backends/packaging-dpkg.py: Fix return value of get_modified_files() if
4015+ dpkg .list file is missing.
4016+ * apport/report.py, add_package_info(): Do not produce stray empty lines for
4017+ uninstalled alternative dependencies.
4018+ * apport/report.py: Fix test_add_gdb_info_script() to not leave behind a
4019+ stray gzip process which randomly blocks stdin. Closes: LP#78421
4020+ * backends/packaging-dpkg.py: Do not read the dpkg status in the
4021+ constructor, but lazily initialize it when actually calling a query
4022+ function. This avoids imposing the dpkg-query overhead for programs that
4023+ import the apport package without doing package queries (such as any
4024+ Python program under Ubuntu, due to the Python crash hook).
4025+ * apport/ui.py, create_crash_bug_title():
4026+ - Do not crash on an empty StacktraceTop. Closes: LP#81677
4027+ - Do not mention an unknown function name ('??') in the bug title;
4028+ instead, use the topmost function with a known name, or leave it out
4029+ at all.
4030+ - Add test cases for these situations.
4031+ * apport/report.py, _get_ignore_dom(): Do not throw an error for an empty
4032+ ignore list file.
4033+
4034+ Code cleanups:
4035+
4036+ * apport/report.py test suite: Refactorize generation of test crash program
4037+ and core dump generation.
4038+ * Consistently use 'in'/'not in' instead of find() for substring searches.
4039+ * Changed the packaging backend import, so that its methods can now be
4040+ accessed at apport.packaging instead of apport.packging.impl.
4041+
4042+ -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 28 Jan 2007 12:34:05 +0100
4043+
4044+apport (0.44) feisty; urgency=low
4045+
4046+ Some more 'Need for Speed' optimizations:
4047+
4048+ * backends/packaging-dpkg.py, _check_files_md5(): Also accept a md5sum
4049+ string in addition to a md5sum file.
4050+ * backends/packaging-dpkg.py, get_modified_files(): Compare package file's
4051+ ctime and mtime against the package list file's mtime and only md5sum the
4052+ files that are newer. This drastically reduces the amount of md5suming
4053+ (usually to zero) and thus speeds up the information collection.
4054+ * backends/packaging-dpkg.py: Use a single hackish 'dpkg-query --show *'
4055+ as a portable variant of 'cat /var/lib/dpkg/status' to pre-fill the status
4056+ cache with all packages instead of calling dpkg -s on every single package
4057+ we query. This changes the time for figuring out dependencies and their
4058+ versions from 'unbearable for many packages' to 'barely noticeable'.
4059+
4060+ New feature: per-package apport hooks to collect additional information:
4061+
4062+ * apport/report.py: Add method add_hooks_info() which executes a function
4063+ add_info(report) from /usr/share/apport/<package>.py. Also add
4064+ appropriate test cases. This provides per-package hooks for apport.
4065+ * apport/ui.py: Call add_hooks_info() in the information collection thread.
4066+
4067+ Bug fixes:
4068+
4069+ * apport/report.py: Add some more test cases for _check_interpreted() for
4070+ Python scripts.
4071+ * apport/python_hook.py: Check for a correct ExecutablePath in
4072+ test_general().
4073+ * apport/python_hook.py: Use fileutils.likely_packaged() instead of
4074+ checking for /tmp and home, so that we ignore stuff in /usr/local, too.
4075+ Closes: LP#81244
4076+ * apport/python_hook.py: If we figure out an ExecutablePath which is not
4077+ actually an executable, do not create a report. This particularly affects
4078+ interactive python sessions where sys.argv[0] is empty and thus
4079+ ExecutablePath ends up being the current directory. Add test cases.
4080+ Closes: LP#81237
4081+
4082+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 24 Jan 2007 17:16:04 +0100
4083+
4084+apport (0.43) feisty; urgency=low
4085+
4086+ * apport/ui.py: Add method create_crash_bug_title() to construct a
4087+ reasonable standard bug title for crash reports, so that the automatic
4088+ duplicate detection actually has a chance to work. Also add test cases for
4089+ various signal crashes and an unhandled Python exception.
4090+ * apport/ui.py, file_report(): Submit a default bug title for crash reports.
4091+ Closes: LP#79657
4092+
4093+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 23 Jan 2007 16:26:40 +0100
4094+
4095+apport (0.42) feisty; urgency=low
4096+
4097+ New feature: https://wiki.ubuntu.com/ApportImprovements (kernel interface
4098+ change):
4099+
4100+ * bin/apport: Support calling without arguments, to support new semantics
4101+ agreed in the ApportImprovements spec: macro values (in particular, pid
4102+ and signal number) are passed as environment variables.
4103+ * preloadlib/libapport.c: Simulate new kernel behaviour described above.
4104+ * debian/apport.init: Set the kernel's core_pattern sysctl to pipe to apport
4105+ if the edgy-style 'crashdump-helper' sysctl helper does not exist.
4106+
4107+ Bug fixes:
4108+
4109+ * bin/apport-retrace: Beautify error message when report file is not
4110+ accessible. Closes: LP#79568
4111+ * apport/ui.py: Fix crash in the bug pattern search thread if we could
4112+ not determine a package name. Closes: LP#77872
4113+ * bin/apport: Only unlink the core dump if it still exists. Closes: LP#80866
4114+ * gtk/apport-gtk.glade: Fix expand/fill attributes so that the expander gets
4115+ all the space when resizing the window. Closes: LP#80987
4116+ * problem_report.py, write_mime(): Make sure that multi-line values that go
4117+ to the summary are terminated with a newline.
4118+ * apport/ui.py: Fix error message invocation for reporting cloakroom upload
4119+ failure.
4120+ * problem_report.py, write_mime(): Fix off-by-one comparison of the 'inline
4121+ text' treshold, so that apport's StacktraceTop field appears in bug
4122+ summaries. Also fix a corner case in CR line ending handling. Check both
4123+ things in the test suite.
4124+ * gtk/apport-gtk: Add missing 'import subprocess.'. Closes: LP#81007
4125+ * debian/control: Bump apport's and apport-gtk's dependency to python-apport
4126+ to make sure that apport.ui is available. Closes: LP#81019
4127+ * apport/ui.py: Add missing 'import pwd'. Closes: LP#81033
4128+
4129+ Minor improvements:
4130+
4131+ * apport/ui.py: Get the cloakroom ticket number from the
4132+ X-Launchpad-Blob-Token HTTP header instead of parsing the resulting page.
4133+
4134+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 23 Jan 2007 11:27:20 +0100
4135+
4136+apport (0.41) feisty; urgency=low
4137+
4138+ New feature: Use Malone cloakroom for uploading reports. Closes: LP#70919
4139+
4140+ * gtk/apport-gtk.glade: Redesign bug reporting dialog to have a 'Create bug
4141+ report' and a 'Cancel' button. Also assign GTK_RESPONSE_* constants to the
4142+ dialog buttons. Go back to Glade 2 since Glade 3 still sucks too much.
4143+ * gtk/apport-gtk: Adjust workflow for sending report to Malone cloakroom
4144+ instead of asking the user to attach the file. Sending is not yet
4145+ implemented, though.
4146+ * gtk/apport-gtk: Do not show any dialogs any more when filing a bug.
4147+ * Add apport/MultipartPostHandler.py: This module provides an urllib2 opener
4148+ for uploading file attachments to forms over HTTP POST. This module is
4149+ (C) 2006 Will Holcomb <wholcomb@gmail.com> and was taken from
4150+ http://odin.himinbi.org/MultipartPostHandler.py. (This is a serious hole
4151+ of the Python standard library IMHO.)
4152+ * apport/ui.py, file_report(): Upload blob to Malone (edge.launchpad.net for
4153+ now), retrieve the ticket, and pass it to +filebug.
4154+
4155+ Refactorizations:
4156+
4157+ * gtk/apport-gtk: Major refactorization to use modal dialogs and run()
4158+ instead of loosely coupled event handlers.
4159+ * Add apport/ui.py: Abstract frontend which encapsulates the logic, workflow
4160+ and UI independent bits and provides UI hooks for concrete
4161+ implementations. This both makes it easy to write more frontends like Qt
4162+ or CLI, and also makes the code automatically testable. Add an extensive
4163+ testsuite.
4164+ * run-tests: Add ui.py testsuite.
4165+ * gtk/apport-gtk: Port to ui.py's UserInterface (which means moving 1/3 of
4166+ the code into the new ui_*() methods and throwing away the rest).
4167+ * Add apport/REThread.py: Enhanced threading.Thread class that can propagate
4168+ the return value and uncaught exceptions of run() to the calling thread.
4169+ * apport/ui.py: Get rid of thread_check_bugpatterns() and hackish exception
4170+ handling, rewrite using REThread.
4171+ * apport/ui.py, gtk/apport-gtk: Add progress bar to report upload. It is
4172+ indefinite for now, because neither urllib2 nor httplib support upload
4173+ progress.
4174+
4175+ Bug fixes:
4176+
4177+ * gtk/apport-gtk.glade: Merged Gnome HIG fixes from Sebastian Heinlein,
4178+ thank you!
4179+ * Merge patch from Sebastian Heinlein to properly treat the apport-gtk icon
4180+ the dh_iconcache way and make it themeable. Thank you!
4181+ * gtk/apport-gtk: Remove periods from primary dialog texts to comply with
4182+ Gnome HIG standards.
4183+ * backends/packaging-dpkg.py, get_file_package(): Process list files in
4184+ chunks of 100, so that we do not exceed the maximum command line length if
4185+ there is a large number of packages installed. Closes: LP#64839
4186+ * gtk/apport-gtk: Use pgrep with -u instead of pidof for testing whether the
4187+ crashed process is already running again, so that we do not match
4188+ processes of other users. Add procps package dependency for this.
4189+ * gtk/apport-gtk: Only offer to restart programs that are in the $PATH. E.
4190+ g. /usr/lib/firefox/firefox-bin cannot be called directly.
4191+ Closes: LP#79623
4192+ * apport/report.py: Disassemble 16 instructions instead of 32 bytes to
4193+ become independent of the instruction size. Thanks to Kees Cook for the
4194+ patch!
4195+
4196+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 22 Jan 2007 10:47:33 +0100
4197+
4198+apport (0.40) feisty; urgency=low
4199+
4200+ * debian/control: Add missing python-dev build dependency, which is
4201+ apparently required for 2.5 now.
4202+
4203+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 15 Jan 2007 11:06:20 +0100
4204+
4205+apport (0.39) feisty; urgency=low
4206+
4207+ * Introduce abstract packaging interface and move all dpkg/apt specific bits
4208+ to a dpkg implementation of this packaging interface (merge
4209+ apport/abstract-pkg branch):
4210+ - Add apport/packaging.py: Abstract packaging system query interface.
4211+ - Add backends/packaging-dpkg.py: dpkg implementation of abstract
4212+ packaging interface.
4213+ - run-tests: Run tests of all backends.
4214+ - apport/fileutils.py, apport/report.py: Port to packaging.py interface.
4215+ - debian/control: Drop python-apport's 'python-apt' dependency since the
4216+ backend only uses dpkg now (without measurable performance penalty since
4217+ it uses internal caching).
4218+ - debian/rules: Install backends/packaging-dpkg.py as our packaging
4219+ backend to apport/packaging_impl.py and remove it again on clean.
4220+
4221+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 13 Jan 2007 15:53:08 +0100
4222+
4223+apport (0.38) feisty; urgency=low
4224+
4225+ * Add ./COPYING: GPL license.
4226+ * debian/rules: Build POT file again.
4227+ * apport/fileutils.py: Add get_all_system_reports() and
4228+ get_new_system_reports() and added test cases. Now the test suite can also
4229+ be run as root to be able to actually check their complete behaviour.
4230+ Adapt the other tests to get along with running the tests as root.
4231+ * bin/apport-checkreports: Add option --system to check for system crash
4232+ reports. Closes: LP#62316
4233+ * gtk/apport-gtk: If called through sudo to process system crashes, drop
4234+ privileges to the original user in open_url() so that we get the web
4235+ browser correctly. (LP#62316) Caveat: The user cannot actually attach the
4236+ crash report file directly since it is not accessible to the user; this
4237+ will get fixed once Malone is able to link a bug report with uploaded
4238+ blobs.
4239+
4240+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 12 Jan 2007 14:29:44 +0100
4241+
4242+apport (0.37) feisty; urgency=low
4243+
4244+ * problem_report.py: Remove the requirement that values must not contain
4245+ empty lines. Add test cases that reading and writing values with empty
4246+ lines works, and add a test case that load() properly complains about
4247+ empty lines in debcontrol encoding (empty lines in values are encoded with
4248+ a single space). Closes: LP#78094
4249+ * apport/report.py test suite: Do not rely on a particular structure of the
4250+ 'cat' stacktrace; apparently this is not consistent across architectures.
4251+ Instead, compile a segfaulting mini C program, let it dump core, and test
4252+ add_gdb_info() on it instead. This also allows us for a more rigid check
4253+ of StacktraceTop.
4254+
4255+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 8 Jan 2007 14:44:08 +0100
4256+
4257+apport (0.36) feisty; urgency=low
4258+
4259+ * gtk/apport-gtk.glade: Restore pulse step of progress bar (this apparently
4260+ got destroyed when saving with Glade 3).
4261+ * gtk/apport-gtk{,.glade}: Terminate the program properly when closing the
4262+ progress dialog instead of exiting with an exception.
4263+ * gtk/apport-gtk: Defer opening of the bug reporting window a bit so that
4264+ it appears on top of the browser window. Also enable the task bar blinking
4265+ for it when it is in the background.
4266+ * gtk/apport-gtk.glade: Restore vertical padding of bug report dialog labels
4267+ (another Glade 3 transition regression).
4268+ * bin/apport-retrace, apport/report.py: Call gdb on InterpreterPath if
4269+ present; calling it on a script does not yield anything useful. Add a test
4270+ case to report.py.
4271+ * debian/apport.init: Use mkdir -p instead of install -d, since install is
4272+ not in /bin. Thanks to Kees Cook for catching this.
4273+ * debian/control: Add missing python-apport dependency 'python-apt', which
4274+ is not caught by ${python:Depends}.
4275+ * gtk/apport-gtk: Catch MemoryError when loading a report and display an
4276+ error dialog instead of just crashing. Closes: LP#76235
4277+ * gtk/apport-gtk: Properly catch exceptions from the bug pattern check
4278+ thread to avoid useless backtraces like in bug #75160.
4279+ * gtk/apport-gtk: Catch exceptions from decoding of damaged reports and
4280+ display an error message instead of crashing. Closes: LP#77149
4281+ * apport/report.py: Add missing import of 'time' to test suite.
4282+
4283+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 5 Jan 2007 09:49:01 +0100
4284+
4285+apport (0.35) feisty; urgency=low
4286+
4287+ Optimizations:
4288+
4289+ * apport/fileutils.py: Split out heuristics for determining whether a file
4290+ belongs to a package to new function likely_packaged() and add test cases.
4291+ * bin/apport: Do not use the expensive find_file_package() any more, use
4292+ likely_packaged() instead. This will create initial reports in some
4293+ corner cases (like custom non-packaged executables in /usr/bin/), but
4294+ greatly reduces I/O impact at crash time. We rely on apport-gtk to deal
4295+ with reports that do not actually belong to a packaged executable.
4296+ * apport/report.py, add_gdb_info(): Call gdb just once and split the output
4297+ instead of calling it again for each command. This should significantly
4298+ speed up the gdb stage especially for large programs/core dumps.
4299+ * Use cStringIO instead of StringIO in modules.
4300+ * gtk/apport-gtk: Code cleanup and refactorization:
4301+ - Move iteration over crash reports into __main__ to simplify housekeeping
4302+ in the ApportGTK class and get rid of some functions.
4303+ - Refactor creation of temporary report file.
4304+ * gtk/apport-gtk.glade: Split the text in the progress bar dialog so that we
4305+ can use it for multiple steps (like uploading data to Malone) while not
4306+ breaking translations.
4307+
4308+ New feature: Bug reporting tool (https://wiki.ubuntu.com/BugReportingTool)
4309+
4310+ * gtk/apport-gtk: Split out crash report initialization to new function
4311+ show_crashes() so that we can use the frontend for other purposes like bug
4312+ reporting.
4313+ * gtk/apport-gtk: Add --file-bug, --package, and --pid options; if given,
4314+ create a bug report about the given package instead of viewing crash
4315+ reports.
4316+ * gtk/apport-gtk{,.glade}: Generalize some strings to not talk about 'crash'
4317+ any more, to make them suitable for bug reporting, too.
4318+ * gtk/apport-gtk: Support --file-bug without specifying a package or a PID
4319+ for filing generic distro bugs.
4320+ * problem_report.py: Add new method write_mime() to encode a problem report
4321+ in MIME/Multipart RFC 2822 format (i. e. an email with attachments). Short
4322+ values are aggregated into the first inline text/plain part, large values,
4323+ binary values, and file references get gzip compressed separate
4324+ attachments. Also add various test cases.
4325+
4326+ Bug/crash information:
4327+
4328+ * apport/report.py, add_user_info(): Add list of system groups that the user
4329+ belongs to.
4330+ * bin/apport: Call add_user_info(), check functionality in test-apport.
4331+ * apport/report.py, add_gdb_info(): Add field 'StacktraceTop' with the top
4332+ five functions on the stack and no local variables. This reduced 'glimpse'
4333+ is suitable for inline display in bug reports and automatic processing
4334+ (dup finders, etc).
4335+
4336+ Bug fixes:
4337+
4338+ * po/Makefile: Add top_srcdir to work with current intltool.
4339+ * po/de.po: Unfuzz some strings.
4340+ * apport/report.py, add_gdb_info(): Strip away the 'No symbol table info
4341+ available' messages from stack traces.
4342+ * apport/report.py, test_search_bug_patterns(): Use security.u.c. instead
4343+ of archive.u.c., since the latter times out too often.
4344+
4345+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 3 Jan 2007 16:45:20 +0100
4346+
4347+apport (0.34) feisty; urgency=low
4348+
4349+ * apport/fileutils.py, mark_report_seen(): Do not bail out if os.utime()
4350+ fails due to access permissions. This happens if the file does not belong
4351+ to the user calling apport-gtk, but is world-readable (such as ubiquity
4352+ crash reports). If utime() fails, repeatedly open()/close() the file for
4353+ reading until atime != ctime, or the 1.2s timeout is reached.
4354+ Closes: LP#72250
4355+ * apport/python_hook.py: Add unit test, call that in run-tests.
4356+ * apport/python_hook.py: Chmod the generated report to 0600 to not expose
4357+ potentially private data to the world, and to be consistent with other
4358+ crash reports.
4359+ * apport/fileutils.py: Add check_files_md5() and test cases.
4360+ * apport/report.py, add_package_info(): Append list of modified package
4361+ files to Package: and Dependencies: value. Closes: LP#70946
4362+ * bin/apport-retrace: Get along with Package:/Dependencies: fields with list
4363+ of modified files.
4364+
4365+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 22 Dec 2006 12:40:55 +0100
4366+
4367+apport (0.33) feisty; urgency=low
4368+
4369+ * debian/rules: Convert to cdbs. This fixes the dh_pysupport invocation
4370+ along the way, too.
4371+ * gtk/apport-gtk: Rework web browser invocation: Use kfmclient if available,
4372+ fall back to firefox-remote, then to webbrowser.open(). Do not call
4373+ x-www-browser any more since this would block if no running browser was
4374+ open before.
4375+ * Drop the apport_utils module (and with it the python-apport-utils
4376+ package), it became too much of a dumping ground. The report file handling
4377+ functions now live in apport.fileutils, and the debugging information
4378+ collectors are now methods of a new 'Report' class (subclass of
4379+ ProblemReport) in the new apport.report module. Adjust all programs
4380+ accordingly.
4381+ * Add debian/python-apport.postinst: Remove old .pyc and .pyo cruft on
4382+ upgrades to clean up after our broken dh_pysupport invocation in earlier
4383+ versions, so that the new modules are actually used.
4384+ * Remove debian/apport.postinst: Those cleanups were only necessary for
4385+ intra-edgy upgrades.
4386+
4387+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 19 Dec 2006 01:15:27 +0100
4388+
4389+apport (0.32) feisty; urgency=low
4390+
4391+ * apport_utils.py: Filter out "no debugging symbols found" warnings from gdb
4392+ outputs, and add some tests for this. Thanks to Kees Cook for the patch!
4393+ * test-apport: Fix AGENTPATH directory when building the preload library
4394+ (recently moved to bin/).
4395+ * use-local: Fix path to apport as well (recently moved to bin/).
4396+ * apport-retrace: Use ldd on InterpreterPath if present; ldd'ing scripts
4397+ will not get us very far. Closes: LP#72201
4398+
4399+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Dec 2006 13:42:58 +0100
4400+
4401+apport (0.31) feisty; urgency=low
4402+
4403+ * Move scripts to bin/ in source package.
4404+ * Add apport/python_hook.py: Default exception handler for Python, to create
4405+ apport reports for unhandled exceptions. Thanks to Robert Collins
4406+ <robert@ubuntu.com> for this! Closes: LP#70957
4407+ * Add new package python-apport to ship the new Python package 'apport'.
4408+ This includes the python crash hook for now, but in the near future
4409+ apport-utils will get redesigned and put into this package, too.
4410+ * debian/control: apport now depends on python-apport instead of
4411+ python-apport-utils.
4412+ * apport_utils.py: Quiesce gdb error messages in test suite.
4413+
4414+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 25 Nov 2006 12:30:41 +0100
4415+
4416+apport (0.30) feisty; urgency=low
4417+
4418+ * test-apport, use-local: Support both kernel 2.6.17 and 2.6.19 sysctl names
4419+ (crashdump-helper vs. crashdump).
4420+ * gtk/apport-gtk.glade: Improve dialog title capitalization.
4421+ Closes: LP#70652.
4422+ * debian/apport.cron.daily: Immediately exit if /var/crash does not exist.
4423+ Create /var/crash in debian/apport.init if it does not exist.
4424+ Closes: LP#71599
4425+ * Convert all tabs in Python source code files to spaces to comply to PEP 8.
4426+ Thanks to Robert Collins for pointing this out.
4427+ * apport_utils.py, gtk/apport-gtk: Do not pass None to subprocess arguments
4428+ if report belongs to a non-packaged program. Thanks to Robert Collins for
4429+ discovering and fixing this! Closes: LP#70942
4430+ * debian/apport.init: Change /var/crash permissions to 1777, so that custom
4431+ crash handlers (in Python/Mono/etc.) can put reports there.
4432+
4433+ -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 25 Nov 2006 10:44:33 +0100
4434+
4435+apport (0.29) feisty; urgency=low
4436+
4437+ * apport-retrace: Do not crash if a linked library is not a dependency.
4438+ Closes: LP#65914
4439+ * apport_utils.py:
4440+ - Add test_find_file_package_diversion() selftest to check diversion
4441+ handling.
4442+ - find_file_package(): Check for and respect diversions.
4443+ - Closes: LP#65917
4444+ * debian/apport.init, test-apport, use-local: Adapt to 'crashdump-helper' ->
4445+ 'crashdump' sysctl renaming in 2.6.19.
4446+ * test-apport: Restore cwd even when failing a test.
4447+ * problem_report.py, ProblemReport.write(): Support file-like objects as
4448+ argument of file references to support direct reading from pipes. Add test
4449+ case test_write_fileobj().
4450+ * apport: Support '-' as core file argument, in which case the core will be
4451+ read from stdin. This paves the way for using Linux 2.6.19's 'pipe
4452+ core_pattern' feature. Bump python-problem-report dependency to >= 0.29
4453+ for this.
4454+ * apport: Confine permissions of log file to root:adm 0640, just in case.
4455+ * apport: Temporarily drop real u/gid to target user for the os.access()
4456+ tests, so that normal users cannot verify the existence of a given
4457+ inaccessible file. Add comprehensive tests to apport_utils' test suite and
4458+ test-apport. Thanks to Kees Cook for this patch!
4459+ * apport_utils.py, find_file_package(): Terminate fgrep options with '--' to
4460+ avoid problems with funny file names. Thanks to Kees Cook for spotting
4461+ this!
4462+ * test-apport: Automatically detect whether ULIMIT_CORE is nonzero, and
4463+ adapt tests accordingly: check that core still exists after invoking
4464+ apport, and clean it up.
4465+ * apport-retrace: Add new mode -g/--gdb which starts an interactive gdb
4466+ session with the report's core dump. Add this to man/apport-retrace.1, too.
4467+ * apport-retrace: If -c is given, completely remove the CoreDump field from
4468+ the report instead of setting it to 'removed'.
4469+ * test-apport: When using 'lib' mode, point APPORT_LOG_FILE to a temporary
4470+ file. Print it if the test suite fails.
4471+ * test-apport: Fix EXFAILure of the 'core dump works for non-writable cwds'
4472+ test case.
4473+ * preloadlib: Support -DPIPE_CORE mode which emulates the
4474+ pipe-in-core_pattern mode of kernel 2.6.19.
4475+ * test-apport: Build preload library with core piping. No more failed test
4476+ suite checks in 'lib' mode.
4477+
4478+ -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 5 Nov 2006 07:10:30 -0800
4479+
4480+apport (0.28) edgy; urgency=low
4481+
4482+ "No core - ignore!"
4483+
4484+ * apport: Do not create a report for crashes which we do not get a core dump
4485+ for. The reports are useless and only clutter our bug tracker.
4486+
4487+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 9 Oct 2006 15:22:32 +0200
4488+
4489+apport (0.27) edgy; urgency=low
4490+
4491+ * apport: Ignore SIGABRT for now; it's usually signalled from abort() or
4492+ assertion failures and we only get reports with unusable stack traces for
4493+ it (see #61938).
4494+ * gtk/apport-gtk: If gnome-open is not available, fall back to x-www-browser
4495+ instead of using webbrowser.py, to respect default browser in XFCE.
4496+ Closes: LP#64209
4497+ * apport: use os.nice() instead of executing 'renice'. Thanks to Benoit
4498+ Boissinot for noticing.
4499+ * apport_utils.py, find_file_package(): Lower() both strings in the speedup
4500+ heuristics to match e. g. /usr/bin/Xorg -> xserver-xorg. Thanks to Kees
4501+ Cook!
4502+ * apport_utils.py, report_add_package_info(): Do not crash if we encounter a
4503+ 'None' current version, which can happen with uninstalled alternative
4504+ dependencies. Thanks to Kees Cook for tracking this down!
4505+
4506+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 6 Oct 2006 17:15:08 +0200
4507+
4508+apport (0.26) edgy; urgency=low
4509+
4510+ * apport-retrace: Clean up code a bit:
4511+ - Move option parsing to separate function.
4512+ - Use apport_utils' report_add_gdb_info() instead of duplicating the gdb
4513+ code.
4514+ * apport_utils.py, report_add_gdb_info(): Add optional parameter 'debugdir'
4515+ to specify an alternate debug file symbol root directory.
4516+ * apport-retrace: Add option -d/--download-debug to automatically download
4517+ available ddebs, create a temporary debug symbol directory from already
4518+ installed and downloaded ddebs, and point gdb to use that. Also add option
4519+ -C/--cache-dir to specify a permanent ddeb cache directory (by default, a
4520+ temporary one is used). Update the manpage accordingly.
4521+ * apport-retrace: Make the best out of a report without packaging
4522+ information (which can happen if the user does not click on 'report bug'
4523+ in apport-gtk).
4524+ * apport_utils, report_add_proc_info():
4525+ - Move heuristics for detecting interpreted scripts to a separate function
4526+ to be able to provide separate test cases for it. Check a few more
4527+ special cases for mono programs.
4528+ - Make interpreter heuristics even scarier to detect some more mono corner
4529+ cases (like banshee and beagled-helper). Closes: LP#58859
4530+
4531+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Oct 2006 19:10:47 +0200
4532+
4533+apport (0.25) edgy; urgency=low
4534+
4535+ * Drop apport-gtk's update-notifier dependency to a Recommends:.
4536+ * apport_utils.py, report_add_gdb_info(): Add register dump and disassembly
4537+ of the last 32 bytes, they might be useful to see what's going on
4538+ sometimes. Thanks to Kees Cook for the idea and the patch.
4539+ * test-apport, check_crash(): Verify that a crash does not leave a core file
4540+ behind. (Test for LP#62972)
4541+ * preloadlib/libapport.c: Do not unlink the core file after calling apport,
4542+ but set REMOVE_CORE=1 environment instead. This matches the current
4543+ kernel behaviour.
4544+ * apport: Register an atexit handler as early as possible for unlinking the
4545+ core dump if REMOVE_CORE environment is set. Closes: LP#62972
4546+ * apport: Set nice level 10 instead of 5. Closes: LP#63099
4547+
4548+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 2 Oct 2006 14:21:53 +0200
4549+
4550+apport (0.24) edgy; urgency=low
4551+
4552+ The "Need for speed" release -- rrrroarrr!
4553+
4554+ * apport: Remove _copy_shrink_corefile(): While this has an enormous impact
4555+ on the size of an uncompressed core dump, it only causes a negligible size
4556+ reduction of the bzip2'ed core, but it needs a lot of I/O resources for
4557+ large core dumps.
4558+ * problem_report.py:
4559+ - Use zlib instead of bzip2 for compressing the binary data (in
4560+ particular, core dumps). This results in slightly bigger files, but speeds
4561+ up compression a lot (30 seconds vs. ~2:45 minutes for a Firefox core dump
4562+ on my slow iBook). Closes: LP#61538
4563+ - ProblemReport.read(): Support both bzip2 and zlib compression to be able
4564+ to read existing reports, too.
4565+ - Add/Adapt test cases.
4566+ * Move InformationCollector._get_gdb() from apport to apport_utils.py
4567+ report_add_gdb_info(), and add a test case for it.
4568+ * apport_utils.py, report_add_package_info(): Support calling without a
4569+ package name, then it will be figured out from ExecutableName. Extend test
4570+ case accordingly.
4571+ * test-apport: Do not require apport reports to contain gdb, packaging, and
4572+ OS information, since we are going to move them out of apport.
4573+ * apport: Do not collect static information. It requires a lot of CPU and
4574+ I/O resources and slows down the machine a lot, and it can be added to
4575+ the report later in the frontend. This also gets rid of the entire
4576+ InformationCollector class, since everything has been moved to
4577+ apport_utils.py now. Closes: LP#62542
4578+ * apport: Do not intercept KeyboardInterrupt as unhandled exception (only
4579+ useful for command line debugging, though).
4580+ * problem_report.py: Add test case for appending new data to an existing
4581+ report, fix write() function to not rely on an existing ProblemType key.
4582+ * problem_report.py: Add new method ProblemReport.add_to_existing() to
4583+ update an already existing problem report with new data. Add test case.
4584+ * apport_utils.py, mark_report_seen(): Use os.utime() instead of
4585+ open()/read() and a timeout for simpler and faster operation.
4586+ * gtk/apport-gtk:
4587+ - Collect gdb/packaging/operating system information when the user chooses
4588+ to file a bug and update the apport report.
4589+ - Change the 'Downloading bug patterns...' progress dialog to 'Collecting
4590+ information about the crash...'.
4591+ * debian/control: Bumped library dependencies of apport-gtk, added
4592+ update-notifer dependency.
4593+
4594+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 29 Sep 2006 15:47:56 +0200
4595+
4596+apport (0.23) edgy; urgency=low
4597+
4598+ * apport: Reset signal handler to SIG_IGN in the crash signal handler, to
4599+ avoid an endless crash/handler loop (noticed during debugging LP#61708).
4600+ * debian/apport.init: Do not let the script run with set -e, so that
4601+ do_{start,stop} can deliver their return codes for proper evaluation,
4602+ instead of immediately existing. Closes: LP#61796
4603+ * test-apport: Check that SIGQUIT does not generate a report. (Check for
4604+ bug #62511).
4605+ * apport: Ignore SIGQUIT. Closes: LP#62511
4606+
4607+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 28 Sep 2006 20:57:38 +0200
4608+
4609+apport (0.22) edgy; urgency=low
4610+
4611+ * apport_utils.py, report_add_proc_info(): Make 'interpreted script'
4612+ detection more general to also work for mono programs.
4613+ * test-apport: Check that non-packaged scripts do not generate a report.
4614+ * apport: Call ic.collect_runtime_information() earlier and drop the local
4615+ /proc/pid/exe examination, so that we get proper script detection. This
4616+ avoids getting crash reports for non-packaged scripts (see test case
4617+ change from above).
4618+ * apport: Do not try to chmod the report file if we could not create it and
4619+ output to stderr instead (this mainly affects local testing only).
4620+ * apport_utils.py, find_file_package(): First grep the package lists whose
4621+ names are a substring of the crashed binary name (or vice versa), to
4622+ immensely speed up the package name determination in many cases.
4623+ * apport: Drop the maximum number of consecutive crashes per executable
4624+ from 5 to 2. 5 creates a too bad user experience and creates the
4625+ impression that it will never stop. Closes: LP#61078
4626+
4627+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 19 Sep 2006 16:16:46 +0200
4628+
4629+apport (0.21) edgy; urgency=low
4630+
4631+ * apport: Keep a partially written report with '000' permissions, and only
4632+ chmod it to 0600 when it is fully written. This stops update-notifier from
4633+ picking up half-written reports and get activated several times.
4634+ Closes: LP#59988
4635+ * apport: Add the executable path to the first line of logging.
4636+ * apport: Run the complete code under control of the general exception
4637+ fallback handler.
4638+ * debian/apport.default: Increase maximum core size to 200 MB, to also catch
4639+ Firefox and Evolution core dumps.
4640+ * apport_utils.py, find_file_package(): Before searching the dpkg database
4641+ (which is expensive), check if the executable path matches a whitelist of
4642+ path prefixes. This replaces the weaker blacklist (/tmp and /home) in
4643+ apport itself.
4644+ * gtk/apport-gtk: Show a progress dialog while checking for bug patterns and
4645+ execute report_search_bug_patterns() in a separate thread, so that the UI
4646+ is not potentially blocked for a long time.
4647+ * apport: Gracefully abort if we cannot readlink /proc/pid/exe, instead of
4648+ falling over with an exception. Closes: LP#59993
4649+ * debian/rules: Use 'multiuser' instead of 'defaults' for dh_installinit.
4650+ Clean up the unnecessary rc symlinks in postinst and add appropriate
4651+ sysv-rc dependency.
4652+
4653+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Sep 2006 23:16:26 +0200
4654+
4655+apport (0.20) edgy; urgency=low
4656+
4657+ * apport: Renice ourself to priority 5 to not slow down the user's processes
4658+ so heavily.
4659+ * Add manpages for apport-retrace(1) and apport-unpack(1) and install them
4660+ into apport. Closes: LP#58463
4661+ * problem_report.py: Test attaching two files instead of one in the
4662+ test_write_file() regression check to assert correct key sorting.
4663+ * problem_report.py: Alter write() method to sort binary data to the end of
4664+ the report. This makes reports easier to read, and also shows relevant
4665+ information more quickly when progressively loading them in a web browser.
4666+ Adapt regression tests accordingly.
4667+ * Move setting of ExecutablePath from apport's InformationCollector ctor to
4668+ apport_utils' report_add_proc_info(), where it belongs to. Check
4669+ ExecutablePath in apport_utils' regression tests.
4670+ * apport-unpack: Support '-' as report argument to read from stdin.
4671+ * apport_utils.py, report_add_proc_info():
4672+ - Apply some heuristics to determine whether the crashed process is an
4673+ interpreted script (check if the Name in /proc/pid/status matches
4674+ the second /proc/pid/cmdline part, and if that command line argument is
4675+ an existing executable file). In the case of an interpreted script, set
4676+ ExecutablePath to the script and InterpreterPath to the actually crashed
4677+ ELF binary.
4678+ - Test this with a shell (/bin/zgrep) and a Python (./apport-unpack)
4679+ script in the test suite.
4680+ - Closes: LP#58859
4681+ * Add debian/apport.logrotate to add a daily 7-step /var/log/apport
4682+ log rotation.
4683+ * test-apport: Fix WCOREDUMP() and pidof checks in check_crash().
4684+ * apport: Install a signal handler for all 'crashy' signals, which just logs
4685+ the signal and stack info and exits. This should avoid a crashing apport
4686+ examining itself, possibly in an endless loop. Closes: LP#58873
4687+
4688+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 11 Sep 2006 09:20:18 +0200
4689+
4690+apport (0.19) edgy; urgency=low
4691+
4692+ * apport_utils.py: Add function report_search_bug_patterns(): Try to
4693+ download a package specific bug pattern XML file from a given URL base
4694+ directory and return the bug URL in case of a match. Also add extensive
4695+ test suite check.
4696+ * test-apport: Fix help message.
4697+ * apport-gtk: Make use of the new report_search_bug_patterns() function and
4698+ display appropriate instructions on match. Bump python-apport-utils dependency.
4699+
4700+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 5 Sep 2006 11:31:17 +0200
4701+
4702+apport (0.18) edgy; urgency=low
4703+
4704+ The "mating dance for ubiquity" release.
4705+
4706+ * apport-gtk:
4707+ - Use pidof's -x option in the detection whether the program is already
4708+ running to correctly handle scripts.
4709+ - Do not assume the presence of the ExecutablePath key in reports, but
4710+ gracefully fall back to Package.
4711+ - If the report specifies an explicit DesktopFile, use that instead of
4712+ trying to figure it out.
4713+ - Only created reduced report and show the radio buttons if there are
4714+ actually removed fields.
4715+ - Change tooltip of 'reduced report' radio button to be more generic (do
4716+ not refer to the memory dump, but to 'large items', since this is what
4717+ apport-gtk currently does).
4718+ - Support new field 'BugDisplayMode: file | list (default)'. In 'file'
4719+ mode, display the /+filebug page instead of /+bugs and change
4720+ instructions accordingly.
4721+ - Use the ProcCmdline attibute to restart an application; correctly
4722+ parsing of all the desktop file is just not possible at this point.
4723+ - Support new field 'RespawnCommand' to use custom respawning command.
4724+ * problem_report.py: Add method has_removed_fields() to check whether load()
4725+ skipped any fields due to binary=False. Add test suite check.
4726+ * apport_utils.py: Fix the quoting in ProcCmdline so that it is fully shell
4727+ compatible.
4728+ * run-tests: Check if kernel crash dump helper is active, and if so, run
4729+ test-apport in kernel mode.
4730+ * problem_report.py: Support an optional second argument of file references
4731+ which controls whether or not the file contents will be compressed/encoded
4732+ (defaults to True for backwards compatibility). Add test suite checks.
4733+
4734+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 25 Aug 2006 14:01:47 +0200
4735+
4736+apport (0.17) edgy; urgency=low
4737+
4738+ * Move packaging information collection from apport to new function
4739+ report_add_package_info() in apport_utils.py, add test suite check.
4740+ * Move operating system information collection from apport to new function
4741+ report_add_os_info() in apport_utils.py, add test suite check.
4742+ * Move /proc information collection from apport to new function
4743+ report_add_proc_info() in apport_utils.py, add test suite check, and fix
4744+ handling of failed /proc/$$/environ reading.
4745+ * preloadlib/libapport.c: Route gcore's stderr to /dev/null to suppress
4746+ error messages during the test suite and to become more compatible to the
4747+ kernel behaviour.
4748+ * Change apport_utils.py to be a public module and ship it in the new
4749+ python-apport-utils package, so that other applications like ubiquity can
4750+ use it easily.
4751+ * po/de.po: Add new translations to make this complete again.
4752+ * problem_report.py, apport_utils.py: Prepend UnitTest classes with '_' so
4753+ that they do not appear in the help() output.
4754+ * apport_utils.py: Add make_report_path(), which constructs the canonical
4755+ crash report pathname for a given report.
4756+ * Add debian/apport.postinst: Remove /usr/share/apport/apport_utils.pyc when
4757+ upgrading from an earlier version, so that the programs in
4758+ /usr/share/apport actually use the version from p-apport-utils.
4759+
4760+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 22 Aug 2006 18:14:00 +0200
4761+
4762+apport (0.16) edgy; urgency=low
4763+
4764+ * test-apport: Check that non-packaged binaries do not generate a report.
4765+ * apport_utils.py: Add find_file_package() to find the package a file
4766+ belongs to. This uses fgrep /var/lib/dpkg/info/*.list which is much faster
4767+ than dpkg -S. Also add test suite check.
4768+ * apport: Use find_file_package() instead of direct dpkg -S call and pass
4769+ the result to the InformationCollector ctor to avoid grepping the dpkg
4770+ lists twice.
4771+ * apport: Immediately exit if the executable name starts with /home or /tmp,
4772+ to avoid grepping the dpkg database in the common developer case.
4773+ * apport: Replace 0-bytes in ProcCmdline with spaces to keep them readable.
4774+ * apport-gtk: Offer an alternative small report (without the core dump) for
4775+ users with slow internet connection.
4776+
4777+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 Aug 2006 19:34:47 +0200
4778+
4779+apport (0.15) edgy; urgency=low
4780+
4781+ * Add apport-unpack: Script to extract the fields of a problem report into
4782+ separate files into a new or empty directory. Mainly useful for extracting
4783+ compressed binary data like the core dump.
4784+ * test-apport: Check that dumped environment only contains security
4785+ insensitive variables.
4786+ * apport: Filter out all environment variables but $SHELL, $PATH, and
4787+ locale/language related ones. Closes: LP#56846
4788+ * test-apport: Delete test report in the cleanup handler so that the
4789+ kernel-mode test can be run multiple times without manual cleanup.
4790+ * test-apport: Check for running apport and test executable processes in
4791+ check_crash().
4792+ * preloadlib/libapport.c: Improve error checking, some robustification.
4793+ * test-apport: If using the preload library, wait a second between the test
4794+ process invocations in the flooding test to mitigate a strange race
4795+ condition that sometimes causes the signal handler not to be executed.
4796+
4797+ -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 20 Aug 2006 16:28:43 +0200
4798+
4799+apport (0.14) edgy; urgency=low
4800+
4801+ * preloadlib/libapport.c: Write core dump into cwd instead of /tmp to act
4802+ like the current kernel.
4803+ * apport_utils.py: Check APPORT_REPORT_DIR environment variable for an
4804+ alternate crash report directory. This is mainly useful for a local test
4805+ suite.
4806+ * apport: Quiesce the apt module's FutureWarning.
4807+ * preloadlib/libapport.c: Re-raise the signal instead of doing exit() so
4808+ that the process exits with the same code as it would do without the
4809+ library.
4810+ * preloadlib/libapport.c: Close stdout for gcore process.
4811+ * Add test-apport: Use preloadlib/ and APPORT_REPORT_DIR to create a
4812+ sandboxed environment and run various apport functionality tests. Also add
4813+ this script to run-tests.
4814+ * apport_utils.py, delete_report(): Actually try to unlink the report before
4815+ falling back to truncating it to zero bytes.
4816+ * preloadlib/libapport.c: Close stderr for apport process.
4817+
4818+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 18 Aug 2006 15:46:37 +0200
4819+
4820+apport (0.13) edgy; urgency=low
4821+
4822+ * Do not run the test suite on build since on the buildds modifying
4823+ file atimes does not work.
4824+
4825+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 18 Aug 2006 00:59:26 +0200
4826+
4827+apport (0.12) edgy; urgency=low
4828+
4829+ * apport-gtk: Make bug report window resizable when the details are
4830+ expanded. Closes: LP#56672
4831+ * apport_utils.py: Add get_recent_crashes() and a test suite check for it.
4832+ * apport: If the same binary produced more than 5 crashes in the last 24
4833+ hours, ignore the crash. This is a hideous and pretty ad-hoc band-aid to
4834+ avoid flooding users with reports for continuously crashing respawning
4835+ processes. Closes: LP#56362
4836+ * apport: Clean up exit codes to only exit with 0 if report was created, and
4837+ with 1 otherwise (to become more compatible to proposed future kernel
4838+ behaviour, where core dumps are only generated on demand).
4839+ * Add run-tests script which calls all available selftests.
4840+ * debian/rules: Run run-tests during build to have the package FTBFS on
4841+ regressions. Add python build dependency for this (it is already there
4842+ implicitly anyway).
4843+
4844+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 17 Aug 2006 16:06:41 +0200
4845+
4846+apport (0.11) edgy; urgency=low
4847+
4848+ * gtk/apport-gtk.glade: Remove separators from dialogs. Closes: LP#56326
4849+ * apport:
4850+ - Move information collection from ctor to two new separate functions
4851+ collect_runtime_information() (fast, privileged, crashed process must
4852+ exist) and collect_static_information() (slow, unprivileged, crashed
4853+ process does not need to exist). This allows a cleaner design.
4854+ - Add missing close() call in init_error_log().
4855+ - Do not catch SystemExit in the final catch-all-and-log clause (will
4856+ become important once we switch to master/slave processes).
4857+ - Clean up handling of temporary files.
4858+ - Log successful report creation with file and package name, to ease
4859+ debugging.
4860+ - transitive_dependencies(): Do not break on pure virtual dependencies
4861+ (like perl-api-XXX).
4862+ * Add debian/apport.default: Default file to disable apport entirely and to
4863+ change the maximum size of kernel created core dumps.
4864+ * debian/apport.init: Evaluate new default file.
4865+
4866+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 16 Aug 2006 17:05:19 +0200
4867+
4868+apport (0.10) edgy; urgency=low
4869+
4870+ * apport-gtk: Show report file size in bug report window.
4871+ * apport: Correctly handle relative paths to core dumps (use crashed
4872+ process' cwd).
4873+ * Fix the GPL URLs in source file's copyright comments.
4874+ * debian/apport.cron.daily: Add -mindepth 1 to find commands to avoid
4875+ attempting to remove the /var/crash/ directory. Closes: LP#55107
4876+ * problem_report.py:
4877+ - Fix precise whitespace handling in continuation lines, add selftest.
4878+ - Add selftest for reading a report, modifying fields, and writing it
4879+ back.
4880+ - Fix writing back binary data, adapt test suite to check it.
4881+ - Fixed ProblemReport.load() to clean up old data, added selftest.
4882+ - Restructure class to inherit from IterableUserDict and throw away all
4883+ the now obsolete dictionary wrapper methods.
4884+ * debian/apport.init: Add colon to description to make output less
4885+ confusing.
4886+ * Add apport-retrace and install it into apport: This tool takes a crash
4887+ report and refreshes the stack traces in it. This is particularly useful
4888+ if debug symbols are installed now, but haven't been at the time the crash
4889+ occured.
4890+
4891+ -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 11 Aug 2006 15:40:05 +0200
4892+
4893+apport (0.9) edgy; urgency=low
4894+
4895+ * apport: Call objcopy to throw out READONLY/CODE sections from the core
4896+ dump, which drastically reduces its (uncompressed) size (factor 2 to 10).
4897+ This has little effect on the bzip2'ed core dump, though.
4898+ * apport:
4899+ - Support an optional third command line argument which specifies the
4900+ location of a core dump.
4901+ - If a core dump is given, call gdb on the core dump instead of the
4902+ crashed process. We cannot attach to the latter if we are called by the
4903+ kernel (since the crashed process is in uninterruptible kernel sleep).
4904+ - If no core dump is given, do not attempt to do anything gdb related.
4905+ - This matches the future behaviour of the kernel crash dump helper while
4906+ remaining compatible to the previous call semantics.
4907+ * Add preloadlib/{Makefile,libapport.c}: LD_PRELOADable library which
4908+ emulates the future kernel behaviour. This is ONLY for testing and
4909+ development purposes. It uses unsafe temporary file handling and thus must
4910+ not be used on production boxes!
4911+ * Ship preloadlib/* as examples in package 'apport' for people who want to
4912+ play with it until the new kernel arrives.
4913+ * Add preloadlib/README: Explain how to use the preload library.
4914+
4915+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 9 Aug 2006 12:12:20 +0200
4916+
4917+apport (0.8) edgy; urgency=low
4918+
4919+ * apport_utils.py:
4920+ - Add two new functions seen_report() and mark_report_seen().
4921+ - get_new_reports(): Only return unseen reports, add function
4922+ get_all_reports() for the old behaviour.
4923+ * gtk/apport-gtk.py: Do not delete reports after notifying about them. This
4924+ way, we do not need to add another button to save the report (which is
4925+ considered evil UI-wise), but still retain the report for filing and
4926+ examining later.
4927+ * Replace all usages of '/var/crash' to a new global variable in
4928+ apport_utils; this is particularly useful for test suites.
4929+ * apport.py: Overwrite old reports if they are seen.
4930+ * apport_utils.py: Add a test suite for all exported functions.
4931+
4932+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 8 Aug 2006 19:29:23 +0200
4933+
4934+apport (0.7) edgy; urgency=low
4935+
4936+ * Add apport_utils.py: Factorize out some common code of apport-gtk,
4937+ possible future frontends, and some backend tools.
4938+ * Add apport-checkreports: Test if there are new crash reports for the
4939+ invoking user. This factorizes out the tests we currently do in
4940+ update-notifier and makes them easier to change and keep in sync with
4941+ apport itself. Ship the script in the apport package.
4942+
4943+ -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 8 Aug 2006 17:24:46 +0200
4944+
4945+apport (0.6) edgy; urgency=low
4946+
4947+ * Add missing intltool build dependency to fix FTBFS.
4948+
4949+ -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 3 Aug 2006 09:15:42 +0200
4950+
4951+apport (0.5) edgy; urgency=low
4952+
4953+ * apport-gtk: Remove the crash report after it got displayed.
4954+ * apport-gtk: Fix exception on startup if no readable crash reports exist.
4955+
4956+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 2 Aug 2006 23:42:34 +0200
4957+
4958+apport (0.4) edgy; urgency=low
4959+
4960+ * Implement completely new UI according to the design described at
4961+ https://wiki.ubuntu.com/CrashReporting. Many thanks to Matthew Paul
4962+ Thomas!
4963+ * po/Makefile: Fix default target to not just break. Now it builds the .pot
4964+ file.
4965+ * debian/rules: Build .pot file on package build for automatic Rosetta
4966+ import.
4967+ * Bring German translations up to date.
4968+ * po/Makefile: Supply '--language=python' to intltool-update to properly
4969+ extract strings from apport-gtk.
4970+
4971+ -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 2 Aug 2006 23:14:58 +0200
4972+
4973+apport (0.3) edgy; urgency=low
4974+
4975+ * debian/rules clean: Also clean po/.
4976+ * debian/apport.cron.daily: Clean away empty files everytime.
4977+ * apport: Only consider a report as already present if it has a non-zero
4978+ size.
4979+ * apport: Set proper group for report files instead of 'root'.
4980+ * apport-gtk: Ignore 0-sized reports.
4981+ * apport-gtk: Add button to remove the current report (by truncating the
4982+ file to zero bytes; a user cannot unlink files in /var/crash).
4983+ * apport-gtk: Only display reports that the user can actually read.
4984+ * problem_report.py: Add 'binary' option to ProblemReport.load() to
4985+ optionally skip binary data.
4986+ * debian/rules: Clean stale *.pyc files.
4987+ * python-gtk: Do not load binary data (core dumps, etc.) to greatly speed up
4988+ the GUI. They are just gibberish anyway.
4989+ * apport: Switch from apt_pkg to apt, add SourcePackage: to reports.
4990+ * apport-gtk: Use source package name for the Malone URL.
4991+ * debian/rules: Call setup.py install with --no-compile to not ship *.pyc in
4992+ debs.
4993+
4994+ -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 31 Jul 2006 13:11:52 +0200
4995+
4996+apport (0.2) edgy; urgency=low
4997+
4998+ * debian/apport.cron.daily: Do not produce error messages if 'find' does not
4999+ find any crash reports.
5000+ * problem_report.py: Support iterators, add test case.
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches