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

Proposed by Marco Rodrigues
Status: Rejected
Rejected by: Martin Pitt
Proposed branch: lp:~gothicx/apport/fix_sentence_resume
Merge into: lp:~apport-hackers/apport/trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~gothicx/apport/fix_sentence_resume
Reviewer Review Type Date Requested Status
Martin Pitt (community) Disapprove
Review via email: mp+11100@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Martin Pitt (pitti) wrote :

Your current change doesn't really improve the string, IMHO. Let's discuss it in the bug first. Once we have a string, fixing it doesn't really require sending a patch, it's easy enough to change in the source.

Thanks! Martin

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

No response for four months, wrong branch target, and does not improve things IMHO. Closing.

review: Disapprove

Unmerged revisions

1507. By Marco Rodrigues

Fix the sentence to make it more obvious to understand and translate

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

Subscribers

People subscribed via source and target branches