Merge lp://staging/~mvo/apport/kernel-crashdump into lp://staging/~apport-hackers/apport/trunk

Proposed by Michael Vogt
Status: Merged
Merge reported by: Martin Pitt
Merged at revision: not available
Proposed branch: lp://staging/~mvo/apport/kernel-crashdump
Merge into: lp://staging/~apport-hackers/apport/trunk
Diff against target: None lines
To merge this branch: bzr merge lp://staging/~mvo/apport/kernel-crashdump
Reviewer Review Type Date Requested Status
Apport upstream developers Pending
Review via email: mp+8448@code.staging.launchpad.net
To post a comment you must log in.
Revision history for this message
Michael Vogt (mvo) wrote :

Please review/merge support for kernel crashdump retracing.

Overview:
* bin/kernel_crashdump:
  - needs the add_os_info() to get uname and architecture to make the retracing easier (and is cheap to obtain)
* bin/apport-retrace:
  - small changes to make it friendlier for the kernel output
* apport/report.py
  - add_kernel_info: that is not yet split up, but I think the final splitting depends on what information the kernel team wants here, it should do no harm to merge it and append later
* backends/packaging-apt-dpkg.py
  - uses hardcoded ddebs.ubuntu.com currently which is ugly. but kernel-image-debug packages are not in the Packages.gz so this method seems to be required for now

Thanks and feedback welcome

1462. By Michael Vogt

add crash_signature and simple test for it

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added directory '.bzr-builddeb'
=== added file '.bzr-builddeb/default.conf'
--- .bzr-builddeb/default.conf 1970-01-01 00:00:00 +0000
+++ .bzr-builddeb/default.conf 2009-04-06 23:58:27 +0000
@@ -0,0 +1,2 @@
1[BUILDDEB]
2merge = True
03
=== modified file 'TODO'
--- TODO 2009-04-11 18:37:37 +0000
+++ TODO 2009-05-07 06:19:04 +0000
@@ -13,3 +13,12 @@
1313
14hooks:14hooks:
15 - add hooks which run during program crash, to collect more runtime data15 - add hooks which run during program crash, to collect more runtime data
16
17retracers:
18 - cache Contents.gz
19
20hookutils:
21- run hooks for related packages in attach_related_packages
22
23apt-dpkg backend:
24- use python-apt's Version.get_source() instead of apt-get source
1625
=== modified file 'apport/hookutils.py'
--- apport/hookutils.py 2009-06-12 10:19:31 +0000
+++ apport/hookutils.py 2009-06-12 10:47:53 +0000
@@ -63,6 +63,43 @@
6363
64 report[key] = read_file(path)64 report[key] = read_file(path)
6565
66def attach_conffiles(report, package, conffiles=None):
67 '''Attach information about any modified or deleted conffiles'''
68
69 try:
70 dpkg = subprocess.Popen(['dpkg-query','-W','--showformat=${Conffiles}',
71 package], stdout=subprocess.PIPE, close_fds=True)
72 except OSError, e:
73 return 'Error: ' + str(e)
74
75 out = dpkg.communicate()[0]
76 if dpkg.returncode != 0:
77 return
78
79 for line in out.splitlines():
80 if not line:
81 continue
82 path, default_md5sum = line.strip().split()
83
84 if conffiles and path not in conffiles: continue
85
86 key = 'modified.conffile.' + path_to_key(path)
87
88 if os.path.exists(path):
89 contents = open(path).read()
90 m = hashlib.md5()
91 m.update(contents)
92 calculated_md5sum = m.hexdigest()
93
94 if calculated_md5sum != default_md5sum:
95 report[key] = contents
96 statinfo = os.stat(path)
97 mtime = datetime.datetime.fromtimestamp(statinfo.st_mtime)
98 mtime_key = 'mtime.conffile.' + path_to_key(path)
99 report[mtime_key] = mtime.isoformat()
100 else:
101 report[key] = '[deleted]'
102
66def attach_dmesg(report):103def attach_dmesg(report):
67 '''Attach information from the kernel ring buffer (dmesg).'''104 '''Attach information from the kernel ring buffer (dmesg).'''
68105
69106
=== added symlink 'apport/packaging_impl.py'
=== target is '../backends/packaging-apt-dpkg.py'
=== modified file 'apport/report.py'
--- apport/report.py 2009-06-23 09:53:14 +0000
+++ apport/report.py 2009-07-09 11:04:18 +0000
@@ -170,7 +170,12 @@
170 appends a list of all modified files'''170 appends a list of all modified files'''
171171
172 if not package:172 if not package:
173 package = fileutils.find_file_package(self['ExecutablePath'])173 # the kernel does not have a executable path but a package
174 if (not "ExecutablePath" in self and
175 self["ProblemType"] == "KernelCrash"):
176 package = self["Package"]
177 else:
178 package = fileutils.find_file_package(self['ExecutablePath'])
174 if not package:179 if not package:
175 return180 return
176181
@@ -393,6 +398,43 @@
393 self['ProcEnviron'] += '\n'398 self['ProcEnviron'] += '\n'
394 self['ProcEnviron'] += 'PATH=(custom, no user)'399 self['ProcEnviron'] += 'PATH=(custom, no user)'
395400
401 def add_kernel_crash_info(self, debugdir=None):
402 '''Add information from crash
403
404 This needs a VmCore in the Report
405 '''
406 if not self.has_key('VmCore'):
407 return
408 unlink_core = False
409 ret = False
410 try:
411 if hasattr(self['VmCore'], 'find'):
412 (fd, core) = tempfile.mkstemp()
413 os.write(fd, self['VmCore'])
414 os.close(fd)
415 unlink_core = True
416 kver = self['Uname'].split()[1]
417 command = ["crash",
418 "/usr/lib/debug/boot/vmlinux-%s" % kver,
419 core,
420 ]
421 p = subprocess.Popen(command,
422 stdin=subprocess.PIPE,
423 stdout=subprocess.PIPE,
424 stderr=subprocess.STDOUT)
425 p.stdin.write("bt -a -f\n")
426 p.stdin.write("ps\n")
427 p.stdin.write("runq\n")
428 p.stdin.write("quit\n")
429 # FIXME: split it up nicely etc
430 out = p.stdout.read()
431 ret = (p.wait() == 0)
432 self["Stacktrace"] = out
433 finally:
434 if unlink_core:
435 os.unlink(core)
436 return ret
437
396 def add_gdb_info(self, debugdir=None):438 def add_gdb_info(self, debugdir=None):
397 '''Add information from gdb.439 '''Add information from gdb.
398440
399441
=== modified file 'backends/packaging-apt-dpkg.py'
--- backends/packaging-apt-dpkg.py 2009-06-30 20:35:38 +0000
+++ backends/packaging-apt-dpkg.py 2009-07-09 11:04:18 +0000
@@ -323,6 +323,44 @@
323 # TODO: Ubuntu specific323 # TODO: Ubuntu specific
324 return 'linux-image-' + os.uname()[2]324 return 'linux-image-' + os.uname()[2]
325325
326 def _install_debug_kernel(self, report):
327 '''Install kernel debug package
328
329 Ideally this would be just another package but the kernel is
330 special in various ways currently so we can not use the apt
331 method.
332 '''
333 import urllib, apt_pkg
334 installed = []
335 outdated = []
336 kver = report['Uname'].split()[1]
337 arch = report['Architecture']
338 ver = report['Package'].split()[1]
339 debug_pkgname = 'linux-image-debug-%s' % kver
340 c = self._cache()
341 if c.has_key(debug_pkgname) and c[debug_pkgname].isInstalled:
342 #print "kernel ddeb already installed"
343 return (installed, outdated)
344 target_dir = apt_pkg.Config.FindDir("Dir::Cache::archives")+"/partial"
345 deb = "%s_%s_%s.ddeb" % (debug_pkgname, ver, arch)
346 # FIXME: this package is currently not in Packages.gz
347 url = "http://ddebs.ubuntu.com/pool/main/l/linux/%s" % deb
348 out = open(os.path.join(target_dir,deb), "w")
349 # urlretrieve does not return 404 in the headers so we use urlopen
350 u = urllib.urlopen(url)
351 if u.getcode() > 400:
352 raise IOError, "urllib returned %s for %s" % (u.getcode(), url)
353 while True:
354 block = u.read(8*1024)
355 if not block:
356 break
357 out.write(block)
358 out.flush()
359 ret = subprocess.call(["dpkg","-i",os.path.join(target_dir,deb)])
360 if ret == 0:
361 installed.append(deb.split("_")[0])
362 return (installed, outdated)
363
326 def install_retracing_packages(self, report, verbosity=0,364 def install_retracing_packages(self, report, verbosity=0,
327 unpack_only=False, no_pkg=False, extra_packages=[]):365 unpack_only=False, no_pkg=False, extra_packages=[]):
328 '''Install packages which are required to retrace a report.366 '''Install packages which are required to retrace a report.
@@ -339,6 +377,10 @@
339 377
340 Return a tuple (list of installed packages, string with outdated packages).378 Return a tuple (list of installed packages, string with outdated packages).
341 '''379 '''
380 if (report['ProblemType'] == 'KernelCrash' and
381 report['Package'].startswith("linux-image")):
382 return self._install_debug_kernel(report)
383
342 c = self._cache()384 c = self._cache()
343385
344 try:386 try:
345387
=== removed file 'backends/packaging_rpm.py'
--- backends/packaging_rpm.py 2009-04-11 16:40:06 +0000
+++ backends/packaging_rpm.py 1970-01-01 00:00:00 +0000
@@ -1,309 +0,0 @@
1'''A partial apport.PackageInfo class implementation for RPM, as found in
2Fedora, RHEL, openSUSE, SUSE Linux, and many other distributions.
3
4Copyright (C) 2007 Red Hat Inc.
5Copyright (C) 2008 Nikolay Derkach
6Author: Will Woods <wwoods@redhat.com>, Nikolay Derkach <nderkach@gmail.com>
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2 of the License, or (at your
11option) any later version. See http://www.gnu.org/copyleft/gpl.html for
12the full text of the license.
13'''
14
15# N.B. There's some distro-specific bits in here (e.g. is_distro_package()).
16# So this is actually an abstract base class (or a template, if you like) for
17# RPM-based distributions.
18# A proper implementation needs to (at least) set official_keylist to a list
19# of GPG keyids used by official packages. You might have to extend
20# is_distro_package() as well, if you don't sign all your official packages
21# (cough cough Fedora rawhide cough)
22
23# It'd be convenient to use rpmUtils from yum, but I'm trying to keep this
24# class distro-agnostic.
25import rpm, hashlib, os, stat, subprocess
26
27class RPMPackageInfo:
28 '''Partial apport.PackageInfo class implementation for RPM, as
29 found in Fedora, RHEL, CentOS, etc.'''
30
31 # Empty keylist. Should contain a list of key ids (8 lowercase hex digits).
32 # e.g. official_keylist = ('30c9ecf8','4f2a6fd2','897da07a','1ac70ce6')
33 official_keylist = ()
34
35 def __init__(self):
36 self.ts = rpm.TransactionSet() # connect to the rpmdb
37 self._mirror = None
38
39 def get_version(self, package):
40 '''Return the installed version of a package.'''
41 hdr = self._get_header(package)
42 if hdr == None:
43 raise ValueError
44 # Note - "version" here seems to refer to the full EVR, so..
45 if not hdr['e']:
46 return hdr['v'] + '-' + hdr['r']
47 if not hdr['v'] or not hdr['r']:
48 return None
49 else:
50 return hdr['e'] + ':' + hdr['v'] + '-' + hdr['r']
51
52 def get_available_version(self, package):
53 '''Return the latest available version of a package.'''
54 # used in report.py, which is used by the frontends
55 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
56
57 def get_dependencies(self, package):
58 '''Return a list of packages a package depends on.'''
59 hdr = self._get_header(package)
60 # parse this package's Requires
61 reqs=[]
62 for r in hdr['requires']:
63 if r.startswith('rpmlib') or r.startswith('uname('):
64 continue # we've got rpmlib, thanks
65 if r[0] == '/': # file requires
66 req_heads = self._get_headers_by_tag('basenames',r)
67 else: # other requires
68 req_heads = self._get_headers_by_tag('provides',r)
69 for rh in req_heads:
70 rh_envra = self._make_envra_from_header(rh)
71 if rh_envra not in reqs:
72 reqs.append(rh_envra)
73 return reqs
74
75 def get_source(self, package):
76 '''Return the source package name for a package.'''
77 hdr = self._get_header(package)
78 return hdr['sourcerpm']
79
80 def get_architecture(self, package):
81 '''Return the architecture of a package.
82
83 This might differ on multiarch architectures (e. g. an i386 Firefox
84 package on a x86_64 system)'''
85 # Yeah, this is kind of redundant, as package is ENVRA, but I want
86 # to do this the right way (in case we change what 'package' is)
87 hdr = self._get_header(package)
88 return hdr['arch']
89
90 def get_files(self, package):
91 '''Return list of files shipped by a package.'''
92 hdr = self._get_header(package)
93 files = []
94 for (f, mode) in zip(hdr['filenames'],hdr['filemodes']):
95 if not stat.S_ISDIR(mode):
96 files.append(f)
97 return files
98
99 def get_modified_files(self, package):
100 '''Return list of all modified files of a package.'''
101 hdr = self._get_header(package)
102
103 files = hdr['filenames']
104 mtimes = hdr['filemtimes']
105 md5s = hdr['filemd5s']
106
107 modified = []
108 for i in xrange(len(files)):
109 # Skip files we're not tracking md5s for
110 if not md5s[i]: continue
111 # Skip files we can't read
112 if not os.access(files[i],os.R_OK): continue
113 # Skip things that aren't real files
114 s = os.stat(files[i])
115 if not stat.S_ISREG(s.st_mode): continue
116 # Skip things that haven't been modified
117 if mtimes[i] == s.st_mtime: continue
118 # Oh boy, an actual possibly-modified file. Check the md5sum!
119 if not self._checkmd5(files[i],md5s[i]):
120 modified.append(files[i])
121
122 return modified
123
124 def get_file_package(self, file):
125 '''Return the package a file belongs to, or None if the file is not
126 shipped by any package.
127
128 Under normal use, the 'file' argument will always be the executable
129 that crashed.
130 '''
131 # The policy for handling files which belong to multiple packages depends on the distro
132 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
133
134 def get_system_architecture(self):
135 '''Return the architecture of the system, in the notation used by the
136 particular distribution.'''
137 rpmarch = subprocess.Popen(['rpm', '--eval', '%_target_cpu'],
138 stdout=subprocess.PIPE)
139 arch = rpmarch.communicate()[0].strip()
140 return arch
141
142 def is_distro_package(self, package):
143 '''Check if a package is a genuine distro package (True) or comes from
144 a third-party source.'''
145 # This is a list of official keys, set by the concrete subclass
146 if not self.official_keylist:
147 raise Exception, 'Subclass the RPM implementation for your distro!'
148 hdr = self._get_header(package)
149 if not hdr:
150 return False
151 # Check the GPG sig and key ID to see if this package was signed
152 # with an official key.
153 if hdr['siggpg']:
154 # Package is signed
155 keyid = hdr['siggpg'][13:17].encode('hex')
156 if keyid in self.official_keylist:
157 return True
158 return False
159
160 def set_mirror(self, url):
161 '''Explicitly set a distribution mirror URL for operations that need to
162 fetch distribution files/packages from the network.
163
164 By default, the mirror will be read from the system configuration
165 files.'''
166 # FIXME C&P from apt-dpkg implementation, might move to subclass
167 self._mirror = url
168
169 def get_source_tree(self, srcpackage, dir, version=None):
170 '''Download given source package and unpack it into dir (which should
171 be empty).
172
173 This also has to care about applying patches etc., so that dir will
174 eventually contain the actually compiled source.
175
176 If version is given, this particular version will be retrieved.
177 Otherwise this will fetch the latest available version.
178
179 Return the directory that contains the actual source root directory
180 (which might be a subdirectory of dir). Return None if the source is
181 not available.'''
182 # Used only by apport-retrace.
183 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
184
185 def compare_versions(self, ver1, ver2):
186 '''Compare two package versions.
187
188 Return -1 for ver < ver2, 0 for ver1 == ver2, and 1 for ver1 > ver2.'''
189 # Used by crashdb.py (i.e. the frontends)
190 # I could duplicate stringToVersion/compareEVR from rpmUtils.misc,
191 # but I hate duplicating code. So if you don't want to require rpmUtils
192 # you can implement this function yourself. Probably you've got
193 # equivalent code in whatever your distro uses instead of yum anyway.
194 raise NotImplementedError, 'method must be implemented by distro-specific RPMPackageInfo subclass'
195
196 def package_name_glob(self, glob):
197 '''Return known package names which match given glob.'''
198
199 raise NotImplementedError, 'TODO'
200
201 #
202 # Internal helper methods. These are only single-underscore, so you can use
203 # use them in extending/overriding the methods above in your subclasses
204 #
205
206 def _get_headers_by_tag(self,tag,arg):
207 '''Get a list of RPM headers by doing dbMatch on the given tag and
208 argument.'''
209 matches = self.ts.dbMatch(tag,arg)
210 if matches.count() == 0:
211 raise ValueError, 'Could not find package with %s: %s' % (tag,arg)
212 return [m for m in matches]
213
214 def _get_header(self,envra):
215 '''Get the RPM header that matches the given ENVRA.'''
216
217 querystr = envra
218 qlen = len(envra)
219 while qlen > 0:
220 mi = impl.ts.dbMatch('name', querystr)
221 hdrs = [m for m in mi]
222 if len(hdrs) > 0:
223 # yay! we found something
224 # Unless there's some rpmdb breakage, you should have one header
225 # here. If you do manage to have two rpms with the same ENVRA,
226 # who cares which one you get?
227 h = hdrs[0]
228 break
229
230 # remove the last char of querystr and retry the search
231 querystr = querystr[0:len(querystr)-1]
232 qlen = qlen - 1
233
234 if qlen == 0:
235 raise ValueError, 'No headers found for this envra: %s' % envra
236 return h
237
238 def _make_envra_from_header(self,h):
239 '''Generate an ENVRA string from an rpm header'''
240 nvra="%s-%s-%s.%s" % (h['n'],h['v'],h['r'],h['arch'])
241 if h['e']:
242 envra = "%s:%s" % (h['e'],nvra)
243 else:
244 envra = nvra
245 return envra
246
247 def _checkmd5(self,filename,filemd5):
248 '''Internal function to check a file's md5sum'''
249 m = hashlib.md5()
250 f = open(filename)
251 data = f.read()
252 f.close()
253 m.update(data)
254 return (filemd5 == m.hexdigest())
255
256impl = RPMPackageInfo()
257
258#
259# Unit test
260#
261
262if __name__ == '__main__':
263 import unittest
264
265 class RPMPackageInfoTest(unittest.TestCase):
266
267 def test_get_dependencies(self):
268 '''get_dependencies().'''
269
270 deps = impl.get_dependencies('bash')
271 self.assertNotEqual(deps, [])
272
273 def test_get_header(self):
274 '''_get_header().'''
275
276 hdr = impl._get_header('alsa-utils')
277 self.assertEqual(hdr['n'], 'alsa-utils')
278
279 def test_get_headers_by_tag(self):
280 '''_get_headers_by_tag().'''
281
282 headersByTag = impl._get_headers_by_tag('basenames','/bin/bash')
283 self.assertEqual(len(headersByTag), 1)
284 self.assert_(headersByTag[0]['n'].startswith('bash'))
285
286 def test_get_system_architecture(self):
287 '''get_system_architecture().'''
288
289 arch = impl.get_system_architecture()
290 # must be nonempty without line breaks
291 self.assertNotEqual(arch, '')
292 self.assert_('\n' not in arch)
293
294 def test_get_version(self):
295 '''get_version().'''
296
297 ver = impl.get_version('bash')
298 self.assertNotEqual(ver, None)
299 ver = impl.get_version('alsa-utils')
300 self.assertNotEqual(ver, None)
301
302
303 # only execute if rpm is available
304 try:
305 if subprocess.call(['rpm', '--help'], stdout=subprocess.PIPE,
306 stderr=subprocess.PIPE) == 0:
307 unittest.main()
308 except OSError:
309 pass
3100
=== modified file 'bin/apport-retrace'
--- bin/apport-retrace 2009-04-05 18:21:18 +0000
+++ bin/apport-retrace 2009-07-09 10:00:51 +0000
@@ -104,8 +104,9 @@
104104
105 print '--- stack trace ---'105 print '--- stack trace ---'
106 print report['Stacktrace']106 print report['Stacktrace']
107 print '--- thread stack trace ---'107 if report.has_key('ThreadedStacktrace'):
108 print report['ThreadStacktrace']108 print '--- thread stack trace ---'
109 print report['ThreadStacktrace']
109 print '---'110 print '---'
110111
111 ch = None112 ch = None
@@ -243,11 +244,16 @@
243244
244# sanity checks245# sanity checks
245required_fields = set(['CoreDump', 'ExecutablePath', 'Package'])246required_fields = set(['CoreDump', 'ExecutablePath', 'Package'])
246if not required_fields.issubset(set(report.keys())):247if report['ProblemType'] == 'KernelCrash':
248 if not set(['Package','VmCore']).issubset(set(report.keys())):
249 print >> sys.stderr, 'report file does not contain the required fields'
250 sys.exit(0)
251elif not required_fields.issubset(set(report.keys())):
247 print >> sys.stderr, 'report file does not contain required fields: ' + \252 print >> sys.stderr, 'report file does not contain required fields: ' + \
248 ' '.join(required_fields)253 ' '.join(required_fields)
249 sys.exit(0)254 sys.exit(0)
250255
256
251(installed, outdated_msg) = apport.packaging.install_retracing_packages(report,257(installed, outdated_msg) = apport.packaging.install_retracing_packages(report,
252 options.verbose, options.unpack_only, options.no_pkg,258 options.verbose, options.unpack_only, options.no_pkg,
253 options.extra_packages)259 options.extra_packages)
@@ -265,6 +271,7 @@
265 # regenerate gdb info271 # regenerate gdb info
266 try:272 try:
267 report.add_gdb_info()273 report.add_gdb_info()
274 report.add_kernel_crash_info()
268 gen_source_stacktrace(report)275 gen_source_stacktrace(report)
269 except AssertionError:276 except AssertionError:
270 if outdated_msg:277 if outdated_msg:
@@ -283,8 +290,9 @@
283if options.stdout:290if options.stdout:
284 print '--- stack trace ---'291 print '--- stack trace ---'
285 print report['Stacktrace']292 print report['Stacktrace']
286 print '--- thread stack trace ---'293 if report.has_key('ThreadedStacktrace'):
287 print report['ThreadStacktrace']294 print '--- thread stack trace ---'
295 print report['ThreadStacktrace']
288 if report.has_key('StacktraceSource'):296 if report.has_key('StacktraceSource'):
289 print '--- source code stack trace ---'297 print '--- source code stack trace ---'
290 print report['StacktraceSource']298 print report['StacktraceSource']
291299
=== modified file 'bin/kernel_crashdump'
--- bin/kernel_crashdump 2009-06-26 06:37:25 +0000
+++ bin/kernel_crashdump 2009-07-09 10:52:51 +0000
@@ -23,6 +23,7 @@
23pr['Package'] = apport.packaging.get_kernel_package()23pr['Package'] = apport.packaging.get_kernel_package()
2424
25pr['VmCore'] = (vmcore_path,)25pr['VmCore'] = (vmcore_path,)
26pr.add_os_info()
26if os.path.exists(vmcore_path + '.log'):27if os.path.exists(vmcore_path + '.log'):
27 pr['VmCoreLog'] = (vmcore_path + '.log',)28 pr['VmCoreLog'] = (vmcore_path + '.log',)
2829
2930
=== added file 'data/general-hooks/automatix.py'
--- data/general-hooks/automatix.py 1970-01-01 00:00:00 +0000
+++ data/general-hooks/automatix.py 2009-03-10 17:32:02 +0000
@@ -0,0 +1,26 @@
1'''Do not send any crashes when automatix is or was installed, since it usually
2causes a mess in the system and causes a lot of package installation failures.
3
4Copyright (C) 2007 Canonical Ltd.
5Author: Martin Pitt <martin.pitt@ubuntu.com>
6
7This program is free software; you can redistribute it and/or modify it
8under the terms of the GNU General Public License as published by the
9Free Software Foundation; either version 2 of the License, or (at your
10option) any later version. See http://www.gnu.org/copyleft/gpl.html for
11the full text of the license.
12'''
13
14import apport.packaging
15
16def add_info(report):
17 try:
18 if apport.packaging.get_version('automatix') or \
19 apport.packaging.get_version('automatix2') or \
20 apport.packaging.get_version('ultamatix'):
21 report['UnreportableReason'] = 'You have installed automatix or ultamatix on your \
22system. This is known to cause a lot of instability, thus problem reports \
23will not be sent to the %s developers.' % report.get('DistroRelease',
24 'distribution').split()[0]
25 except ValueError, e:
26 return
027
=== added file 'data/general-hooks/ubuntu.py'
--- data/general-hooks/ubuntu.py 1970-01-01 00:00:00 +0000
+++ data/general-hooks/ubuntu.py 2009-06-03 07:42:02 +0000
@@ -0,0 +1,31 @@
1'''Attach generally useful information, not specific to any package.
2
3Copyright (C) 2009 Canonical Ltd.
4Author: Matt Zimmerman <mdz@canonical.com>
5
6This program is free software; you can redistribute it and/or modify it
7under the terms of the GNU General Public License as published by the
8Free Software Foundation; either version 2 of the License, or (at your
9option) any later version. See http://www.gnu.org/copyleft/gpl.html for
10the full text of the license.
11'''
12
13import apport.packaging
14from apport.hookutils import *
15
16def add_info(report):
17 # crash reports from live system installer often expose target mount
18 for f in ('ExecutablePath', 'InterpreterPath'):
19 if f in report and report[f].startswith('/target/'):
20 report[f] = report[f][7:]
21
22 # if we are running from a live system, add the build timestamp
23 attach_file_if_exists(report, '/cdrom/.disk/info', 'LiveMediaBuild')
24
25 # This includes the Ubuntu packaged kernel version
26 attach_file_if_exists(report, '/proc/version_signature', 'ProcVersionSignature')
27
28 if 'Package' in report:
29 package = report['Package'].split()[0]
30 if package and 'attach_conffiles' in dir():
31 attach_conffiles(report, package)
032
=== added file 'data/package-hooks/source_linux.py'
--- data/package-hooks/source_linux.py 1970-01-01 00:00:00 +0000
+++ data/package-hooks/source_linux.py 2009-04-28 17:09:17 +0000
@@ -0,0 +1,40 @@
1'''Apport package hook for the Linux kernel.
2
3(c) 2008 Canonical Ltd.
4Contributors:
5Matt Zimmerman <mdz@canonical.com>
6Martin Pitt <martin.pitt@canonical.com>
7
8This program is free software; you can redistribute it and/or modify it
9under the terms of the GNU General Public License as published by the
10Free Software Foundation; either version 2 of the License, or (at your
11option) any later version. See http://www.gnu.org/copyleft/gpl.html for
12the full text of the license.
13'''
14
15import os
16import subprocess
17from apport.hookutils import *
18
19def add_info(report):
20 attach_hardware(report)
21
22 attach_file_if_exists(report, "/etc/initramfs-tools/conf.d/resume",
23 key="HibernationDevice")
24
25 version_signature = report.get('ProcVersionSignature', '')
26 if not version_signature.startswith('Ubuntu '):
27 report['UnreportableReason'] = _('The running kernel is not an Ubuntu kernel')
28 return
29
30 uname_release = os.uname()[2]
31 lrm_package_name = 'linux-restricted-modules-%s' % uname_release
32 lbm_package_name = 'linux-backports-modules-%s' % uname_release
33
34 attach_related_packages(report, [lrm_package_name, lbm_package_name])
35
36if __name__ == '__main__':
37 report = {}
38 add_info(report)
39 for key in report:
40 print '%s: %s' % (key, report[key].split('\n', 1)[0])
041
=== added directory 'debian'
=== added file 'debian/apport-gtk.install'
--- debian/apport-gtk.install 1970-01-01 00:00:00 +0000
+++ debian/apport-gtk.install 2009-06-29 09:59:56 +0000
@@ -0,0 +1,2 @@
1usr/share/apport/*gtk*
2usr/share/applications/*gtk-mime*
03
=== added file 'debian/apport-kde.install'
--- debian/apport-kde.install 1970-01-01 00:00:00 +0000
+++ debian/apport-kde.install 2009-06-29 09:59:56 +0000
@@ -0,0 +1,7 @@
1usr/share/apport/*kde*
2usr/share/apport/progress.ui
3usr/share/apport/error.ui
4usr/share/apport/bugreport.ui
5usr/share/apport/choices.ui
6usr/share/applications/apport-kde-mime.desktop
7usr/share/applications/apport-kde-mimelnk.desktop usr/share/mimelnk/text
08
=== added file 'debian/apport-retrace.install'
--- debian/apport-retrace.install 1970-01-01 00:00:00 +0000
+++ debian/apport-retrace.install 2009-04-05 18:30:06 +0000
@@ -0,0 +1,3 @@
1usr/share/apport/apport-retrace usr/bin
2usr/share/apport/dupdb-admin usr/bin
3../local/apport-chroot usr/bin
04
=== added file 'debian/apport-retrace.manpages'
--- debian/apport-retrace.manpages 1970-01-01 00:00:00 +0000
+++ debian/apport-retrace.manpages 2009-04-05 18:30:06 +0000
@@ -0,0 +1,3 @@
1man/apport-retrace.1
2man/dupdb-admin.1
3debian/local/apport-chroot.1
04
=== added file 'debian/apport.install'
--- debian/apport.install 1970-01-01 00:00:00 +0000
+++ debian/apport.install 2009-04-05 18:15:48 +0000
@@ -0,0 +1,21 @@
1etc/default
2etc/init.d
3etc/cron.daily
4usr/share/apport/apport
5usr/share/apport/apport-checkreports
6usr/share/apport/package_hook
7usr/share/apport/kernel_crashdump
8usr/share/apport/kernel_oops
9usr/share/apport/gcc_ice_hook
10usr/share/apport/apportcheckresume
11usr/share/apport/apport-unpack usr/bin
12usr/share/apport/testsuite/
13usr/share/doc/apport
14usr/share/locale
15usr/share/icons
16usr/share/mime
17usr/share/apport/package-hooks
18usr/share/apport/general-hooks
19usr/share/apport/*cli* usr/bin/
20../local/ubuntu-bug usr/bin
21../local/apport-collect usr/bin
022
=== added file 'debian/apport.links'
--- debian/apport.links 1970-01-01 00:00:00 +0000
+++ debian/apport.links 2009-04-23 22:02:32 +0000
@@ -0,0 +1,1 @@
1/usr/share/apport/package-hooks/source_linux.py /usr/share/apport/package-hooks/source_linux-meta.py
02
=== added file 'debian/apport.logrotate'
--- debian/apport.logrotate 1970-01-01 00:00:00 +0000
+++ debian/apport.logrotate 2006-09-10 20:59:21 +0000
@@ -0,0 +1,9 @@
1/var/log/apport.log {
2 daily
3 rotate 7
4 delaycompress
5 compress
6 notifempty
7 missingok
8}
9
010
=== added file 'debian/apport.manpages'
--- debian/apport.manpages 1970-01-01 00:00:00 +0000
+++ debian/apport.manpages 2009-02-19 12:28:59 +0000
@@ -0,0 +1,4 @@
1man/apport-unpack.1
2man/apport-cli.1
3debian/local/ubuntu-bug.1
4debian/local/apport-collect.1
05
=== added file 'debian/changelog'
--- debian/changelog 1970-01-01 00:00:00 +0000
+++ debian/changelog 2009-06-30 20:39:23 +0000
@@ -0,0 +1,3855 @@
1apport (1.5-0ubuntu2) karmic; urgency=low
2
3 * Merge fixes from trunk:
4 - packaging-apt-dpkg.py: Fix install_retracing_packages() for pre-0.7.9
5 python-apt API.
6 - Sort the list of dependencies so it's easier to scan (LP: #391021)
7
8 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 30 Jun 2009 22:39:18 +0200
9
10apport (1.5-0ubuntu1) karmic; urgency=low
11
12 * New upstream release:
13 - Drop all Makefiles, po/POTFILES.in, and most code from setup.py, and use
14 DistUtilsExtras.auto which "just does the right thing" for most build
15 system tasks. This requires python-distutils-extra >= 2.2, see
16 https://launchpad.net/python-distutils-extra
17 - Move all test scripts into test/, to unclutter source tree.
18 - setup.py now auto-detects the required packaging backend if
19 apport/packaging_impl.py is not manually installed.
20 * debian/control: Add python-distutils-extra build dependency.
21 * debian/rules: Drop stuff which is now properly done by the upstream build
22 system.
23 * Drop debian/apport.examples, preloadlib died long ago.
24 * Adapt debian/apport-{gtk,kde}.install to new upstream build system, which
25 now installs the .desktop files itself.
26
27 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 29 Jun 2009 12:00:21 +0200
28
29apport (1.4-0ubuntu1) karmic; urgency=low
30
31 * New upstream release. Compared to our previous snapshot, this changes:
32 - Replace Qt4 frontend with KDE frontend, thanks to Richard Johnson!
33 - apport/ui.py, run_report_bug(): Clean up PID information collection.
34 - gtk/apport-gtk.ui: Drop invalid icon reference. (LP: #389064)
35 - ui.py: Do not reject non-distro package reports if report sets CrashDB
36 (for third-party destination). (LP: #391015)
37 - bin/kernel_crashdump: Use packaging API properly.
38 - apport-gtk.ui: Drop erroneous translatable flag from stock buttons.
39 - Update German translations.
40 * debian/*: qt → kde, add transitional package for apport-qt.
41 * Drop backends/packaging_rpm.py. We don't use it in the Ubuntu package at
42 all, and it's still in trunk.
43 * debian/rules: Drop some deprecated dh_* calls, cdbs's debhelper.mk has
44 done them for a long time.
45 * debian/control: Bump Standards-Version to 3.8.2 (no changes necessary).
46 * debian/control: Replace URLs in descriptions with proper Homepage: field.
47
48 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 26 Jun 2009 10:44:54 +0200
49
50apport (1.3-0ubuntu2) karmic; urgency=low
51
52 * debian/local/apport-collect: Pass None as HookUI object. This will crash
53 with interactive hooks, but is a good enough immediate bandaid.
54 (LP: #385811)
55 * Merge fixes from trunk:
56 - packaging-apt-dpkg.py: Add backwards compatibility code for python-apt <
57 0.7.9 to not break backportability.
58 - hookutils.py, command_output(): Force LC_MESSAGES=C, to avoid translated
59 output in bug reports. (LP: #383230)
60 - apport-gtk.ui: Make details window resizable, and lower default size, so
61 that it will fit on small screens. (LP: #365517)
62
63 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 12 Jun 2009 12:47:59 +0200
64
65apport (1.3-0ubuntu1) karmic; urgency=low
66
67 * New upstream release. Compared to our bzr snapshot, this has:
68 - Interactive package hooks:
69 + Add apport.ui.HookUI class which provides GUI functionality such as
70 yes/no
71 questions or file dialogs to hooks.
72 + add_info() in package hooks now can (optionally) take a second argument
73 which is the HookUI instance.
74 + See doc/package-hooks.txt for details.
75 + See UbuntuSpec:desktop-karmic-symptom-based-bug-reporting
76 - New function apport.hookutils.root_command_output() to run a command as root,
77 through gksu/kdesudo/sudo, depending on the desktop environment.
78
79 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 10 Jun 2009 16:49:13 +0200
80
81apport (1.2.1-0ubuntu3) karmic; urgency=low
82
83 * debian/control: Bump Standards-Version to 3.8.1 (no changes necessary).
84 * debian/control: Bump debhelper dependency for dh_icons, to satisfy
85 lintian.
86 * general-hooks/ubuntu.py: Fix IndexError crash if report does not have a
87 Package field. Check whether we actually have attach_conffiles() (which is
88 not the case when running the upstream version).
89 * Merge trunk:
90 - launchpad.py: Fix crash for unset titles.
91 - Add segfault analysis hook for quick segv reviews. Thanks to Kees Cook!
92 - run-tests: Replace hardcoded Python path with dynamically detected path.
93
94 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 03 Jun 2009 09:52:03 +0200
95
96apport (1.2.1-0ubuntu2) karmic; urgency=low
97
98 * debian/control: Update Vcs-Bzr: for new location (moved from project
99 branch to package branch).
100 * Merge bug fixes from trunk:
101 - apport-cli: Fix report saving in "bug report" mode. (LP: #353253)
102 - Drop "UnsupportableReason" field, it is too similar to
103 UnreportableReason and just confusing.
104 - ui.py: Check UnreportableReason for run_report_bug() as well.
105 (LP: #361359)
106 - general-hooks/generic.py: Do not report problems with low free space on
107 / or /home. (LP: #381047)
108 - launchpad.py: Do not overwrite report['Title'].
109 - launchpad.py: Repair support for extra tags.
110 - New function apport.hookutils.root_command_output() to run a command as
111 root, through gksu/kdesudo/sudo, depending on the desktop environment.
112 (Part of UbuntuSpec:desktop-karmic-symptom-based-bug-reporting)
113 - launchpad.py: Fetch DpkgTerminalLog. (LP: #382589)
114 - launchpad.py: More robust download(), fixes other part of (LP: #382589)
115 - problem_report.py: Allow dashes and underscores in key names. Update
116 doc/data-format.tex accordingly. (LP: #380811)
117
118 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 02 Jun 2009 11:59:41 +0200
119
120apport (1.2.1-0ubuntu1) karmic; urgency=low
121
122 * New upstream release:
123 - Moving away from deprecated APIs:
124 + packaging-apt-dpkg.py: Use python-apt >= 0.7.9 official API and drop
125 usage of internal symbols.
126 + hookutils.py: Drop hal related functions and queries, replace with
127 udev database, udev log file, and DMI information from sysfs.
128 + gtk UI: Convert from libglade to gtk.Builder.
129 - Bug fixes:
130 + hookutils.py: Drop /proc/version_signature collection, it is Ubuntu
131 specific.
132 + apportcheckresume: Fix log collection from pm-utils.
133 + Fix various crashes and report properties for reporting against
134 uninstalled packages.
135 * debian/control: Drop python-glade2 dependency, bump python-gtk2 dependency
136 to ensure availability of gtk.Builder.
137 * hookutils, attach_conffiles(): Remove leftover debugging spew.
138 * debian/apport-qt.install: Install the individual Qt .ui files instead of
139 *.ui, since GTK's are now also called *.ui.
140
141 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 15 May 2009 11:28:34 +0200
142
143apport (1.1.1-0ubuntu2) karmic; urgency=low
144
145 [ Martin Pitt ]
146 * hookutils.py: Do not attach /proc/version_signature, it's Ubuntu specific.
147 (Merged from trunk). Instead, attach it in general-hooks/ubuntu.py.
148 * general-hooks/ubuntu.py: Attach package conffile information.
149 * debian/local/apport-collect: Add workaround for launchpadlib bug
150 LP#353805, to avoid crashing with non-UTF8 attachments. (LP: #368004)
151 * debian/local/apport-collect: Fix import of launchpadlib's HTTPError.
152 * apport/hookutils.py, attach_conffiles(): Ignore empty lines from
153 dpkg-query output.
154 * general-hooks/ubuntu.py: Strip off '/target' prefix from ExecutablePath
155 and InterpreterPath, to correctly process crash reports from the live
156 system installer.
157 * apport/hookutils.py, attach_conffiles(): Do not use command_output(),
158 since that causes error messages to get parsed as conffiles. Use
159 subprocess properly.
160 * backends/packaging-apt-dpkg.py: Replace deprecated python-apt properties
161 with current ones (merged from trunk). Update python-apt dependency to
162 >= 0.7.9.
163 * packaging-apt-dpkg.py, get_modified_files(): Do not show package list file
164 as modified if the package is not installed (merged from trunk).
165 (LP: #364533)
166 * backends/packaging-apt-dpkg.py, install_retracing_packages(): Fix syntax
167 error which broke the retracers.
168
169 [ Andy Whitcroft ]
170 * bin/apportcheckresume: the suspend _and_ hibernate logs are both in
171 pm-suspend.log.
172 * bin/apportcheckresume: remove redunant check for file before attaching
173 stress log.
174
175 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 13 May 2009 15:22:53 +0200
176
177apport (1.1.1-0ubuntu1) karmic; urgency=low
178
179 [ Martin Pitt ]
180 * New upstream security update:
181 - etc/cron.daily/apport: Only attempt to remove files and symlinks, do not
182 descend into subdirectories of /var/crash/. Doing so might be exploited by
183 a race condition between find traversing a huge directory tree, changing
184 an existing subdir into a symlink to e. g. /etc/, and finally getting
185 that piped to rm. This also changes the find command to not use GNU
186 extensions. Thanks to Stephane Chazelas for discovering this!
187 (LP: #357024, CVE-2009-1295)
188 - Other fixes were already cherrypicked in the previous upload.
189
190 [ Matt Zimmerman ]
191 * package-hooks/source_linux.py: Attach info for linux-restricted-modules
192 and linux-backports-modules
193
194 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 30 Apr 2009 09:08:29 +0200
195
196apport (1.1-0ubuntu1) karmic; urgency=low
197
198 * New upstream release:
199 - Drop some remaining distro specific pieces of code from non-backends.
200 - Add hookutils methods for attaching relevant packages, greatly improve
201 attach_alsa() for sound problem debugging.
202 - Move launchpad crash database implementation from ever-breaking
203 python-launchpad-bugs (screenscraping) to launchpadlib (official and
204 stable Launchpad API). (LP: #353879)
205 - Add new field Report.pid which gets set on add_proc_info() and can be
206 used by hooks.
207 - setup.py: Properly clean up all generated files, install missing
208 mimetypes/text-x-apport.svg icon symlink.
209 - Add README file.
210 - Add translations from Launchpad.
211 - Remove preloadlib/*; it's undermaintained, and not really useful any
212 more these days.
213 - Various bug fixes; most visible being the misnamed
214 etc/default/apport.default file (which should just be
215 etc/default/apport).
216 * Merge some bug fixes from trunk:
217 - launchpad.py: Send and read Date: field again, reverting r1128; it is
218 useful after all. (LP: #349139)
219 - report.py, add_proc_info(): Only add ProcAttrCurrent if it is not
220 "unconfined".
221 - ui.py: Detect invalid PIDs (such as for kernel processes) and give a
222 friendly error message. (LP: #360608)
223 - report.py, add_hooks_info(): Always run common hooks, and run source
224 package hooks if we do not have a binary package name. (LP: #350131)
225 - launchpad.py: Consider socket errors when connecting as transient, so
226 that crash-digger doesn't stop completely on them.
227 * Drop debian/apport.README.Debian, superseded by upstream README.
228 * Drop debian/apport.links, done by upstream setup.py now.
229 * debian/rules, debian/apport.preinst: Drop upgrade fix for misnamed default
230 file again, was only necessary for intra-Jaunty upgrades.
231 * debian/control: python-launchpad-bugs → python-launchpadlib dependencies.
232 * debian/local/apport-collect: Drop launchpadlib login code, just use the
233 CrashDatabase implementation from apport/crashdb_impl/launchpad.py.
234 * Make package backportable to hardy and intrepid:
235 - debian/control: Relax python-central buil-dependency to 0.5.6.
236 - debian/rules: Determine DH_PYCENTRAL value ("include-links" vs.
237 "nomove") based on the installed pycentral version.
238 - debian/rules: Only supply --install-layout=deb when Python version is
239 2.6.
240 * apport/hookutils.py: Add docstring for attach_hardware, thanks Matt
241 Zimmerman! (Merged from lp:~mdz/apport/hookutils)
242 * apport/crashdb_impl/launchpad.py: Support older wadllib API
243 where bug.date_created was a string instead of a datetime object.
244 (Cherrypicked from trunk).
245 * debian/control: Drop apport dependency to python-xdg, it's not required.
246 (LP: #354172)
247 * debian/control: Drop gdb from Depends: to Recommends:. (LP: #354172)
248 * debian/local/apport-collect: Print a friendly error message instead of
249 crashing if the bug number is not an integer. (LP: #351050)
250 * debian/local/apport-collect: Change incomplete tasks back to "New" after
251 data collection. (LP: #363126)
252 * debian/apport.links: source_linux-meta.py -> source_linux.py package hook,
253 so that apport-collect works on "linux" source bug tasks. These get
254 opportunistically translated into binary packages, but the binary "linux"
255 is built by the source "linux-meta". (LP: #350131)
256 * debian/local/setup-apport-retracer:
257 - Use ports.ubuntu.com for non-{i386,amd64,lpia}.
258 - Set up Jaunty by default.
259 - Fix test for being in local unpackaged apport source tree.
260 - Drop installation of python-launchpad-bugs.
261 - Install bzr branches/packages necessary for launchpad, in a shared
262 ~/launchpadlib/ tree: launchpadlib, wadllib, oauth, lazr.uri, httplib2,
263 simplejson.
264 - Clean up apport-chroot calling for extra packages.
265
266 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 28 Apr 2009 10:50:49 +0200
267
268apport (1.0-0ubuntu5) jaunty; urgency=low
269
270 [ Martin Pitt ]
271 * Rename etc/default/apport.default to etc/default/apport (brown paperbag),
272 and add debian/apport.preinst to remove the apport.default file on
273 upgrades. (LP: #361543)
274 * debian/rules: Call dh_installinit with --onlyscripts, so that the package
275 calls update-rc.d again. This fixes the calling of init script again,
276 which got broken in 1.0-0ubuntu1. (LP: #361579)
277
278 [ Matt Zimmerman ]
279 * package-hooks/source_linux.py: Attach /etc/initramfs-tools/conf.d/resume to
280 show the resume device for hibernation
281
282 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 15 Apr 2009 22:36:33 +0200
283
284apport (1.0-0ubuntu4) jaunty; urgency=low
285
286 * etc/default/apport.default: Disable Apport by default for the final
287 release.
288
289 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 14 Apr 2009 11:47:29 +0200
290
291apport (1.0-0ubuntu3) jaunty; urgency=low
292
293 * apport/hookutils.py: Factor out package_versions() to generate a simple
294 text listing of relevant package versions and use it in attach_printing()
295 * apport/hookutils.py: Add new function attach_relevant_packages() to attach
296 version information (and perhaps eventually run hooks?) for related
297 packages
298 * apport/hookutils.py: Add glob matching to package_versions()
299 * apport/hookutils.py: Add fuser info and dmesg to attach_alsa
300 * apport/hookutils.py: Add codec info to attach_alsa
301
302 -- Matt Zimmerman <mdz@ubuntu.com> Thu, 09 Apr 2009 07:36:45 -0700
303
304apport (1.0-0ubuntu2) jaunty; urgency=low
305
306 * backends/packaging-apt-dpkg.py: Add missing shutil import.
307 * debian/local/ubuntu-bug: Filter out -p and -P, for backwards calling
308 compatibility. (LP: #356755)
309
310 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 23:04:39 -0700
311
312apport (1.0-0ubuntu1) jaunty; urgency=low
313
314 * Apport has a proper upstream trunk now (lp:apport) and made an 1.0
315 upstream release. Use this as an orig.tar.gz. This does not change any
316 code for Jaunty, just removes the Fedora/OpenSUSE specific .spec and init
317 scripts.
318 * Add bzr-builddeb configuration (merge mode).
319 * Add debian/watch for upstream releases on Launchpad.
320 * Drop debian/python-apport.postinst, obsolete for a long time.
321
322 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 17:37:48 -0700
323
324apport (0.149) jaunty; urgency=low
325
326 Do some internal cleanup of distribution specific stuff:
327
328 * problem_report.py, man/apport-unpack.1: Fix description of .crash file
329 syntax (RFC822, not "Debian control").
330 * Move cron.daily, init script, and default file from debian/ to etc/, and
331 install them in setup.py. These files are appropriate for upstream
332 installation.
333 * Move crashdb.conf and doc/README.blacklist to etc/, to simplify setup.py.
334 * setup.py: Move *.mo generation/installation into my_install_data class,
335 for cleanliness.
336 * Move installation of missing packages for retracing from
337 bin/apport-retrace to new abstract interface apport/packaging.py,
338 install_retracing_packages() and remove_packages(), and move the apt/dpkg
339 code to backends/packaging-apt-dpkg.py. This removes a major piece of
340 apt/dpkg specific code from non-backends.
341 * bin/apport-retrace: Rename option --no-dpkg to --no-pkg and update
342 bin/apport-chroot accordingly.
343 * Move bin/apport-chroot and man/apport-chroot.1 to debian/local, since they
344 are totally Debian/Ubuntu specific.
345 * debian/local/setup-apport-retracer: Update apport-chroot and crashdb.conf
346 paths for above changes.
347 * apport/hookutils.py, files_in_package(): Replace dpkg-query call with
348 packaging.get_files(), to avoid Debianism.
349 * man/apport-retrace.1: Drop reference to "apt", simply talk about package
350 installation.
351
352 Bug fixes:
353
354 * setup.py: Fix homepage URL.
355 * debian/local/apport-chroot: If multiple distro IDs point to the same
356 chroot, do not upgrade them more than once with "upgrade all".
357
358 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 06 Apr 2009 16:06:33 -0700
359
360apport (0.148) jaunty; urgency=low
361
362 [ Matt Zimmerman ]
363 * apport/hookutils.py: add attach_media_build to include information about
364 the build of installation media in use (i.e. in a casper live CD
365 environment)
366 * general-hooks/ubuntu.py: use attach_media_build (LP: #351781)
367 * bin/apportcheckresume: Use attach_file_if_exists rather than attach_file to
368 avoid spurious error messages about non-existent log files (LP: #351973)
369
370 [ Martin Pitt ]
371 * debian/local/ubuntu-bug: Drop generic passthrough of apport-{cli,gtk,kde}
372 options since this leads to too much confusion. Instead just support a
373 single argument and check whether it is a pid, a package name, a .crash
374 file, or a program path. This does the right thing when calling it with a
375 .crash file (LP: #347392) and fixes the help output (LP: #344923) Update
376 manpage accordingly.
377 * apport/hookutils.py: Move attach_media_build() to
378 general-hooks/ubuntu.py, since it is Ubuntu specific.
379 * bin/apport-retrace: Fix KeyError crash on bugs with an ExecutablePath
380 which does not exist any more. Close the bug as invalid instead.
381 (LP: #352331)
382 * bin/kernel_oops: Add "kernel-oops" tag. Since both bin/kernel_oops and
383 bin/apportcheckresume use the "kerneloops" bug class, it previously was
384 hard to filter out the bug reports which were real oopses. (LP: #349621)
385
386 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 01 Apr 2009 18:10:01 +0200
387
388apport (0.147) jaunty; urgency=low
389
390 * bin/apportcheckresume: report the pm-suspend.log/pm-hibernate.log
391 from /var/lib.
392 * bin/apportcheckresume: only attempt to attach the stress log if its is
393 present.
394 * bin/apportcheckresume, debian/apport.init: add detection for late
395 resume hangs, those where the user thinks the system was working.
396 (LP: #335323)
397
398 -- Andy Whitcroft <apw@canonical.com> Mon, 30 Mar 2009 09:47:28 +0200
399
400apport (0.146) jaunty; urgency=low
401
402 * apport/report.py, _generate_sigsegv_report(): Turn into a class method, so
403 that it can be used by test cases in other modules as well. Also add
404 missing Signal field.
405 * apport/crashdb_impl/launchpad.py: Fully enable operation with
406 staging.launchpad.net.
407 * apport/crashdb_impl/launchpad.py: Add initial test suite, performing data
408 upload, Python and SEGV bug reporting, report download, report updating,
409 tag and duplicate handling. This happens on staging.launchpad.net.
410 * apport/crashdb.py: Add new interface duplicate_of(id) to return the master
411 bug of a duplicate. Also document that close_duplicate() with "None"
412 master bug will un-duplicate the bug.
413 * apport/crashdb_impl/{launchpad,memory}.py: Implement duplicate_of() and
414 add test cases. The Launchpad test case reproduces the
415 "duplicate-of-a-duplicate" regression, which now got fixed in
416 python-launchpad-bugs bzr head.
417 * apport/ui.py, open_url(): Also consider a sesssion as "GNOME" if gconfd-2
418 is running; some variants such as UNR do not have gnome-panel; this fixes
419 using the preferred browser for them. (LP: #322386)
420 * debian/local/apport-collect: Add new option -p to explicitly specify a
421 (binary) package name instead of guesstimating it from the bug's source
422 package tasks. Document new option in debian/local/apport-collect.1.
423 (LP: #333875)
424 * apport/crashdb.py, duplicate_db_consolidate(): Add logging about removing
425 invalidated bugs from the duplicate database, now that this actually
426 works.
427 * debian/local/ubuntu-bug.1: Update for the possibility to specify a package
428 name or PID without any options. Also document the "ubuntu-bug linux"
429 special case. (LP: #348985)
430 * debian/local/ubuntu-bug.1: Add missing documentation of the case of
431 specifying a path name.
432 * backends/packaging-apt-dpkg.py: When unpacking source trees, try
433 "debian/rules setup" last, since it is the least common variant.
434 * debian/local/ubuntu-fat-chroot: Divert away
435 /usr/lib/xulrunner-1.9.1b3/xulrunner-bin. It is called on debian/rules
436 patch in xulrunner-1.9.1 and hangs eternally in the fakechroots. This is
437 only a temporary kludge, though, until the next xulrunner version lands.
438 * apport/crashdb_impl/launchpad.py: Add test case: Update a bug report which
439 got marked as a duplicate during processing. This reproduces #349407.
440 * apport/crashdb_impl/launchpad.py, update(): Intercept and ignore IOErrors
441 when changing the bug priority. This happens if a bug gets duplicated
442 underneath us. (LP: #349407)
443 * apport/crashdb.py, get_crashdb(): Print syntax errors from parsing
444 conf.d/*.conf to stderr.
445 * apport/crashdb_impl/launchpad.py: Support new CrashDB option "project"
446 which can be set to a LP project name to file bugs against that project
447 instead of the distribution. Add test case for filing crash bug against a
448 project, updating it, duplicating/unduplicating it, and determining fixed
449 version. (LP: #338835)
450 * bin/crash-digger: If apport-retrace exits with 99, consider it a transient
451 error and just stop the retracer, but don't leave the lock file behind.
452 Add appropriate test case to test-crash-digger.
453 * bin/apport-retrace: If apt update fails due to a "hash sum mismatch", exit
454 with a "transient error" code, to stop (but not break) the retracing
455 cycle.
456
457 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 27 Mar 2009 17:01:08 +0100
458
459apport (0.145) jaunty; urgency=low
460
461 * apport/crashdb_impl/launchpad.py: Fix typo in previous upload.
462 * debian/local/apport-collect: Do not crash on
463 launchpadlib.errors.HTTPError, but give a proper error message and point
464 out that this script needs "change anything" privileges. (LP: #338201)
465 * apport_python_hook.py: Fix crash for already existing reports, and make
466 behaviour equivalent to bin/apport: Silently exit for existing unseen
467 crash report, and overwrite existing seen crash report. Add test cases.
468 (LP: #323714)
469 * general-hooks/automatix.py: Refuse to send bug reports when ultamatix is
470 installed.
471
472 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Mar 2009 18:45:34 +0100
473
474apport (0.144) jaunty; urgency=low
475
476 * apport/crashdb_impl/launchpad.py, mark_retrace_failed(): If report is
477 invalid, remove CoreDump.gz and other attachments.
478 * bin/apport-retrace: If we didn't find the ExecutablePath on the system
479 because the package is out of date, don't crash, but close the bug as
480 invalid.
481
482 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Mar 2009 10:45:56 +0100
483
484apport (0.143) jaunty; urgency=low
485
486 * debian/apport.README.Debian: Document how to temporarily and permanently
487 enable crash interception.
488 * backends/packaging-apt-dpkg.py, is_distro_package(): Do not consider a
489 package a native distro one if installed version is "None". This happens
490 with some PPA packages. (LP: #252734)
491 * apport/report.py, anonymize(): Move user name anonymization into the
492 "non-root" case as well; fixes uninitialized variable. (LP: #338847)
493
494 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 09 Mar 2009 12:16:49 +0100
495
496apport (0.142) jaunty; urgency=low
497
498 * apport/report.py: Do not include lsb_release's stderr in the
499 DistroRelease: output.
500 * apport/hookutils.py: Fix attach_printing():
501 - Correct spelling or "error_log".
502 - Do not call fgrep with no file names (if /etc/cups/ppd/ is empty), since
503 that hangs forever.
504 * apport/report.py, _gen_stacktrace_top(): Fix parsing of stacktraces
505 with some addresses missing. Add test cases. (LP: #269133)
506 * apport/ui.py, run_report_bug(): Show details of collected information and
507 give the user a chance to cancel. Previously, collected data was sent
508 directly to Launchpad. Nowadays lots of packages have hooks, so we cannot
509 guarantee any more that bug reports only have non-sensitive information.
510 (LP: #195514) This also allows the user to cancel if (s)he inadvertedly
511 clicked on "Report a problem". (LP: #279033)
512 * apport/ui.py: Fix crash in get_complete_size() for reports that are
513 constructed on the fly instead of loaded from a file (i. e. for bug
514 reports). Fixes displaying of report in apport-cli.
515 * apport/report.py: Slight robustification of test_add_gdb_info_script()
516 test case.
517 * debian/local/ubuntu-bug: Fix invocation with "--help". (LP: #305841)
518 * apport/ui.py, load_report(): Clearer error message if report file does not
519 exist. (LP: #204198)
520 * Remove redundant verbiage from test suite docstrings.
521 * apport/report.py, anonymize(): Fix crash when processing root-owned
522 reports. (LP: #338033)
523 * apport/report.py, anonymize(): Do not anonymize single-character user and
524 host names, since they create an utter mess in bug reports, and also are
525 very low-sensitive.
526 * debian/apport.init: Also start apport if force_start=1 is given. This
527 provides a convenient method of starting apport just for a session without
528 changing the default file. Add a comment to debian/apport.default about
529 this possibility. Thanks to Milan for the suggestion and the initial
530 patch! (LP: #320467)
531 * backends/packaging-apt-dpkg.py, _get_mirror(): Only consider http://
532 mirrors for fetching Contents.gz. (LP: #315797)
533
534 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 05 Mar 2009 17:01:05 +0100
535
536apport (0.141) jaunty; urgency=low
537
538 * apport/hookutils.py: Add cups error log to attach_printing()
539
540 -- Brian Murray <brian@ubuntu.com> Mon, 02 Mar 2009 10:55:53 -0800
541
542apport (0.140) jaunty; urgency=low
543
544 * debian/python-{apport,problem-report}.install: Fix site-packages →
545 *-packages.
546 * run-tests: Only check for local packaging_impl.py if running local tests.
547 This unbreaks running tests from /usr/share/apport/testsuite/.
548
549 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Mar 2009 11:56:59 +0100
550
551apport (0.139) jaunty; urgency=low
552
553 * apport/report.py, anonymize(): Do not anonymize "root". (Side
554 issue in LP #333542)
555 * debian/rules: Supply --install-layout=deb to setup.py.
556 * debian/local/apport-collect: Attach new info to
557 staging.launchpad.net if $APPORT_STAGING is defined. This makes
558 testing easier. Describe in debian/local/apport-collect.1.
559 * debian/local/apport-collect: Ignore ValueErrors from
560 add_package_info(), which happens if the bug has a source package
561 task which does not have an identically named binary package name.
562 Slightly ugly, but it's nontrivial to do that in a sensible
563 manner; let's just fix the crash for now, since the focus of this
564 tool is to collect information from hooks. (LP: #334823)
565 * apport/hookutils.py, hal_dump_udi(): Filter out serial numbers.
566 (Mentioned in LP #107103)
567
568 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Mar 2009 11:36:18 +0100
569
570apport (0.138) jaunty; urgency=low
571
572 * apport/crashdb_impl/launchpad.py: Consider an useful stack trace
573 sufficient for automatically removing the core dump, it doesn't
574 need to be perfect. This is in accordance with not setting the
575 apport-failed-retrace tag for useful, but non-perfect retraces any
576 more.
577 * apport/hookutils.py, backends/packaging_rpm.py: Convert usage of
578 md5 module (which is deprecated in 2.6) to hashlib.
579 * Replace all instances of using an exception's .message attribute
580 with str(exception), since message is deprecated in Python 2.6.
581 * apport/hookutils.py: Add attach_printing(). Thanks to Brian Murray
582 for the initial patch! (LP: #333582)
583
584 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Feb 2009 22:24:31 +0100
585
586apport (0.137) jaunty; urgency=low
587
588 * Set python-version to all, include symlinks in the package.
589
590 -- Matthias Klose <doko@ubuntu.com> Tue, 24 Feb 2009 21:22:36 +0100
591
592apport (0.136) jaunty; urgency=low
593
594 [ Andy Whitcroft ]
595 * bin/apportcheckresume: remove originator in suspend/hibernate/resume
596 reporting. This was intended for debugging only and is now redundant.
597 * bin/apportcheckresume, apport/report.py: when collecting resume failures
598 in very early boot hal may not be running and we thus unable to obtain
599 the machine type information. Move title generation to the reporting
600 engine.
601
602 [ Martin Pitt ]
603 * debian/local/apport-collect: Add user environment information, too
604 (LANG, PATH, SHELL). (LP: #332578)
605
606 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Feb 2009 14:25:21 +0100
607
608apport (0.135) jaunty; urgency=low
609
610 * problem_report.py, test_write_mime_text(): Add test cases for
611 single-line and two-line UTF-8 values, single-line and two-line
612 Unicode values and a single-line LF-terminated value. Fix handling
613 of the latter two.
614 * problem_report.py, test_write(): Add test cases for single-line
615 and two-line UTF-8 and Unicode values, and fix handling of these
616 in write().
617 * debian/local/apport-collect: Collect package, OS, and user
618 information as well. (LP: #332578)
619 * package-hooks/source_apport.py: Robustify by using hookutils, and
620 avoid stat errors if /var/crash/* does not exist.
621 * test-hooks: Update dodgy test for uninstalled package,
622 libdb4.3-tcl is not available in Jaunty any more.
623
624 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 23 Feb 2009 13:14:24 +0100
625
626apport (0.134) jaunty; urgency=low
627
628 * debian/local/apport-collect: Do not collect information for closed
629 tasks. Thanks for Brian Murray for the initial patch! (LP: #331839)
630 * apport/crashdb_impl/launchpad.py, download(): Download
631 DpkgTerminalLog.txt attachment as well.
632 * apport/report.py: If downloading a nonexisting bug pattern file
633 name succeeds and returns a HTML snippet with "404 Not Found",
634 consider this as failure. This repairs falling back to source
635 package names. (LP: #328751)
636 * apport/hookutils.py: Replace tabs with spaces.
637
638 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 20 Feb 2009 11:22:15 +0100
639
640apport (0.133) jaunty; urgency=low
641
642 [ Andy Whitcroft ]
643 * apport/hookutils.py: define and include a machine type from the hardware
644 information in the report, using HAL information where available.
645 * bin/apportcheckresume: include the machine type in the suspend/hibernate
646 report title. They are generally machine specific.
647
648 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 19 Feb 2009 17:49:03 +0100
649
650apport (0.132) jaunty; urgency=low
651
652 [ Martin Pitt ]
653 * Add debian/local/apport-collect: Download a Launchpad bug report,
654 get its source package, check if it has apport hooks, and if so,
655 run and upload them. Add manpage, too. (LP: #124338)
656 * debian/control: Add Suggests: python-launchpadlib; this is only
657 needed by apport-collect, thus we don't need to pull that into
658 every default installation; if it's not installed apport-collect
659 will detect and point this out.
660 * debian/control: Add ${misc:Depends} dependencies.
661
662 [ Jonathan Riddell ]
663 * Set window icon in apport-qt
664
665 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 19 Feb 2009 13:50:34 +0100
666
667apport (0.131) jaunty; urgency=low
668
669 [ Andy Whitcroft ]
670 * bin/apportcheckresume, bin/kernel_oops, cli/apport-cli, gtk/apport-gtk,
671 gtk/apport-gtk.glade, qt4/apport-qt: generalised the KernelOops
672 dialog and handling to allow suspend and hibernate failures present
673 more accurate reasons for the report. Also commonises all messages
674 in the three implementations to simplify internationalisation.
675
676 [ Martin Pitt ]
677 * po/Makefile: Fix merge-po rule to actually work again.
678 * cli/apport-cli, qt4/apport-qt: Unify string with apport-gtk.
679 * apport/ui.py: Drop some bogus translatable strings.
680 * Update German translations.
681
682 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 16 Feb 2009 19:31:41 +0100
683
684apport (0.130) jaunty; urgency=low
685
686 [ Martin Pitt ]
687 * bin/kernel_crashdump: Don't crash if vmcore.log does not exist.
688 * crashdb_impl/launchpad.py: Tag bugs with the architecture they are
689 being reported on.
690 * bin/crash-digger: Revert catching "database is locked" errors
691 during consolidation, since it just hides more fundamental errors.
692 * apport/crashdb_impl/memory.py: Improve docstrings of test suite.
693 * bin/apport-retrace: Do not try to install -dbgsym packages with
694 nonmatching versions, unless --unpack-only is used. Thanks to
695 hggdh for the initial patch! (LP: #309208)
696
697 [ Andy Whitcroft ]
698 * bin/apportcheckresume: modify the oops title and thereby the launchpad
699 bug title to say suspend or hibernate.
700 * bin/apportcheckresume: modify the tags to bin/apportcheckresume:
701 modify the oops title and thereby the launchpad be resume+suspend or
702 resume+hibernate as appropriate.
703 * bin/apportcheckresume: include any non-free modules in the bug title.
704
705 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 12 Feb 2009 22:09:35 +0100
706
707apport (0.129) jaunty; urgency=low
708
709 * bin/apport-retrace: Log broken reports.
710 * bin/apport-retrace: Do not mark bugs as invalid after they are
711 already marked as a duplicate, since that does not work in
712 Launchpad.
713 * debian/local/ubuntu-fat-chroot: Symlink /target -> /, to work
714 for crashes which appear in /target during installation.
715 * bin/apport: Move argv length/usage help before lock check, so that
716 it works if the user cannot lock /var/crash/.lock. Thanks to Kees
717 Cook!
718 * doc/package-hooks.txt: Point out apport.hookutils.
719 * apport/ui.py: Check environment variable APPORT_REPORT_THIRDPARTY
720 in addition to the 'thirdparty' configuration file option for
721 overriding the "genuine distro package" check. Thanks to Oumar
722 Aziz OUATTARA!
723 * apport/crashdb_impl/launchpad.py: In third-party mode, report bugs
724 against Launchpad projects. Thanks to Oumar
725 Aziz OUATTARA for his branch! (LP: #213454)
726 * bin/apportcheckresume: Include /var/lib/pm-utils/stress.log, too.
727 Thanks to Andy Whitcroft for the initial patch, rewrote to use
728 apport.hookutils.
729 * apport/crashdb.py, init_duplicate_db(): Run an integrity check and
730 raise exception if it fails, to avoid running the retracers on a
731 corrupt duplicate db. Add test case to
732 apport/crashdb_impl/memory.py.
733 * bin/crash-digger: Create a backup of the duplicates database right
734 after initializing it (which verifies integrity).
735 * dupdb-admin: Add new command "consolidate".
736 * apport/crashdb_impl/launchpad.py: Request bug lists with batch
737 size 300, for slight speedup of consolidation.
738 * apport/crashdb.py, duplicate_db_consolidate(): Warn about a bug
739 which is not yet fixed, but does not appear in get_unfixed(). In
740 Launchpad, this means that the bug does not have the
741 'apport-crash' tag any more; if there are many, those would be a
742 huge time/bandwidth waste.
743
744 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Jan 2009 16:04:16 +0100
745
746apport (0.128) jaunty; urgency=low
747
748 * apport/ui.py: Introduce new configuration option "thirdparty" and
749 ignore the is_distro_package() check if it is set to true.
750 * bin/apport-retrace: Call Cache.open() after Cache.update().
751 * bin/apport-retrace: If downloading a report fails (e. g. the
752 description was invalidly modified), mark the bug as invalid with
753 a proper explanation instead of crashing, unless we are in
754 "stdout" or "output file" mode.
755 * apport/crashdb_impl/launchpad.py: Apply some heuristics to attempt
756 recovering broken descriptions as in LP #315728 (intermediate
757 blank lines, and non-apport data append).
758
759 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Jan 2009 17:49:55 +0100
760
761apport (0.127) jaunty; urgency=low
762
763 * bin/apportcheckresume, debian/apport.init: integrate with pm-utils to
764 detect suspend/resume failures. Thanks to Steve Conklin and Andy
765 Whitcroft. LP: #316419.
766
767 -- Steve Langasek <steve.langasek@ubuntu.com> Tue, 13 Jan 2009 12:54:12 -0800
768
769apport (0.126) jaunty; urgency=low
770
771 * bin/apport-chroot: If --auth is specified in "login" mode, symlink
772 the file into /tmp/auth in the fakechroot. This makes it much
773 easier to interactively debug retracing.
774 * bin/apport-retrace: Exit with zero for bugs which do not have a
775 core dump, so that it does not completely stop the retracers.
776
777 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Jan 2009 22:49:48 +0100
778
779apport (0.125) jaunty; urgency=low
780
781 * bin/apport-chroot: Exit with apport-retraces' exit status, to
782 propagate errors upwards to crash-digger.
783 * bin/apport-retrace: Do not put outdated -dbgsym comments into the
784 bug comments.
785 * Rewrite bin/crash-digger to become much more robust and easier for
786 retracer maintainers:
787 - Now designed around cron-based maintenance: start, process all
788 pending bugs, exit. This makes memory leaks irrelevant, and gets
789 rid of all the logging, daemonizing, and looping code.
790 - Adapt stdout/stderr reporting to be suitable for cron and
791 redirecting stdout to a log file.
792 - Use lock files to avoid overlapping instances and avoid damaging
793 bugs with broken retracers after crash-digger failed.
794 - Handle chroot upgrading, so that this does not need separate
795 cronjobs any more.
796 - Drop old -i option, replace with -D/--dupcheck which is a mode
797 which *only* checks duplicates of Python crashes (no fakechroot
798 handling).
799 - Mark bug as retraced after apport-chroot retrace finished
800 successfully; the process is robust enough now to avoid enless
801 loops even if retracing fails.
802 - Adapt test-crash-digger accordingly.
803 - UbuntuSpec:apport-retracer-maintenance
804
805 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 09 Jan 2009 12:14:44 +0100
806
807apport (0.124) jaunty; urgency=low
808
809 * debian/local/ubuntu-fat-chroot: Divert touch to touch.real and
810 wrap it into a shell wrapper which ignores failures. Some packages
811 use "touch -m" which fails with EPERM on directories under
812 fakechroot. Also disable gconf-schemas and polkit-auth, since they
813 do not work in fakechroots.
814 * apport/crashdb_impl/launchpad.py: Allow using staging for testing.
815 * apport/crashdb.py, mark_retrace_failed(): Add new optional
816 argument "invalid_msg", intended for crashes which cannot be
817 retraced properly (e. g. due to outdated packages). Implement this
818 in apport/crashdb_impl/launchpad.py.
819 * bin/apport-retrace: If we do not have an usable stack trace, and
820 encounter outdated package versions in the crash, close the report
821 as invalid with an appropriate comment. (LP: #308917)
822 * bin/apport-retrace: Update the apt cache before looking for, and
823 installing packages. (Part of UbuntuSpec:apport-retracer-maintenance)
824 * debian/apport.default: Enable by default again for Jaunty. Let the
825 flood begin!
826
827 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 08 Jan 2009 14:05:07 +0100
828
829apport (0.123) jaunty; urgency=low
830
831 * bin/apport: Do not write the report into the log file if opening
832 the report file failed; just log the error.
833 * bin/apport: Remove a previously seen report file, so that the
834 following creation with O_EXCL actually works.
835 * apport/report.py, add_proc_info(): Only try to attach
836 /proc/pid/attr/current if we are root. This works around Python
837 segfaulting regression when encountering EPERM on read() (see
838 LP #314065).
839 * apport/report.py testsuite: Use "isofs" for module license check
840 testing instead of "usbcore", since the latter is more likely to
841 get built into the kernel.
842 * apport/report.py, add_proc_environ(): Use "PATH=(...)" instead of
843 "PATH: ..." notation, to be consistent with other environment
844 variables. Unbreaks the apport test suite.
845
846 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 05 Jan 2009 18:05:38 +0100
847
848apport (0.122) jaunty; urgency=low
849
850 * apport/crashdb_impl/launchpad.py: Support extra tags in the
851 report's "Tags:" field, and set them in the Launchpad bug.
852 Document this in doc/data-format.tex. Thanks to Steve Conklin for
853 the patch!
854
855 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 05 Jan 2009 10:06:49 +0100
856
857apport (0.121) jaunty; urgency=low
858
859 * debian/apport.init: Drop long obsolete setting of
860 /proc/sys/kernel/crashdump-size.
861 * debian/apport.init: Make restart actually work if the default file was
862 changed. (LP: #292402)
863 * apport/report.py, add_proc_environ(): Do not include verbatim $PATH, only
864 classify it as "default" (does not appear at all then), "custom,
865 user" (/home or /tmp in $PATH), or "custom, no user". Add appropriate test
866 case. Update the data format documentation accordingly. (LP: #245263)
867
868 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 08 Dec 2008 19:37:53 -0800
869
870apport (0.120) jaunty; urgency=low
871
872 * man/apport-cli.1: Fix "sytem" typo. (LP: #288977)
873 * apport/fileutils.py: Add new function get_options() to read
874 ~/.config/apport/settings. In the future, the apport-ignore.xml file will
875 move to this directory, too. Based on idea and initial patch from Nikolay
876 Derkach.
877 * bin/apport: Check config option "unpackaged", and if it is set to True,
878 create a crash dump for unpackaged programs, too. Bump apport package
879 dependency to python-apport for this.
880 * apport/ui.py: Fix regression introduced in in 0.115 for checking
881 successful package name determination.
882 * apport/report.py: Some distro portability fixes in the test suite, thanks
883 to Nikolay Derkach!
884 * Add OpenSUSE spec file, init script, and RPM packaging backend. Thanks to
885 Nikolay Derkach!
886 * apport_python_hook.py, bin/apport: Create files in a race free way to
887 avoid symlink attacks. Thanks to Sebastian Kramer <krahmer@novell.com> for
888 finding them!
889 * problem_report.py test suite: Create debugging leftover which left /tmp/r
890 behind.
891 * apport/crashdb_impl/memory.py: Use example.com, not bug.net, since the
892 latter actually exists now.
893 * apport/hookutils.py: Add attach_network(), attach_alsa(), and
894 attach_hardware(), and add proper docstrings. Thanks to Matt Zimmerman for
895 the branch!
896 * source_linux.py hook: Use above tool functions, which greatly simplifies
897 the hook.
898 * apport/report.py: Also print exceptions from binary and source package
899 hooks, not just from common ones.
900 * apport/report.py, add_hooks_info(): Do not print an error if a source
901 package hook does not exist.
902 * apport/hookutils.py, _parse_gconf_schema(): Correctly handle bool values.
903
904 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 26 Nov 2008 19:24:23 +0100
905
906apport (0.119) intrepid; urgency=low
907
908 * debian/apport.default: Disable Apport by default for the final release.
909
910 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 23 Oct 2008 09:34:41 +0200
911
912apport (0.118) intrepid; urgency=low
913
914 * apport/hookutils.py: add attach_gconf() function to add non-default gconf
915 settings to a report
916
917 -- Matt Zimmerman <mdz@ubuntu.com> Mon, 13 Oct 2008 20:10:33 +0100
918
919apport (0.117) intrepid; urgency=low
920
921 * backends/packaging-apt-dpkg.py, is_distro_package(): Fix crash if
922 apt.Cache()[pkg].origins is None. (LP: #279353)
923 * bin/apport: Log that we are ignoring SIGABRT, since it is a common cause
924 of confusion.
925 * test-apport, create_test_process(): Fix race condition: wait until the
926 child process has fully execve()ed, to avoid coredumping it while it is
927 still running as test-apport process.
928 * apport/crashdb_impl/launchpad.py, update(): Set source package of a bug if
929 the reporter removed it and the task is against 'Ubuntu'. (LP: #269045)
930
931 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 07 Oct 2008 16:38:06 +0200
932
933apport (0.116) intrepid; urgency=low
934
935 * Update AUTHORS and debian/copyright, Michael and Troy released their
936 copyright to Canonical. Properly attribute them as authors in the
937 respective files.
938 * debian/local/ubuntu-bug: Fix quoting of the command line arguments, so
939 that several options do not end up as one big argument when being passed
940 to apport-{cli,gtk,qt}. This also repairs launchpad-integration.
941 (LP: #260242)
942
943 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 26 Sep 2008 10:32:45 +0200
944
945apport (0.115) intrepid; urgency=low
946
947 [ Matt Zimmerman ]
948 * Add apport/hookutils.py with some convenience functions for writing hook
949 scripts (work in progress)
950 * Extend ubuntu-bug to accept a path as an argument and look up the package
951 name
952 * Rename kernel_hook to kernel_crashdump (there are other kernel hooks)
953 * Change kernel crash report type to KernelCrash
954 * Fix automatix.py to not crash when automatix isn't installed (LP: #267004)
955 * Add bin/kernel_oops hook to capture a kernel oops (eg. via kerneloops)
956
957 [ Martin Pitt ]
958 * Add AUTHORS file for collecting the list of major contributors and
959 copyright holders.
960 * apport/report.py: If we do not find a bug pattern file for the binary
961 package, fall back to looking for one with the source package name.
962 * run-tests: Provide a better error message if apport/packaging_impl.py does
963 not exist.
964
965 [ Brian Murray ]
966 * apport/crashdb_impl/launchpad.py: Add regression-retracer tag to bugs
967 which seem to be a regression (duplicate, and crash happens in a later
968 version than the fix). (LP: #271876)
969
970 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 18 Sep 2008 18:18:03 -0700
971
972apport (0.114) intrepid; urgency=low
973
974 [ Fabien Tassin ]
975 * apport/ui.py: Use preferred browser when it's recognized as a
976 Mozilla browser (firefox, seamonkey, flock) or Epiphany (LP: #131350)
977
978 [ Oumar Aziz OUATTARA ]
979 * apport/crashdb.py: Add support for /etc/apport/crashdb.conf.d/*.conf crash
980 database configuration files. Document it in doc/crashdb-conf.txt.
981 * apport/ui.py: Support a new field "CrashDB" in apport reports which select
982 a non-default crash database. Document this in doc/package-hooks.txt.
983
984 [ Martin Pitt ]
985 * apport/report.py: If a hook crashes with an exception, print it to
986 stderr, for easier debugging of hooks.
987 * apport/crashdb_impl/launchpad.py: If PackageArchitecture is 'all', fall
988 back to looking at Architecture instead of not adding a
989 needs-$ARCH-retrace tag at all. This prevented signal crashes originating
990 from e. g. Python packages from being automatically retraced.
991
992 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 04 Sep 2008 10:51:24 +0200
993
994apport (0.113) intrepid; urgency=low
995
996 * apport-qt recommends update-notifier-kde instead of adept-notifier
997
998 -- Anthony Mercatante <tonio@ubuntu.com> Thu, 28 Aug 2008 15:02:20 +0200
999
1000apport (0.112) intrepid; urgency=low
1001
1002 * apport/crashdb_impl/launchpad.py: Update attachment handling to current
1003 python-launchpad-bugs API, thanks Markus Korn!
1004 * apport/ui.py: Use gnome-panel as indicator for a running GNOME session;
1005 'gnome-session' now calls itself x-session-manager, which isn't useful
1006 to tell apart session types.
1007
1008 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 07 Aug 2008 17:09:49 +0200
1009
1010apport (0.111) intrepid; urgency=low
1011
1012 The "(Kernel) OOPS, I dumped it again!" release.
1013
1014 * apport/ui.py: Fix test_run_report_bug_unpackaged_pid() to work with the
1015 installed run-tests from the package as well.
1016 * apport/crashdb_impl/launchpad.py: Ignore broken LP bug tasks instead of
1017 crashing on them.
1018 * apport/report.py, add_proc_info(): Report the AppArmor or SELinux context
1019 in a new ProcAttrCurrent field, read from /proc/pid/attr/current.
1020 Document it in doc/data-format.tex. The field will not be added if the
1021 proc attribute cannot be read or isn't present. Thanks to Steve Beattie
1022 for the patch and the suggestion!
1023 * debian/local/setup-apport-retracer: Switch to intrepid.
1024 * debian/local/setup-apport-retracer: Fix installation of python-apt. Also
1025 install apt, to avoid library version mismatches to python-apt.
1026 * debian/apport.default: Enable apport by default again, now that we have
1027 working retracers.
1028 * apport/report.py, test_add_gdb_info_script(): Use bash, not dash as test
1029 program for core dumping; stack trace is awkwardly bad with dash, so that
1030 the test case cannot really work any more.
1031 * Add package-hooks/source_linux.py: Package hook for collecting kernel
1032 related information. By Matt Zimmerman, thank you! (LP: #251441)
1033 * debian/local/ubuntu-bug.1: Fix documentation of -p, it specifies the
1034 binary package name, not the source.
1035 * apport/packaging.py: Add get_kernel_package() to return the actual Linux
1036 kernel package name; useful if the user reports a bug against just
1037 "linux". Implement it in backends/packaging-apt-dpkg.py.
1038 * apport/ui.py: "Do what I mean" when filing a bug against "linux" and
1039 report it against the actual kernel package.
1040 * debian/local/ubuntu-bug: If just one argument is given, infer -p/-P from
1041 the type of the argument.
1042 * apport/ui.py: Drop the PackageArchitecture field for the uploaded report
1043 if it is equal to Architecture. Adapt apport/crashdb_impl/launchpad.py to
1044 fall back to Architecture, and mention the change in doc/data-format.tex.
1045 * problem_report.py, write_mime(): Add new "skip_keys" argument to filter
1046 out keys. Add test cases.
1047 * apport/crashdb_impl/launchpad.py: Do not write the "Date:" field on
1048 upload(), and fetch it from the bug metadata in download().
1049 * apport/crashdb_impl/launchpad.py, download(): Support reading bugs with
1050 the "--- " separator instead of "ProblemType: ". Launchpad doesn't create
1051 bugs that way ATM, but at least we have the reading part implemented now.
1052 * package-hooks/source_linux.py: Drop Uname, ProcVersion, and
1053 RunningKernelVersion fields, since they are all subsumed in the
1054 ProcVersionSignature field.
1055 * apport/ui.py, run_report_bug(): Strip spaces from package argument.
1056 * apport/ui.py, add_hooks_info(): Collect OS info first, then call the
1057 package hooks, so that the linux hook actually has a chance to delete the
1058 Uname field.
1059 * bin/kernel_hook, test-hooks: Throw away the original kernel hook which
1060 we never used (and got superseded by the proper source_linux.py package
1061 hook now). Replace it with the new logic of looking for
1062 /var/crash/vmcore{,.log} and turning that into an apport report.
1063 * debian/apport.init: Call kernel_hook if /var/crash/vmcore exists.
1064 (LP: #241322)
1065 * apport/ui.py: Collect information for "ProblemType: Kernel" as well, so
1066 that we run the package hook. Adapt test suite to cover this.
1067 * debian/control: Bump Standards-Version (no required changes).
1068 * gtk/apport-gtk.glade, qt4/apport-qt: Generalize notification of kernel
1069 crash, since it now happens after a boot, not right after the BUG/OOPS.
1070 But in the future we want to cover both cases.
1071
1072 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 05 Aug 2008 18:13:24 +0200
1073
1074apport (0.110) intrepid; urgency=low
1075
1076 * apport/chroot.py: In the test suite, copy some system binaries/libraries
1077 into a fakechroot and exercise a lot of standard shell commands (cp, ln
1078 -s, rm, rm -r, mkdir, echo, chmod, chown, etc.) with absolute/relative
1079 paths. This reproduces the total breakage of rm'ing, chmod'ing, and
1080 chown'ing absolute paths in hardy fakechroots.
1081 * bin/crash-digger: Intercept exceptions when downloading crash reports for
1082 duplicate checking, so that the retracer does not crash on malformed bug
1083 reports. (LP: #205178)
1084 * apport/packaging.py: Introduce a new function enabled() which reports
1085 whether Apport should create crash reports. Signal crashes are controlled
1086 by /proc/sys/kernel/core_pattern, but we need that to control whether
1087 reports for Python, package, or kernel crashes are generated.
1088 * backends/packaging-apt-dpkg.py: Provide implementation for
1089 PackageInfo.enabled() for Debian/Ubuntu by evaluating /etc/default/apport.
1090 Add various test cases for different configuration files and absent files.
1091 * apport_python_hook.py: Do not create reports if Apport is disabled (in
1092 /etc/default/apport). (LP: #222260)
1093
1094 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 17 May 2008 12:44:21 +0200
1095
1096apport (0.109) intrepid; urgency=low
1097
1098 [ Martin Pitt ]
1099 * debian/local/setup-apport-retracer: Update for some changes in Hardy.
1100
1101 [ Loic Minier ]
1102 * apport/report.py, add_proc_info(): also strip pathnames starting with
1103 'cow', 'squashmnt', and 'persistmnt' to allow apport to locate the
1104 executable pathname, additionally to 'rofs' added in 0.75. This fixes
1105 apport for packages installed on the read-write part of the unionfs mounts
1106 and under UME which uses different names for the mount points. Proper fix
1107 is to rewrite the pathnames in the kernel. (LP: #224168)
1108
1109 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 23 Apr 2008 14:30:03 +0200
1110
1111apport (0.108) hardy; urgency=low
1112
1113 [ Martin Pitt ]
1114 * apport-{gtk,qt,cli}: Fix handling of file references added by package
1115 hooks. (LP: #205163)
1116 * backends/packaging_rpm.py: Fix dependency resolution of uname(*) in the
1117 RPM backend. Thanks to Patryk Zawadzki! (LP: #213018)
1118 * backends/packaging_rpm.py: Fix RPM platform parsing, thanks to Patryk
1119 Zawadzki! (LP: #213015)
1120 * po/de.po: Fix typo (missing space).
1121 * debian/apport.default: Disable Apport for the final Hardy release, since
1122 it is less useful in stable releases, and drains a lot of CPU and I/O
1123 power on crashes. Disabling it here instead of in update-notifier/adept is
1124 more discoverable and more centralized.
1125
1126 [ Daniel Hahler ]
1127 * bin/apport-retrace: catch the same exceptions from Report.load() like
1128 ui.load_report() does (LP: #211899)
1129 * Fix uncaught exceptions in apport itself (LP: #215929):
1130 - apport/REThread.py: check if "sys" exists in the except block of
1131 REThread.run()
1132 - apport_python_hook.py: check if "sys" exists in the finally block of
1133 apport_excepthook
1134 * cli/apport-cli: Fix UnboundLocalError in ui_present_crash, which rendered
1135 apport-cli useless (for reporting crashes) (LP: #216151)
1136
1137 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 16 Apr 2008 12:24:32 +0200
1138
1139apport (0.107) hardy; urgency=low
1140
1141 * cli/apport-cli: Add translator comment for difficult string. (LP: #210948)
1142 * Update German translations.
1143 * po/Make{vars,file}: Remove the --language=python option again, since it
1144 breaks extracting strings from the glade. intltool-update currently does
1145 not seem to have a way to tag a file as "language python", so add an ugly
1146 workaround: Create temporary .py symlinks for gtk/apport-gtk & friends,
1147 and have intltool extract them.
1148 * apport/ui.py: Disallow filing a bug without specifying a package or a PID.
1149 Update debian/local/ubuntu-bug.1 accordingly (apport-cli manpage was
1150 already correct). (LP: #210348)
1151
1152 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 06 Apr 2008 11:44:38 -0600
1153
1154apport (0.106) hardy; urgency=low
1155
1156 [ Martin Pitt ]
1157 * apport/crashdb_impl/launchpad.py: Fix spelling mistake in p-lp-bugs API
1158 (now corrected there).
1159 * apport_python_hook.py: Catch IndexError for invalid sys.argv[0], too.
1160 (LP: #204940)
1161 * apport/ui.py: Add test_run_report_bug_unpackaged_pid() test case which
1162 reports a bug against a pid which belongs to an unpackaged program. This
1163 reproduces LP #203764.
1164 * apport/report.py: Drop add_hooks_info() assertion on nonexisting Package
1165 field, return silently instead. This conforms to the behaviour of the
1166 other add_*_info() functions and avoids nasty error handling.
1167 * apport/ui.py: Generate proper error message when calling with -f -p PID
1168 and PID belongs to an unpackaged program. (LP: #203764).
1169
1170 [ Sebastien Bacher ]
1171 * po/Makevars: add the --language=python xgettext option so the translations
1172 template is correctly updated on build since cdbs is using intltool-update
1173 directly and not the corresponding makefile target
1174
1175 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 01 Apr 2008 16:02:46 +0200
1176
1177apport (0.105) hardy; urgency=low
1178
1179 * apport/crashdb_impl/launchpad.py: Ignore ValueErrors when subscribing a
1180 team, since these are usually due to the team already being subscribed.
1181 * apport/report.py, anonymize(): Be robust against empty user names and only
1182 anonymize fields which can potentially contain user specific data.
1183 (LP: #195706)
1184 * backends/packaging-apt-dpkg.py, get_architecture(): Return 'unknown'
1185 instead of None if package architecture cannot be determined.
1186 (LP: #198548)
1187 * apport/ui.py, run_crash(): Intercept other IOErrors, too (such as EISDIR)
1188 and print out proper error message instead of crashing. (LP: #201819)
1189 * apport_python_hook.py: If the Python script has mutilated sys.argv so that
1190 even sys.argv[0] does not exist any more, fall back into readlink()ing
1191 /proc/pid/exe and gracefully handle the failure of that, instead of
1192 crashing in the crash handler (ugh). Add test case. (LP: #198183)
1193
1194 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 18 Mar 2008 23:04:57 +0100
1195
1196apport (0.104) hardy; urgency=low
1197
1198 [ Martin Pitt ]
1199 * apport/crashdb_impl/launchpad.py, get_source_version(): re-escape the
1200 package name so that it doesn't stumble over '+' and similar characters.
1201 * apport/ui.py tests: assert that ProcEnviron is also included into bug
1202 reports where we do not have a PID, since having the local information is
1203 interesting and important (and acceptable in terms of personal
1204 information).
1205 * apport/report.py: Split out method add_proc_environ() for getting
1206 ProcEnviron, so that we can call it separately.
1207 * apport/ui.py, run_report_bug(): Add ProcEnviron if we do not have a pid to
1208 file a bug against. This way, bugs filed against packages or distro also
1209 get locale information. (LP: #198514)
1210 * apport/fileutils.py, mark_report_seen(): Do not crash if the file does not
1211 exist any more, because it was removed underneath us. (LP: #199932)
1212 * apport/ui.py, test_collect_info_exepath(): Add a tuple argument and a
1213 CompressedValue to the test report. This reproduces LP #199349.
1214 * apport/report.py, anonymize(): Only work on string values. (LP: #199349)
1215 * apport/ui.py: If a report has a field "Ignore", entirely ignore the report
1216 without even presenting an explanatory error dialog (as
1217 "UnsupportableReason" does). Document this in doc/package-hooks.txt.
1218 (LP: #198863)
1219 * debian/control: Bump Standards-Version (no changes necessary).
1220 * debian/control: Fix wrongly spelt project names (Python and GTK+). Thanks
1221 to lintian's scrutiny.
1222 * gtk/apport-gtk-mime.desktop.in, qt4/apport-qt-mime.desktop.in: Add a main
1223 category.
1224
1225 [ Kees Cook ]
1226 * apport/report.py: fix module license checking logic (LP: #199927).
1227 - nonfree_modules: being unable to find a module should not mean the
1228 module is non-free.
1229 - test_module_license_evaluation: check modinfo reporting.
1230 * problem_report.py: Skip atime test case if file system is mounted noatime.
1231
1232 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 13 Mar 2008 14:01:30 +0100
1233
1234apport (0.103) hardy; urgency=low
1235
1236 * bin/apport-unpack: Print error messages instead of crashing for problems
1237 like nonexisting file names passed as arguments. (LP: #185273)
1238 * backends/packaging-apt-dpkg.py, is_distro_package(): Explicitly check site
1239 for "ppa", so that we do not automatically file bugs for PPA packages.
1240 This works around Soyuz bug LP #140412 for the time being.
1241 * apport/report.py: Add standard_title() test cases for Python crashes with
1242 a custom message, and a custom message with newlines. The latter
1243 reproduces LP #190947.
1244 * apport/report.py, standard_title(): Do not rely on a fixed position of the
1245 topmost function; use iteration and regular expression matching instead.
1246 (LP: #190947)
1247 * apport/ui.py, parse_argv(): Specify that --pid/-P argument must be an
1248 integer, to avoid exceptions when it's not. (LP: #193494)
1249 * apport/report.py: Use uname -srm, not -a, to hide the hostname. (part of
1250 LP #192786); also use os.uname() instead of calling the system program.
1251 * problem_report.py(): Make write() work for reports with CompressedValues.
1252 Add test case.
1253 * apport/ui.py: Add test case test_run_crash_anonymity() which asserts that
1254 the crash dump does not contain strings which can identify the user, such
1255 as the user name, login name, host name, and current directory.
1256 * apport/report.py: Add method anonymize() which replaces user specific
1257 strings with generic ones.
1258 * apport/ui.py, thread_collect_info(): Call anonymize() on the report.
1259 (LP: #192786)
1260 * bin/apport-retrace: Only update a bug report with new attachments if it is
1261 not a duplicate. (LP: #172792)
1262 * bin/apport-retrace: Print out proper error message instead of an exception
1263 if trying to do write operations to the bug tracker without specifying
1264 a cookie file. (LP: #146423)
1265
1266 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 25 Feb 2008 17:47:13 +0100
1267
1268apport (0.102) hardy; urgency=low
1269
1270 [ Martin Pitt ]
1271 * problem_report.py: Support reading reports with legacy zlib
1272 compression in 'retain compressed values' mode (as used nowadays by
1273 apport when reporting a crash). Add a test case, too. (LP: #129616)
1274 * debian/control, debian/rules: Switch from python-support to
1275 python-central, and use 'nomove' option so that apport works during
1276 upgrades, too. (LP: #121341)
1277 * debian/rules: Use dh_icons instead of dh_iconcache.
1278 * debian/apport.init: Do not stop apport in any runlevel (LSB header).
1279 * apport/ui.py, run_crash(): Catch zlib.error on invalidly compressed core
1280 dumps. (LP: #176977)
1281 * apport/ui.py: Give a meaningful error message instead of crashing if the
1282 package for a crash report is not installed any more. (LP: #149739)
1283 * apport/ui.py: Do not include ProcCmdline in bug reports, since these are
1284 not ack'ed by the user and might contain sensitive data. (LP: #132800)
1285 * apport/ui.py: Add various test cases for crash reports whose packages have
1286 been uninstalled between the crash and the report. This reproduces
1287 LP #186684.
1288 * apport/ui.py, load_report(): Produce proper error message if
1289 executable/interpreter path do not exist any more. (LP: #186684)
1290 * cli/apport-cli: Intercept SIGPIPE when calling sensible-pager, to avoid
1291 crash when quitting it prematurely. (LP: #153872)
1292 * bin/apport-checkreports: Print out a list of program names/packages which
1293 have a pending crash report. (LP: #145117)
1294 * apport/ui.py, run_argv(): Add return code which indicates whether any
1295 report has been processed.
1296 * cli/apport-cli: If no pending crash reports are present, say so and refer
1297 to --help. (LP: #182985)
1298 * apport/ui.py: Waive check for obsolete packages if environment defines
1299 $APPORT_IGNORE_OBSOLETE_PACKAGES. Document this in the apport-cli manpage.
1300 (LP: #148064)
1301
1302 [ Daniel Hahler ]
1303 * .crash file integration for KDE3 (LP: #177055)
1304 - debian/apport-qt.install: install added files qt4/apport-qt-mime.desktop
1305 and qt4/apport-qt-mimelnk.desktop
1306 * Fixed minor warnings/errors from desktop-file-validate in
1307 gtk/apport-gtk-mime.desktop.in and qt4/apport-qt.desktop.in (LP: #146957)
1308
1309 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 06 Feb 2008 12:55:53 +0100
1310
1311apport (0.101) hardy; urgency=low
1312
1313 * debian/control: Add python-xdg dependency to apport, since apport-cli
1314 needs it. (LP: #177095)
1315 * apport/ui.py: Add test case for reporting a report which has been
1316 preprocessed by apport-retrace, i. e. has a stack trace, but no core dump
1317 any more (reproducing LP #185084).
1318 * apport/ui.py, run_crash(): Do not reject reports which have a stack trace,
1319 but no core dump. (LP: #185084)
1320 * apport/report.py: Fix test_add_gdb_info_load() test case, the temporary
1321 executable was already deleted when gdb ran the second time.
1322
1323 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 23 Jan 2008 17:48:06 +0000
1324
1325apport (0.100) hardy; urgency=low
1326
1327 * bin/crash-digger: Add option --log for logging to a file, and
1328 --pidfile/--stop for daemonization. Add test cases to test-crash-digger.
1329 * bin/apport: Do not re-raise exceptions about failure to create the lock
1330 file, to avoid crashing in the case that another apport instance tries to
1331 lock at exactly the same moment. (LP: #147237)
1332 * apport/report.py testsuite: Check that our methods get along with binary
1333 data which turn into CompressedValue objects after loading them from a
1334 file. This reproduces LP #148305.
1335 * problem_report.py, CompressedValue: Add method splitlines() since we need
1336 it very often. Add test case to test_compressed_values(). (LP: #148305)
1337 * problem_report.py: Add test case to check that update() works and does the
1338 right thing with binary values and overwriting. This confirms that
1339 importing a dictionary works.
1340 * debian/local/setup-apport-retracer: Update for hardy.
1341 * apport/crashdb_impl/launchpad.py: get_source_info() does not work any more
1342 due to HTML changes in Launchpad, and not showing the component any more
1343 on /distro/+source/package. Since we do not actually need component and
1344 release name any more, rename it to get_source_version(), fix the regular
1345 expression to just get the version, and adapt get_fixed_version()
1346 accordingly.
1347 * debian/local/setup-apport-retracer: Update default apt sources to
1348 http://ddebs.ubuntu.com.
1349 * apport/ui.py: Robostify cleanup of forked test processes.
1350 * apport/ui.py: Sleep for 0.5 seconds after creating the test process in the
1351 test suite to give /proc some time to settle down.
1352 * bin/apport: Drop evaluation of CORE_* environment variables and mandate
1353 calling with <pid> <signal> <core ulimit>. Drop the now obsolete
1354 apport/elfcore.py. Adapt test-apport accordingly.
1355 * debian/apport.init, use-local: Now call apport with %p, %s, and %c kernel
1356 macros (since 2.6.24). Drop Edgy support from init script.
1357
1358 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 21 Dec 2007 02:18:48 +0100
1359
1360apport (0.99) hardy; urgency=low
1361
1362 * cli/apport-cli, qt4/apport-qt: Fix typo 'send' -> 'sent'.
1363 (LP: #139288)
1364 * apport_python_hook.py: Add user info, too. Also add check for this to the
1365 test suite. (LP: #145109)
1366 * apport/ui.py, run_crash(): Show a proper UI error message instead of just
1367 crashing with an exception if the crash report is inaccessible for the
1368 invoking user. (LP: #146464)
1369 * apport/crashdb_impl/memory.py: Implement mark_retraced(),
1370 get_unretraced(), and get_dup_unchecked() for completeness, and define
1371 _MemoryCrashDBTest also when not running file as __main__. This makes the
1372 class useful for higher-level test suites. Add test cases for the new
1373 functions.
1374 * apport/crashdb_impl/memory.py: Support 'dummy_data' option which adds a
1375 few dummy crashes by default. This is useful for external test suites
1376 which cannot otherwise pre-fill the in-memory db. Add checks that this
1377 works properly.
1378 * bin/crash-digger: Use self.log() more consistently, and flush stdout in
1379 log(), so that we do not lose logs on output redirection.
1380 * Add test-crash-digger: Initial test suite for bin/crash-digger.
1381 * apport/ui.py, run_crash(): Intercept CRC errors from the info collection
1382 thread, which happens on broken core dumps. (LP: #132212)
1383 * cli/apport-cli, ui_present_package_error(): Fix running of dialog, so that
1384 reporting package problems with apport-cli actually works. (LP: #136369)
1385 * apport/ui.py, run_crash(): Intercept ENOSPC and present a proper error
1386 message. (LP: #145100)
1387 * gtk/apport-gtk.glade: Fix title of upload progress window to comply to
1388 HIG. Thanks, Bruce Cowan. (LP: #144782)
1389 * qt4/apport-qt: Fix Unicode <-> UTF-8 conversion. Thanks, Daniel Hahler!
1390 (LP: #148177)
1391 * apport/ui.py: Only import xdg.DesktopEntry when a .desktop file has been
1392 found in the affected package. This avoids the dependency on servers with
1393 just apport-cli. Thanks, Matthias Gug! (LP: #130013)
1394 * apport/fileutils.py: Do not fail if there are no packages installed which
1395 have one or several .desktop files. Thanks, Matthias Gug!
1396
1397 -- Martin Pitt <martin.pitt@ubuntu.com> Sun, 28 Oct 2007 18:32:07 -0400
1398
1399apport (0.98) gutsy; urgency=low
1400
1401 [ Martin Pitt ]
1402 * debian/local/setup-apport-retracer: launchpadBugs -> launchpadbugs
1403 (recently renamed Python package in python-launchpad-bugs).
1404 * apport/crashdb_impl/launchpad.py, test examples: Do not duplicate to bug
1405 #1, that generates a huge amount of spam. Use another test bug.
1406 * apport/crashdb_impl/launchpad.py, download(): Use Bug.description_raw,
1407 since LP mangles spaces in .description. Bump p-lp-bugs dependency.
1408 * apport/crashdb_impl/launchpad.py, close_duplicate(): Explicitly set the
1409 duplicate after removing attachments, since the new LP does not allow any
1410 modification of duplicate bugs.
1411 * bin/crash-digger: Only consolidate the duplicate DB when -i is given (i.
1412 e. usually only on one running instance).
1413
1414 [ Colin Watson ]
1415 * Use bugs.launchpad.net for +filebug and +bugs requests. (LP: #138090)
1416
1417 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 01 Oct 2007 14:35:07 +0200
1418
1419apport (0.97) gutsy; urgency=low
1420
1421 [Martin Pitt]
1422 * problem_report.py: Coerce CompressedValue.__len__() to return an int to
1423 work on Python 2.4, too.
1424 * debian/local/setup-apport-retracer: Adapt ddeb apt source for the move
1425 from ~pitti to ~ubuntu-archive.
1426
1427 [Markus Korn]
1428 * port to new python-launchpad-bugs API.
1429
1430 [Daniel Holbach]
1431 * small fixes to the port.
1432 * debian/control: bumped python-launchpad-bugs Depends to >= 0.2.2.
1433
1434 -- Daniel Holbach <daniel.holbach@ubuntu.com> Tue, 04 Sep 2007 11:24:28 +0200
1435
1436apport (0.96) gutsy; urgency=low
1437
1438 * Create man pages for apport-cli, apport-chroot, and dupdb-admin.
1439 * apport/fileutils.py, find_file_package(): Try to resolve symlinks in the
1440 directory path. (LP: #125551)
1441 * apport/crashdb_impl/launchpad.py, debian/local/setup-apport-retracer: Use
1442 packaging.get_system_architecture() (which is dpkg --print-architecture on
1443 Debian/Ubuntu) instead of uname, so that this does the right thing on lpia.
1444 * problem_report.py, write_mime(): Use base64 encoding for gzipped
1445 attachments, to not screw up mail servers. Thanks to Tim Yamin for this
1446 patch!
1447 * apport/crashdb.py: Drop the last argument (-1), since it is the default
1448 anyway and did not yet exist on Python 2.4.
1449
1450 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 21 Aug 2007 14:11:48 +0200
1451
1452apport (0.95) gutsy; urgency=low
1453
1454 * general-hooks/automatix.py: Remove hashbang, it's not an executable
1455 script.
1456 * apport/report.py: Support system-wide blacklisting:
1457 /etc/apport/blacklist.d/. Add test cases.
1458 * Add doc/README.blacklist: Document blacklist.d/, install it there in
1459 setup.py.
1460 * debian/rules: Blacklist wine-preloader, so that we ignore wine crashes
1461 until an appropriate way is found to deal with them. (Point 6 of
1462 apport-better-retracing spec.)
1463
1464 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 11 Aug 2007 18:10:54 +0200
1465
1466apport (0.94) gutsy; urgency=low
1467
1468 * doc/data-format.tex: Some updates to incorporate feedback from Gnome
1469 upstream:
1470 - Do not talk about "Distributions" any more, but "Operating systems".
1471 Gnome is used on non-Linux OSs, too.
1472 - Split "DistroRelease:" field into "OS:" and "OSRelease:".
1473 - Explicitly mention that CoreDump, StackTrace etc. can also contain
1474 minidump output.
1475 - Increase document version to 0.2.
1476 * apport/report.py, obsolete_packages(): Fix crash when apt does not know an
1477 available version of a package. (LP: #128176)
1478 * test-apport: Add check that apport aborts immediately if another apport
1479 instance is already running. Also test that a symlink attack on the lock
1480 file is not possible.
1481 * bin/apport: Abort running several apport instances at the same time, by
1482 lockf()'ing /var/crashes/.lock and aborting on failure. (LP: #119622)
1483 * Add bin/gcc_ice_hook: Script to create an apport report for a gcc ICE
1484 (internal compiler exception). Add test cases to test-hooks, and ship it
1485 in the 'apport' package. (LP: #125551)
1486 * run-tests: In 'local' mode, only explicitly run the apt/dpkg
1487 implementation instead of backends/*, since the RPM ones don't have tests
1488 yet.
1489 * apport/crashdb.py: Add a second optional parameter to upload() to specify
1490 an upload progress callback function. Adapt the declarations in the
1491 Launchpad and Memory implementations, too.
1492 * apport/crashdb_impl/launchpad.py, upload(): Pass upload progress callback
1493 handler to launchpadBugs.storeblob.upload(), which supports this since
1494 version 0.2~39. Bump dependency to it accordingly.
1495 * apport/ui.py, file_report(): Define an upload progress callback handler,
1496 pass it to the crashdb upload(), and feed ui_set_upload_progress() with
1497 some actual data. (LP: #91521)
1498 * problem_report.py: Remove support for reading bz2 compressed binary data.
1499 That was only relevant during edgy's development cycle.
1500 * apport/report.py, test_add_proc_info(): Fix determination of /bin/zgrep
1501 interpreter.
1502 * problem_report.py: Switch encoding of binary values from bare zlib to
1503 proper gzip format, since this is much more useful when reusing the
1504 compressed value. Retain support for zlib-only reports. Add test cases for
1505 both old and new encodings, and adapt the other test cases for the new
1506 format. Update doc/data-format.tex accordingly.
1507 * problem_report.py, write(): Add new permitted 'binary' argument value
1508 'compressed', which retains gzip compressed binary values instead of
1509 unpacking them transparently. Add test cases.
1510 * problem_report, write_mime(): Eliminate unnecessary usage of StringIO.
1511 * problem_report, write_mime(): Make function work for compressed binary
1512 values. Add test case.
1513 * apport/report.py, add_gdb_info(): Make function work if CoreDump is a
1514 compressed value.
1515 * apport/ui.py: Load crash report with keeping compressed binaries. This
1516 avoids loading the entire uncompressed core dump into memory, and avoids
1517 recompressing it all over again for generating the crash database upload
1518 MIME document. This greatly speeds up crash reporting, too. (LP: #98562)
1519
1520 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 31 Jul 2007 21:32:00 +0200
1521
1522apport (0.93) gutsy; urgency=low
1523
1524 * apport/crashdb.py: Set sqlite connect timeout to two hours, instead of the
1525 default 5 seconds. Previously, one retracer always crashed when the other
1526 was consolidating the database.
1527 * bin/dupdb-admin, command_dump(): Correctly interpret empty version strings
1528 as 'fixed in unknown verrsion', not 'unfixed'.
1529 * apport/crashdb_impl/launchpad.py: Fix typo in bug comment string.
1530 * apport/crashdb_impl/launchpad.py: Add function get_source_info() which
1531 parses out release, version, and component from
1532 https://launchpad.net/$DISTRO/+source/$PACKAGE.
1533 * apport/crashdb_impl/launchpad.py, get_fixed_version(): If a bug is fixed,
1534 return the current version (as approximation of the version where the bug
1535 was fixed), instead of an empty string (which meant 'fixed in unknown
1536 version'). [apport-crash-duplicates spec]
1537
1538 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 25 Jul 2007 17:04:27 +0200
1539
1540apport (0.92) gutsy; urgency=low
1541
1542 * bin/crash-digger: Do not crash if duplicate db is locked when attempting
1543 to consolidate it. This happens often because in the DC we have two
1544 parallel instances (for amd64 and i386).
1545 * Move ubuntu-fat-chroot from bin/ to debian/local/, since it is so heavily
1546 Ubuntu specific.
1547 * debian/local/ubuntu-fat-chroot: Use diversions for the binaries we want to
1548 disable, so that chroot upgrades do not trash the modifications.
1549 * debian/local/setup-apport-retracer: launchpad-crash-digger ->
1550 crash-digger.
1551 * bin/crash-digger: Add option -i/--arch-indep-dupcheck to explicitly enable
1552 duplicate checking of arch-independent crashes like Python exceptions. We
1553 only want to process them on one architecture to avoid scattering the
1554 duplicate database.
1555 * apport/crashdb_impl/launchpad.py, get_unfixed(): Search for 'apport-crash'
1556 tag, not 'apport'.
1557 * bin/apport-unpack: Fix format string in error message.
1558 * apport/ui.py, __init__(): Intercept ImportError, which can happen for
1559 crashes during system upgrades. (LP: #124354)
1560 * Add general-hooks/automatix.py: Refuse to send problem reports if
1561 automatix is installed.
1562 * doc/package-hooks.txt: Do not document UnsupportableReason, since it does
1563 not make sense to set it in package hooks (it is checked before calling
1564 the hooks). Hooks should use UnreportableReason only.
1565 * apport/ui.py, test_run_crash_package(): Check that 'Package' problem
1566 reports collect additional information, too.
1567 * apport/ui.py, collect_info(): Collect additional information for 'Package'
1568 problem reports, too.
1569 * Revive preloadlib/:
1570 - Remove PIPE_CORE #ifdefs and make them the default. We do not need to
1571 support the Edgy kernel patches in this version any more.
1572 - Install signal handler for SIGABRT, too.
1573 - Read core ulimit, pass it to apport in CORE_REAL_RLIM, and set it to
1574 zero for the program, since we do not actually want the kernel to write
1575 core files when we pipe the core dump to apport.
1576 - test-apport: Pass APPORT_REPORT_DIR to the manually called apport
1577 instance in the memory clipping test; otherwise it'll write into
1578 /var/crash/, which we do not consider in library mode.
1579 * apport/crashdb_impl/launchpad.py, __init__(): Only do the "download bug
1580 #2" hack if we actually have an authentication cookie. Thus, do it only on
1581 the retracing servers, not on the client side. (LP: #125142)
1582 * apport/report.py, crash_signature(): Generate a signature for one-line
1583 Python tracebacks, too. This sometimes seems to happen, e. g. LP#124588.
1584 (LP: #125020)
1585 * apport/crashdb_impl/launchpad.py, update(): Set bug importance to Medium
1586 if retracing was successful. (LP: #106379)
1587
1588 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 24 Jul 2007 21:50:34 +0200
1589
1590apport (0.91) gutsy; urgency=low
1591
1592 * bin/apport: Remove code that supported the Edgy kernel way of core dump
1593 passing. Also factorize the CORE_REAL_RLIM evaluation, since it is likely
1594 to change in the near future.
1595 * apport/crashdb_impl/launchpad.py, close_duplicate(): Delete some
1596 attachments, as specified in apport-crash-duplicates spec, and make the
1597 bug public afterwards.
1598 * apport/crashdb_impl/launchpad.py, close_duplicate(): If the master bug is
1599 already duped to yet another bug, mark the bug to that one instead of the
1600 master.
1601 * apport/crashdb.py: Split out duplicate_db_last_consolidation() for getting
1602 the date (or seconds since) the last consolidation, so that we can use it
1603 externally.
1604 * apport/crashdb.py: Add duplicate_db_change_master_id() to change the
1605 master ID of a crash. Add test case to apport/crashdb_impl/memory.py.
1606 * Add bin/dupdb-admin: Initial version of duplicate db CLI app; can dump the
1607 db, display consolidation state, and change master bug IDs for now. Ship
1608 it in apport-retrace.
1609 * apport/crashdb.py, duplicate_db_last_consolidation(): Fix timedelta
1610 seconds calculation to actually take the days into account, too.
1611 * bin/crash-digger: Fix dumping of dup db after consolidation.
1612 * apport/ui.py:
1613 - test_run_report_bug_package(): Add test case for calling the UI in bug
1614 filing mode with an invalid package name.
1615 - run_report_bug(): Do not crash on invalid package name, generate an
1616 error message instead. (LP: #123644)
1617 * apport/fileutils.py, mark_report_seen(): Do not crash if the file has
1618 already been deleted underneath us. (LP: #122347)
1619 * apport/ui.py, run_report_bug(): Do not crash if the target process runs as
1620 a different user. Print a proper error message instead. Add test case
1621 test_run_report_bug_noperm_pid(). (LP: #121121)
1622 * apport/fileutils.py, likely_packaged(): Ignore /var/lib/schroot. Add test
1623 case. (LP: #122859)
1624 * apport/ui.py, open_url(): Intercept weird race condition for os.close()
1625 trying to close an already invalidated fd. (LP: #123180)
1626
1627 Merge the fedora branch, thanks to Will Woods <wwoods@redhat.com>:
1628
1629 * Add apport.init.fedora: Fedora specific init script.
1630 * Add apport.spec: RPM build recipe.
1631 * Add backends/packaging_rpm.py: Partial implementation of the packaging
1632 backend for RPM which applies to all RPM-based distros.
1633 * Add backends/packaging_fedora.py: Concrete packaging backend
1634 implementation for Fedora.
1635 * apport/elfcore.py: Classes for parsing general ELF files, and information
1636 from core dumps.
1637 * bin/apport: Fall back to reading signal number and PID directly from the
1638 core file (via elfcore.py) if CORE_SIGNAL and CORE_PID are not defined (i.
1639 e. when running on a non-Ubuntu kernel).
1640 * crashdb.conf: Add stanzas for Fedora and a 'debug' database which uses the
1641 'memory' crashdb implementation.
1642
1643 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 14 Jul 2007 15:08:35 +0200
1644
1645apport (0.90) gutsy; urgency=low
1646
1647 * apport/ui.py, load_report(): Catch IOError, too. LP: #118827
1648 * Merge apport-cli package into apport itself. The program itself is just 3
1649 kB compressed, and it's not worth wasting another 34 kB compressed
1650 changelog for this tiny bit.
1651 * apport/report.py, obsolete_packages(): Use the version comparison from the
1652 packaging system instead of just testing for inequality. This catches zero
1653 epochs. Thanks to Will Woods <wwoods@redhat.com>!
1654 * apport/ui.py: Add option -c/--crash-file to run the UI with a particular
1655 crash file (which can be anywhere) instead of all pending crashes in
1656 /var/crash/.
1657 * Add xdg-mime/apport.xml: XDG MIME type definition for .crash files.
1658 * Add gtk/apport-gtk-mime.desktop.in: Link text/x-apport MIME type to
1659 apport-gtk -c, so that .crash files can be reported with Gnome.
1660 * Add debian/apport.links: Install an icon symlink for the MIME type.
1661 * apport/ui.py: Do not ask the initial "Do you want to report this?"
1662 question when being invoked with --crash-file.
1663 * po/POTFILES.in: Add missing cli/apport-cli.
1664 * po/de.po: Updated for apport-cli.
1665 * cli/apport-cli: Add option for keeping the report file without sending it,
1666 and to display its path. This is for sending the report later, copying
1667 it from a server to a workstation with internet connection, etc.
1668 * apport/crashdb_impl/launchpad.py: Simplify _subscribe_triaging_team(), now
1669 that we do not differ between main and universe policies any more.
1670 * apport/report.py: Support another hook directory
1671 /usr/share/apport/general-hooks/ for scripts which are run for every
1672 problem report. This was requested for adding e. g. AppArmor logs, etc.
1673 Add test cases.
1674 * Add debian/apport.dirs again to ship that hook directory.
1675 * doc/package-hooks.txt: Document the general hooks.
1676
1677 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 10 Jul 2007 21:10:19 +0100
1678
1679apport (0.89) gutsy; urgency=low
1680
1681 Implement private crash bug handling, according to
1682 https://wiki.ubuntu.com/CrashReporting:
1683
1684 * apport/crashdb_impl/launchpad.py:
1685 - upload(): If we have an Ubuntu bug, mark it as private and only
1686 subscribe 'apport' (the 'Apport retracing service' user).
1687 - Add function _subscribe_triaging_team() which subscribes
1688 ubuntu-crashes-main for source packages in Ubuntu main or restricted, or
1689 ubuntu-crashes-universe for other packages. It does not touch non-Ubuntu
1690 bugs, since these are not marked private by default and are outside of
1691 the scope of this spec.
1692 - update(), _mark_dup_checked(): Call _subscribe_triaging_team().
1693 - Note: This entire spec is a gross hack, and Ubuntu derivatives do not
1694 benefit from it at all. We have to live with this until LP grows a real
1695 crash database.
1696 - get_distro_release(): Make this function work with private bugs, too, by
1697 using p-lp-bugs' safe_urlopen().
1698
1699 Bug fixes:
1700
1701 * apport/crashdb_impl/launchpad.py: Revert simplification change of 0.85:
1702 BugList returns a set of strings, not integers; due to non-identity they
1703 do not work with the usual set operations.
1704 * apport/crashdb_impl/launchpad.py: Add function get_source_component() to
1705 query Launchpad for the component of a given distribution and source
1706 package. (This will be required for implementing crash-reporting).
1707 * backends/packaging-apt-dpkg.py, _search_contents(): Package list is
1708 actually comma separated, only take the first item. This fixes retracing
1709 of e. g. #124139.
1710 * backends/packaging-apt-dpkg.py, _search_contents(): Fix package name
1711 parsing for non-main components. This fixes retracing of e. g. #124111.
1712 * apport/report.py, _read_maps(): Revert ptrace hack when maps cannot be
1713 read. maps file is now protected based on process ownership, not ptracing.
1714 * apport/crashdb.py, apport/crashdb_impl/launchpad.py,
1715 apport/crashdb_impl/memory.py: Remove official interface
1716 mark_dup_checked(), as it should only be an internally used function. Add
1717 report parameter, since we will need it there in the future. Remove
1718 explicit call from bin/crash-digger and instead change check_duplicate()
1719 to call it on its own.
1720 * apport/crashdb_impl/launchpad.py, download(): Replace dodgy parsing of
1721 fields from the description with proper code, so that multi-line fields
1722 are read correctly, too.
1723
1724 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 06 Jul 2007 11:19:22 +0200
1725
1726apport (0.88) gutsy; urgency=low
1727
1728 * po/de.po: Update.
1729 * backends/packaging-apt-dpkg.py, _search_contents(): Do not check the
1730 return value of zgrep. It usually errors out with 'stdout: broken pipe'
1731 when called with -m1.
1732 * bin/crash-digger: Mark a bug as retraced if DistroRelease: cannot be
1733 determined. Those are bugs apport cannot handle.
1734 * backends/packaging-apt-dpkg.py, get_source_tree(): Call apt-get source
1735 with --assume-yes to not block on VCS confirmations.
1736 * apport/crashdb.py: Add interface mark_retrace_failed(). Implement it in
1737 apport/crashdb_impl/launchpad.py.
1738 * bin/apport-retrace: If retraced report does not have a crash signature,
1739 mark it as failed with above new function. Bump python-apport dependency
1740 for this.
1741 * apport/crashdb_impl/launchpad.py, update(): Delete CoreDump.gz attachment
1742 if the retrace was successful (i. e. if the report has a crash signature).
1743 * apport/ui.py, test_run_crash(): Set the message box title, text, and
1744 severity as assertion message if the run_crash() test fails, so that you
1745 know why it fails. This usually happens if libc6 or another dependency of
1746 the test crash is out of date.
1747 * gtk/apport-gtk.glade: Mark string as translatable. LP: #119621
1748
1749 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 03 Jul 2007 21:38:05 +0200
1750
1751apport (0.87) gutsy; urgency=low
1752
1753 * apport/report.py:
1754 - test_gen_stacktrace_top(): Add test case for unwinding a Gnome assertion
1755 (g_logv(), g_assert_warning() and similar), see LP #123462.
1756 - _gen_stacktrace_top(): Generalize for unwinding multiple functions and a
1757 set of function names, and add the Gnome assertion ones.
1758
1759 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 02 Jul 2007 11:00:44 +0200
1760
1761apport (0.86) gutsy; urgency=low
1762
1763 * test-apport: Check that apport does not create reports for emtpy core
1764 dumps.
1765 * problem_report.py: Introduce a fourth optional parameter "fail_on_empty"
1766 to file pointer tuples which causes write() to raise an IOError if no data
1767 was read. Add test cases.
1768 * bin/apport: Enforce non-emptyness of CoreDump.
1769 * problem_report.py: Add test case for delayed piping of data passed as file
1770 object pointers. This was supposed to explain the reason for getting bugs
1771 with zero-byte core dumps, but already works correctly.
1772 * apport/report.py, check_ignored(): round the mtime to an int (just like
1773 mark_ignore() does), to not get wrong results on file systems that support
1774 subsecond file timestamps. This fixes running the test suite on the live
1775 CD.
1776 * test-apport: Clarify assertion message if /var/crash is not empty.
1777
1778 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 28 Jun 2007 19:14:36 +0200
1779
1780apport (0.85) gutsy; urgency=low
1781
1782 * apport/crashdb_impl/launchpad.py: BugList.bugs is already a set, simplify
1783 code a bit.
1784 * debian/control: Add dpkg-dev dependency to apport-retrace, for getting
1785 dpkg-source.
1786 * apport/report.py, crash_signature(): Allow ':' and '~' as part of function
1787 names to cover C++. Adapt test case to cover this.
1788 * apport/report.py test suite: Do not assume that /bin/zgrep uses /bin/sh,
1789 it was recently changed to use bash. Directly read the interpreter from
1790 the shebang line.
1791 * bin/apport-chroot, command_upgrade(): Supply -y to 'apt-get upgrade' also
1792 in verbose mode.
1793 * bin/apport-chroot, command_upgrade(): Run 'apt-get clean' before
1794 regenerating the chroot tarball.
1795 * backends/packaging-apt-dpkg.py, get_dependencies(): Fix crash when
1796 encountering a virtual package. LP: #122274
1797 * apport/report.py, obsolete_packages(): Do not consider virtual packages as
1798 obsolete.
1799 * apport/crashdb_impl/launchpad.py: Do a bogus call to Bug() in the ctor.
1800 This initializes python-launchpad-bugs to use a cookie for the urlopen in
1801 BugList, so that get_unretraced() and get_dup_unchecked() return private
1802 bugs, too. This works around LP #122126.
1803
1804 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 25 Jun 2007 16:38:43 +0200
1805
1806apport (0.84) gutsy; urgency=low
1807
1808 * apport/crashdb.py: Add new abstract methods:
1809 - get_unretraced() and mark_retraced(id) to get a list of crashes that
1810 need to be retraced and chalk them off.
1811 - get_dup_unchecked() and mark_dup_checked() to get a list of crashes that
1812 need to be checked for being a duplicate and chalk them off. This is
1813 aimed at crashes which do not need retracing, such as unhandled Python
1814 exceptions.
1815 * apport/crashdb_impl/launchpad.py: Implement above methods for launchpad
1816 (moving the code from bin/launchpad-crash-digger).
1817 * apport/crashdb_impl/launchpad.py: Set "need-duplicate-check" tag for
1818 Python crashes.
1819 * apport/crashdb_impl/launchpad.py, download(): Fetch Traceback.txt, too, so
1820 that we can do duplicate checking for Python crashes.
1821 * bin/launchpad-crash-digger: Drop Launchpad specific code and replace it
1822 with calls to above new functions. Rename to bin/crash-digger. Also rename
1823 all 'cookie' to 'auth' (as happened with the other applications earlier).
1824 * bin/crash-digger: Do duplicate checking for needs-duplicate-check crash
1825 bugs (such as Python crashes).
1826 * bin/apport-retrace, bin/crash-digger: More language cleanup; we should
1827 stop talking about 'bugs' and use 'crash' consistently.
1828
1829 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 14 Jun 2007 19:50:24 +0200
1830
1831apport (0.83) gutsy; urgency=low
1832
1833 * apport/crashdb.py: Separate abstract from implemented functions.
1834 * apport/crashdb.py, apport/packaging.py, apport/ui.py: Use
1835 NotImplementedError instead of Exception in the abstract methods.
1836 * apport/packaging.py: Add interface compare_versions() for comparing
1837 package version numbers.
1838 * backends/packaging-apt-dpkg.py: Implement compare_versions() using
1839 apt.VersionCompare(), add some test cases.
1840 * apport/report.py: Fix typo: 'none' -> 'None'.
1841 * apport/chroot.py: Do not include /usr/local/lib and /usr/lib in
1842 LD_LIBRARY_PATH, just /lib, so that we still use the libc from outside,
1843 but e. g. libxml2 from inside the chroot.
1844
1845 https://blueprints.launchpad.net/ubuntu/+spec/apport-crash-duplicates: Merge
1846 crash-dups branch, which implements automatic crash duplicate detection:
1847
1848 * apport/crashdb.py: Add methods for crash duplicate detection.
1849 * apport/crashdb_impl/memory.py: Change internal data management to track
1850 fixed version and duplicates.
1851 * apport/crashdb_impl/memory.py: Add a test suite for all methods, including
1852 the duplicate detection API of the base CrashDatabase (since it is
1853 much easier to test it here, on an actual implementation).
1854 * debian/pyversions: Bump minimal Python version to 2.5, since this starts
1855 providing the sqlite3 module.
1856 * apport/crashdb_impl/launchpad.py: Implement new methods required for crash
1857 duplicate detection. get_fixed_version() does not approximate version
1858 tracking yet; it just returns '' for fixed bugs (which means 'fixed, but
1859 unknown version'). Bump python-launchpad-bugs dependency for this to
1860 ensure the availability of Bug.mark_duplicate().
1861 * bin/apport-retrace: Add option --duplicate-db which specifies the path to
1862 the duplicate sqlite database and enables duplicate detection.
1863 * Abin/apport-chroot: Add option --duplicate-db. If a file is given, symlink
1864 it into the chroot and pass --duplicate-db to apport-retrace.
1865 * bin/launchpad-crash-digger: Add --duplicate-db and pass it to
1866 apport-chroot.
1867 * apport/crashdb.py: Track last run of duplicate_db_consolidate() in an
1868 extra table and add a method duplicate_db_needs_consolidation() which
1869 returns True if the last run was more than a given number of seconds ago.
1870 Add test cases to apport/crashdb_impl/memory.py.
1871 * bin/launchpad-crash-digger, fill_pool(): Check whether the duplicate
1872 database needs consolidation (i. e. updating the bug states to the reality
1873 in the bug tracker) and if so, trigger it.
1874
1875 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 13 Jun 2007 13:09:57 +0200
1876
1877apport (0.82) gutsy; urgency=low
1878
1879 * Add bin/ubuntu-fat-chroot: Script to install a set of commonly needed
1880 packages into a minimal Ubuntu chroot (as created by apport-chroot). This
1881 requires some hacking of postinst and /usr/sbin/ files in between the
1882 installation stages and thus deserves a script on its own.
1883 * apport/packaging.py:
1884 - Add "uninstalled" option to get_file_package(). If set to True, this
1885 will do an expensive search of files/packages which are not installed.
1886 - Add interface "set_mirror(URL)" for functions which need to retrieve
1887 packages and data from distribution mirrors.
1888 * backends/packaging-apt-dpkg.py: Implement "uninstalled" option and
1889 "set_mirror(URL)", add test cases.
1890 * bin/apport-retrace: Use "uninstalled" option now to install packages and
1891 corresponding -dbgsyms for uninstalled files mentioned in ProcMaps
1892 (Point 1 of apport-better-retracing spec). Bump python-apport dependency.
1893 * apport/packaging.py: Add interface get_available_version(package).
1894 * backends/packaging-apt-dpkg.py: Implement get_available_version(), add
1895 shallow test case.
1896 * apport/report.py: Add function obsolete_packages() to return packages in
1897 Package: and Depends: which are not up to date. Add test cases.
1898 * apport/ui.py, thread_collect_info(): For crashes, call obsolete_packages()
1899 and set UnreportableReason: if there are any (Point 2 of
1900 apport-better-retracing spec).
1901 * apport/ui.py, thread_collect_info(): call standard_title() and add it to
1902 the report as 'Title' field. This is useful if reporters modify the
1903 default title (per request of Brian Murray, thanks). Add test case.
1904 * apport/ui.py: Fix declaration of the test suite's
1905 ui_set_upload_progress(). Funny that this has never been triggered before.
1906 * apport/report.py, add_gdb_info(): Split out StacktraceTop generation into
1907 separate funtion _gen_stacktrace_top(), so that we can test it separately.
1908 * apport/report.py, _gen_stacktrace_top(): Step back from the crashed
1909 program's own signal handlers, since those are generally not useful for
1910 the purposes of StacktraceTop and only impede duplicate matching
1911 (Point 4 of apport-better-retracing spec). Add various test cases.
1912 * apport/report.py: Add method crash_signature() to calculate an unique
1913 identifier of a signal or Python crash, to be used for duplicate
1914 detection. Add various test cases.
1915 * apport/packaging.py: Add interface get_source_tree() to fetch and unpack a
1916 source package to a given directory, optionally specifying a particular
1917 version.
1918 * backends/packaging-apt-dpkg.py: Implement get_source_tree(). This has a
1919 rather crude 'call apt-get source and guess about directories'
1920 implementation until python-apt learns about doing this directly and more
1921 elegantly (see LP #118788).
1922 * bin/apport-retrace: Add gen_source_stacktrace() and a few helper functions
1923 to construct a field 'StacktraceSource' with the source code around the
1924 affected lines in the stack trace (as available). (Point 5 of
1925 apport-better-retracing spec).
1926 * apport/crashdb_impl/launchpad.py, update(): Attach StacktraceSource to the
1927 bug if it exists.
1928 * apport/crashdb_impl/launchpad.py: Check PackageArchitecture for 'all', to
1929 not set a retracer tag 'need-all-retrace'.
1930 * test-apport: Clarify assertion failure message when an unexpected core
1931 dump is present.
1932 * apport/report.py, get_module_license(): Do not iterate over Popen.stdout,
1933 use communicate() instead. The latter is already fixed to not trip over
1934 SIGINTR. (LP: #118965)
1935
1936 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 08 Jun 2007 07:47:04 +0200
1937
1938apport (0.81) gutsy; urgency=low
1939
1940 * apport/report.py: Remove '[apport]' default bug title prefix. (LP: #94819)
1941 * apport/crashdb_impl/launchpad.py: Tag new bugs with
1942 'apport-<problemtype>'. This replaces the former '[apport]' prefixing.
1943 * debian/local/setup-apport-retracer: Specify a path in '.' command and
1944 use sh again. Yay for me needing three attempts before actually RTFMing
1945 how '.' works (which is really nasty and strange IMHO).
1946 * bin/apport-chroot: Fix symlinks before repackaging the chroot tarball in
1947 'install' and 'installdeb' modes.
1948 * debian/local/setup-apport-retracer: Install python-libxml2 and python-apt.
1949 * bin/launchpad-crash-digger: Supply --auth instead of the deprecated
1950 --cookie to apport-chroot.
1951 * bin/apport-chroot: Fix identifier name in command_retrace().
1952 * debian/local/setup-apport-retracer: Set APPORT_CRASHDB_CONF to the local
1953 crashdb.conf.
1954 * bin/apport-chroot: Unset APPORT_CRASHDB_CONF for login and retrace.
1955 * bin/launchpad-crash-digger: Check the release of a bug and whether we have
1956 a chroot for it before untagging it. This avoids loosing tags for bugs we
1957 do not yet have a working retracer chroot for.
1958 * bin/apport-retrace: Do not abort with an exception if package installation
1959 fails. Give a proper error message instead and point to -u. (LP: #115681)
1960 * apport/crashdb_impl/launchpad.py, update(): Create a temporary directory
1961 and use proper file names for the new attachments. With TemporaryFile(),
1962 attachment file names ended up as '<fdopen>'. (LP: #115347)
1963 * apport/report.py, add_os_info(): Add field 'NonfreeKernelModules' which
1964 lists loaded kernel modules which do not have a FOSS license. This is
1965 particularly helpful for quickly checking for restricted graphics drivers.
1966 (LP: #103239)
1967 * apport_python_hook.py: Move the apport.* imports into the try: block and
1968 move the likely_packaged() test to the top, to avoid importing
1969 apport.report and creating a Report object for non-packaged scripts. This
1970 makes the entire code more efficient and robust against errors in the
1971 apport modules. (LP: #109955)
1972 * apport/report.py, add_gdb_info(): Intercept OSError from gdb invocation
1973 (which might be segfaulting itself) and just do not put any gdb output
1974 into the report. The automatic retracers can try their luck again.
1975 (LP: #112501)
1976 * bin/apport-retrace: Fix handling of packages which are still known to
1977 /var/lib/dpkg/status, but do not have an apt record any more; treat them
1978 like virtual packages and just issue a warning instead of falling over.
1979 (LP: #107474)
1980 * Add doc/data-format.tex: Documentation of the structure, encoding, and
1981 standard keys of the Apport report file format. [apport-for-upstreams
1982 blueprint]
1983 * Add doc/Makefile: Build and clean rules for generating data-format.pdf.
1984 * debian/rules, setup.py: Call doc/Makefile and install the PDF
1985 documentation. Add texlive-latex-recommended build dependency for that.
1986
1987 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 24 May 2007 19:39:12 +0200
1988
1989apport (0.80) gutsy; urgency=low
1990
1991 Collect all Launchpad specific bits in a separate class and provide an
1992 abstract base class. This will greatly help for getting upstream acceptance
1993 and the possibility of automatically forwarding crashes upstream
1994 (apport-for-upstreams specification):
1995
1996 * Add apport/crashdb.py: Abstract crash database interface. This also offers
1997 a factory function get_crashdb() which reads a configuration file to find
1998 the default crash database to be used.
1999 * Add ./crashdb.conf: Crash database configuration file, for Ubuntu on
2000 Launchpad. Modify setup.py and debian/python-apport.install to ship it in
2001 python-apport.
2002 * Add apport/crashdb_impl/memory.py: Simple in-memory implementation of
2003 crash database interface for testing.
2004 * Add apport/crashdb_impl/launchpad.py: Launchpad implementation of crash
2005 database interface.
2006 * apport/ui.py: Drop LP specific bits and move towards new CrashDatabase
2007 interface.
2008 * apport/ui.py, test suite: Do not overwrite file_report() any more, but
2009 use the memory CrashDatabase. This will test the actual file_report()
2010 implementation and allows the test suite to check the precise value of
2011 opened URLs.
2012 * apport/{report,ui}.py: Move UserInterface.create_crash_bug_title() and its
2013 test cases to Report.standard_title(). It is much more appropriate there
2014 and can be used in the retracer as well.
2015 * bin/apport-retrace: Drop LP specific bits and move to CrashDatabase
2016 interface. Remove the --remove-tag option, we really should not have it
2017 here; remove it from man/apport-retrace.1 as well.
2018 * bin/apport-chroot: Drop --remove-tag option here, too.
2019 * bin/apport-chroot: Drop LP specific bits and move to CrashDatabase
2020 interface.
2021 * bin/launchpad-crash-digger: Remove retracing tag directly instead of
2022 passing --remove-tag to apport-chroot. This is a much cleaner design and
2023 avoids infinitely looping on some weirdly failing retraces.
2024 * debian/control: Bump some python-apport dependencies for the API changes.
2025
2026 Some debranding:
2027
2028 * setup.py: Use apport wiki home page for 'url'.
2029 * Remove 'X-Ubuntu-Gettext-Domain' from *.desktop.in, since langpack.mk will
2030 add it automatically now.
2031 * *.desktop.in: Remove 'in Ubuntu' from comment.
2032 * cli/apport-cli, qt4/apport-qt: Generalize window titles.
2033
2034 Other fixes:
2035 * po/de.po: Update.
2036 * debian/local/setup-apport-retracer: Revert back 'source' to '.' and use
2037 bash instead of sh. POSIX sh does not seem to have a 'source' command.
2038
2039 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 May 2007 19:25:31 +0200
2040
2041apport (0.79) gutsy; urgency=low
2042
2043 * debian/local/setup-apport-retracer: Fix '.' bashism, replace it with
2044 'source'.
2045 * problem_report.py, write_mime(): Drop preamble argument, replace it with
2046 an extra_headers dictionary. This is much easier to evaluate on clients.
2047 * apport/ui.py: Convert to new write_mime() interface from above. This
2048 finally automatically tags bugs with need-$ARCH-retrace. Bump
2049 p-problem-report dependency of python-apport for this.
2050 * apport/report.py: Change example URLs in the testsuite from launchpad to
2051 an artificial ones to avoid the impression that it is LP specific.
2052 * backends/packaging-apt-dpkg.py: Formally make this a subclass of
2053 apport.packaging.PackageInfo.
2054 * debian/control: Use code.lp.net instead of bazaar.lp.net VCS URL.
2055 * bin/kernel_hook: Fix/improve the collected information:
2056 - Read /proc/modules instead of lsmod.
2057 - Fix lspci argument: -n instead of -m.
2058 - Add /proc/cmdline.
2059 * debian/rules: Use langpack.mk for updating the .desktop files.
2060 * Add po/Makevars to specify the domain, to make intltool figure out the
2061 gettext domain automatically.
2062 * bin/kernel_hook, ./test-hooks: Do not rely on /proc/version_signature any
2063 more, it's gone in the gutsy kernel.
2064
2065 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 21 May 2007 15:55:10 +0200
2066
2067apport (0.78) gutsy; urgency=low
2068
2069 * apport/packaging.py, backends/packaging-dpkg.py: Add new interface
2070 is_distro_package(package) which verifies the origin of a given package.
2071 Move the dodgy hack from apport/ui.py to the backend, where it belongs to.
2072 Also add a test case.
2073 * debian/control: Add python-apt dependency to python-apport.
2074 * debian/control: Remove debianutils dependency, it's essential.
2075 * Drop backends/packaging-dpkg.py. It had some hackish usage of python-apt
2076 anyway, since some things just cannot be figured out with dpkg alone.
2077 Since we have to give up on that idea, implement a new clean packaging
2078 backend 'packaging-apt-dpkg.py' which now uses python-apt and dpkg in a
2079 clean way.
2080 * apport/report.py, add_gdb_info(): Fix crash when Stacktrace could not be
2081 created. (LP: #107853)
2082 * ./test-apport: Check that crashes create a core dump (with proper ulimits)
2083 when an unseen crash report exists already. This reproduces LP #105976.
2084 * bin/apport: Create core dump file if aborting because an unseen crash
2085 report already exists. (LP: #105976)
2086 * apport/ui.py: Add a comment for translators. (LP: #104703)
2087 * apport/ui.py, load_report(): Also catch zlib.error on invalid reports.
2088 (LP: #103547)
2089 * apport/report.py: Add method has_useful_stacktrace() to determine whether
2090 the stack trace can be considered useful. The current heuristic is to
2091 consider it useless if it either is shorter than three lines and has any
2092 unknown function, or for longer traces, a minority of known functions. Add
2093 test cases.
2094 * gtk/apport-gtk, qt4/apport-qt, cli/apport-cli: Do not offer 'reduced
2095 report' option if the stack trace is useless. (LP: #87430) Bump the
2096 python-apport dependencies of the frontend packages to ensure that we have
2097 has_useful_stacktrace().
2098
2099 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 5 May 2007 17:53:42 +0200
2100
2101apport (0.77) gutsy; urgency=low
2102
2103 * apport/report.py: Replace any() call with a list comprehension to work
2104 with Python < 2.5. (LP: #104864)
2105 * apport/report.py: Move the ctypes import to the one place where we
2106 actually need it, and do not entirely fail if they do not exist (such as
2107 in Python 2.4). It is only required for non-default Feisty kernels anyway.
2108 (LP: #107662)
2109 * apport/chroot.py: Fix test suite to work with Python 2.4's tarfile module
2110 output format.
2111 * debian/local/setup-apport-retracer: Generalized some feisty specific
2112 bits, set default release to gutsy.
2113
2114 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 23 Apr 2007 12:22:17 +0200
2115
2116apport (0.76) feisty; urgency=low
2117
2118 * Move python_hook.py out of the apport module to apport_python_hook.py, so
2119 that it does not inflict the expensive import of all apport related
2120 modules to every python program. Adapt module prefixes accordingly.
2121 (LP: #105764)
2122 * setup.py, debian/python-apport.install: Install apport_python_hook.py into
2123 the python-apport binary package.
2124 * apport/ui.py test suite: Unset locale related environment variables so
2125 that the tests which check strings are not invalidated by translations.
2126
2127 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 12 Apr 2007 11:47:50 +0200
2128
2129apport (0.75) feisty; urgency=low
2130
2131 * apport/report.py, add_proc_info(): Chop off /rofs/ prefix from
2132 ExecutablePath, so that crashes work on the live system, too. Arguably a
2133 kernel bug, but probably too hard to fix at this time. (LP: #102909)
2134 * backends/packaging-dpkg.py, get_modified_files(): Ignore empty lines in
2135 broken .md5sums file rather than crashing on them. (LP: #102906)
2136
2137 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Apr 2007 21:51:28 +0200
2138
2139apport (0.74) feisty; urgency=low
2140
2141 * debian/apport-{gtk,qt}.install: Do not install .desktop files for now,
2142 until we get a proper guided bug reporting.
2143 * problem_report.py, write_mime(): Do not re-compress keys which already end
2144 in .gz. Add test cases.
2145 * test-hooks: Add a (dodgy) test case for calling package_hook on an
2146 uninstalled package. After all, this is very likely to happen for
2147 installation errors. This reproduces #97636.
2148 * backends/packaging-dpkg.py, get_source(): Add a similarly dodgy fallback
2149 to apt if the queried package is not installed. This needs to be
2150 generalized and cleaned up later, but now is the time for unintrusive
2151 small patches. (LP: #97636)
2152 * test-apport: Do not fail on non-empty gdb stderr if it only consists of a
2153 single warning (as happens on powerpc).
2154 * apport/report.py, test_check_interpreted(): Run gedit test on an actually
2155 existing file, reproducing the interpreter confusion reported in #102056.
2156 * apport/report.py, _check_interpreted(): Add a whitelist of common
2157 interpreters and check ExecutablePath against it. (LP: #102056)
2158 * apport/ui.py: Ignore SystemError exceptions from apt, which happen on
2159 badly formatted source.list entries. (LP: #98901)
2160 * apport/ui.py: Fix crash on None candiateOrigin from the apt cache object.
2161 (LP: #98961)
2162 * gtk/apport-gtk.glade: Add window titles to progress and details dialogs.
2163 (LP: #97640)
2164
2165 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 4 Apr 2007 14:44:08 +0200
2166
2167apport (0.73) feisty; urgency=low
2168
2169 * problem_report.py, write(): Allow a third optional argument in tuple
2170 values, which specify a maximum file size. Above it, the entire key gets
2171 removed. Add testsuite checks for all boundary cases.
2172 * bin/apport: Limit core dump size to 75% of usable RAM
2173 (MemFree+Cached-Writeback). This should avoid trashing people's boxes hard
2174 on huge core dumps. Bump dependencies on python-problem-report. Create an
2175 expensive, but realistic check for this in test-apport.
2176 (LP: #71560)
2177 * apport/ui.py, run_crash(): If a signal crash report does not have a core
2178 dump, explain that the computer has too little memory for an automatic
2179 analysis/report of the crash. Add test suite check.
2180
2181 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 29 Mar 2007 23:38:23 +0200
2182
2183apport (0.72) feisty; urgency=low
2184
2185 [ Martin Pitt ]
2186 * bin/apport-chroot, command_create(): Install gpgv.
2187 * bin/apport-retrace: Fix error handling in fetch_unpack().
2188 * Move apport-retrace.1 manpage from package apport to apport-retrace. Bump
2189 Conflicts/Replaces accordingly.
2190 * bin/launchpad-crash-digger, apport/ui.py: Remove the special case
2191 'powerpc'->'ppc' and use need-powerpc-retrace uniformly.
2192 * debian/control: Add XS-Vcs-Bzr: header.
2193 * apport/ui.py: Fix wrong parameter name in help message.
2194 * Another grammar fix, thanks to Brian Murray!
2195
2196 [ Michael Hofmann ]
2197 * debian/local/ubuntu-bug: Try to use apport-cli, if we do not have a
2198 $DISPLAY, or neither Gnome nor KDE are running.
2199 * debian/control: Recommend elinks, since it is the only text browser so far
2200 that works with Launchpad (see #59510)
2201 * Add debian/apport-cli.README.Debian: Describe how to integrate
2202 apport-checkreports and apport-cli into .bashrc for crash notification on
2203 servers.
2204 * qt4/apport-qt: Fix undefined symbol in ui_present_package_error().
2205 (LP: #97282)
2206
2207 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 29 Mar 2007 11:41:39 +0200
2208
2209apport (0.71) feisty; urgency=low
2210
2211 * cli/apport-cli, qt4/apport-qt: Fix bad grammar 'some minutes'.
2212 (LP: #95296)
2213 * problem_report.py, write_mime(): Add optional 'preamble' parameter. Add
2214 test case.
2215 * apport/ui.py, upload_launchpad_blob(): Set need-$ARCH-retrace tag in MIME
2216 preamble. Bump p-problem-report dependency. (LP: #94790)
2217 * bin/apport-retrace: In verbose mode, display the path of currently
2218 extracting deb.
2219 * bin/apport-retrace: Do not fall over errors of dpkg -x (which happens e.
2220 g. on udev, where it cannot unpack /dev, since this is a symlink to the
2221 real /dev). Merely print out a warning about it.
2222 * apport/ui.py, run_report_bug(): Ignore ENOENT from add_proc_info(). This
2223 happens if the user closes the application prematurely, so that /proc/pid
2224 does not exist any more. Add test case. (LP: #95954)
2225 * backends/packaging-dpkg.py, get_modified_files(): Ignore lines in .md5sums
2226 files which contain a NUL byte. This Should Not Happen™, but nevertheless
2227 did. (LP: #96050)
2228 * apport/ui.py, doc/package-hooks.txt: Check for a field
2229 "UnreportableReason: <text>" and display an information box that the
2230 current crash cannot be reported because of <text>. Add test case.
2231 Document the new field.
2232 * apport/ui.py: Check package origin, compare it to DistroRelease:, and
2233 report crash as unreportable if they do not match. This particularly saves
2234 the user from uploading large reports for e. g. opera crashes, and avoids
2235 filing Ubuntu bugs from Debian installations. (LP: #75513)
2236
2237 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Mar 2007 18:01:24 +0200
2238
2239apport (0.70) feisty; urgency=low
2240
2241 [ Martin Pitt ]
2242 * bin/apport-retrace: Add option --remove-tag to remove a Launchpad bug
2243 tag. This is intended for an automatic Malone crash retracing system.
2244 * debian/control: Bump python-launchpad-bugs dependency to ensure that we
2245 have Bug.[gs]et_metadata().
2246 * man/apport-retrace.1: Add documentation for --confirm and --remove-tag.
2247 * bin/apport-chroot: Add option --remove-tag and pass it to apport-retrace.
2248 * apport/chroot.py, fix_symlinks(): Convert chroot path prefixed absolute
2249 symlinks to relative symlinks to avoid fakechroot's weird handling of
2250 absolute symlinks.
2251 * Add bin/launchpad-crash-digger: Daemon for watching out for
2252 need-$ARCH-retrace tagged Ubuntu bugs in Launchpad and calling
2253 apport-retrace on them.
2254 * bin/apport-retrace: Mangle bug comment with StacktraceTop to not contain
2255 invalid UTF-8, to avoid getting Internal Server Errors from LP.
2256 * debian/local/setup-apport-retracer: Install libc6-i686{,-dbgsym} into an
2257 x86 chroot, to get sane x86 backtraces for crashes in libc.
2258 * debian/local/setup-apport-retracer:
2259 - Unpack and install python-launchpad-bugs locally if the package is not
2260 installed.
2261 - Link launchpad-crash-digger into the retracer's bin/ dir.
2262 * run-tests: Run tests with python's -tt flag to catch whitespace errors.
2263 * Replace tabs with spaces in all Python files. (LP: #93561)
2264 * Remove trailing white space in all Python files.
2265 * apport/report.py, add_proc_info(): Do not regard symlinks to executables
2266 as interpreted scripts any more (such as Debian alternatives). Add test
2267 case. (LP: #94732)
2268 * problem_report.py: Add new method get_new() which returns a set of all
2269 keys which have been added since load() or construction. Add test cases.
2270 * problem_report.py: Add optional parameter only_new to write(), which
2271 writes only the get_new() keys. Add test case.
2272 * apport/ui.py: Remember currently processed report file and update it with
2273 the added information, so that it becomes useful for local evaluation,
2274 too. Bump python-problem-report dependency to ensure write()'s only_new
2275 availability. (LP: #94678)
2276 * apport-chroot: Add forgotten sys.exit(1) after printing the error message
2277 about an invalid chroot specification.
2278 * apport/ui.py, run_crash(): Check for a field "UnsupportableReason: <text>"
2279 and display an information box that the current configuration cannot be
2280 supported because of <text>, instead of processing and reporting the
2281 crash. Add test case for this workflow. With special regards to our
2282 Firefox crash triagers who want to get rid of the hundreds of
2283 flash-related crashes. :)
2284 * apport/report.py, add_hooks_info(): Use execfile() instead of
2285 __import__(), since package names might conflict with module names already
2286 imported into apport's namespace. Also search for hook named after the
2287 source package name (prefixed with 'source_'). Add test cases.
2288 * bin/apport-chroot: When specifying --save for login, only save the tarball
2289 if the exit status is 0.
2290 * bin/apport-chroot, create: Install /usr/sbin/policy-rc.d to disable init
2291 scripts.
2292 * bin/apport-chroot: Fixed command function selection to not abort with
2293 'unknown command' if the DistroRelease: was unknown.
2294 * bin/apport-retrace: Replace --no-purge with --no-dpkg. With this option,
2295 do not call dpkg --unpack any more, but dpkg -x, to avoid any fchmod() and
2296 other calls which cause problems in fakechroots.
2297 * bin/apport-retrace: Fix ordering of version numbers in warning message.
2298 * doc/package-hooks.txt: Add some examples, document source package hook.
2299
2300 [ Kees Cook ]
2301 * apport/report.py, add_proc_info(): If reading /proc/pid/maps fails,
2302 ptrace() the target process to make it readable (proposed security
2303 improvement in future kernels).
2304 * bin/apport-retrace: Fix crash for packages unknown to the apt cache.
2305 * apport/report.py, add_gdb_info(): Limit maximum backtrace depth to 2000 to
2306 avoid infinitely looped stacks and gdb crashes. (LP: #94455)
2307 This also caps the maximum size of information that we add to reports.
2308 (LP: #92653)
2309 * bin/apport-retrace: Add option -R/--rebuild-package-info, so that
2310 apport-retrace works on unprocessed crash dumps in /var/crash.
2311 * Some grammar corrections.
2312 * Add package-hooks/source_apport.py: Package hook for apport itself.
2313 Include /var/log/apport.log and the status of files in /var/crash.
2314
2315 [ Michael Hofmann ]
2316 * Add cli/apport-cli, setup.py, debian/apport-cli.install, debian/control:
2317 Add command line user interface.
2318 * apport/ui.py, format_filesize(): Use MiB and GiB instead of MB and GB;
2319 these are the official units. Adapt test cases.
2320 * apport/ui.py, collect_info()/file_report(): Do not raise an exception on
2321 KeyboardInterrupt in the subthreads.
2322 * apport/ui.py, open_url(): Do not use gtk.MessageDialog(), but
2323 ui_error_message(), and fix error passing so that the message is
2324 displayed in the parent thread.
2325 * apport/ui.py, open_url(): Check that $DISPLAY is set before considering
2326 the KDE/Gnome web browsers.
2327
2328 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Mar 2007 09:41:03 +0200
2329
2330apport (0.69) feisty; urgency=low
2331
2332 * apport-chroot: Add command 'installdeb' to conveniently install a bunch of
2333 .debs into a chroot.
2334 * apport-chroot: Fix 'login' and 'upgrade' commands to not require
2335 specifying a chroot map when giving a chroot tarball path as argument.
2336 * test-apport: Check that core dumps are written for packaged programs as
2337 well, if ulimits want them. (Test for #92029)
2338 * bin/apport: Call write_user_coredump() for packaged program crashes and
2339 SIGABRT as well. (LP: #92029)
2340
2341 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Mar 2007 17:37:23 +0100
2342
2343apport (0.68) feisty; urgency=low
2344
2345 [ Michael Hofmann ]
2346 * qt4/apport-qt: Fix taskbar entry, remove an unused method.
2347 * qt4/error.ui: Fix icon spacing.
2348
2349 [ Martin Pitt ]
2350 * apport-retrace: Add option --confirm to display the retraced stack traces
2351 and ask for confirmation before uploading them as LP bug attachments.
2352 (LP: #91878)
2353 * apport-chroot: Add option --confirm-attach; if given, call apport-retrace
2354 with --confirm.
2355
2356 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 15 Mar 2007 00:05:18 +0100
2357
2358apport (0.67) feisty; urgency=low
2359
2360 * debian/local/setup-apport-retracer: Add apt sources for restricted,
2361 universe, and multiverse, too.
2362 * po/de.po: Update from Rosetta.
2363 * apport/report.py: Remove undefined call to error_log() in
2364 _command_output(), replace it with raising proper exceptions.
2365 * bin/apport-retrace: Fix 'numer' typo. (LP: #91680)
2366 * test-apport: Check that non-packaged executables generate a core dump on
2367 SIGABRT, too (test case for bug #92029).
2368 * bin/apport: Move check for ignoring SIGABRT below the core dump file
2369 writing for non-packaged binaries. (LP: #92029)
2370 * gtk/apport-gtk.glade:
2371 - Remove titles from the progress windows to comply with Gnome HIG and not
2372 repeat the text content.
2373 - Improve wording a bit.
2374 - LP: #92114
2375 * gtk/apport-gtk{,.glade}: Fix signal handler name of the Cancel button in
2376 the upload progress dialog, so that it actually works. (LP: #92115)
2377
2378 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 14 Mar 2007 17:34:57 +0100
2379
2380apport (0.66) feisty; urgency=low
2381
2382 * Remove apport/MultipartPostHandler.py, this functionality moved to
2383 python-launchpad-bugs now. Add a dependency to that package.
2384 * apport/ui.py, upload_launchpad_blob(): Use the shiny new
2385 launchpadBugs.storeblob.upload().
2386 * bin/apport-retrace: Attach retraced stack traces back to the Launchpad bug
2387 report if no other output option is given (This corresponds to the
2388 in-place editing when a report file is specified). Add option --cookie to
2389 specify a Mozilla-style cookie file for the necessary Launchpad
2390 authentication.
2391 * man/apport-retrace.1: Document above apport-retrace changes.
2392 * bin/apport-chroot: Add --cookie option: temporarily symlink cookie into
2393 the chroot and pass it to apport-retrace in retrace mode.
2394
2395 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 10 Mar 2007 15:01:57 +0100
2396
2397apport (0.65) feisty; urgency=low
2398
2399 * debian/local/setup-apport-retracer:
2400 - Replace grep-dctrl with grep call, since grep-dctrl is not installed in
2401 all the DC chroots.
2402 - Do not download apport source from archive.u.c., instead require that
2403 this script lives in the unpacked apport source tree.
2404 * bin/apport-chroot: Use apt-get options -y and --allow-unauthenticated when
2405 installing additional packages.
2406 * bin/apport-chroot: Handle --extra-package for 'upgrade', too, to provide a
2407 simple way of adding a package to an existing chroot tarball.
2408 * debian/local/setup-apport-retracer: Create tarball chroots by default.
2409 It only imposes a negligible overhead, and sharing unpacked directories
2410 with multiple people is just too brittle.
2411 * bin/apport-retrace: Add option --no-purge to not purge unpacked packages
2412 after retracing. This is (only) useful with temporarily unpacked chroots,
2413 since it's only a waste of time there.
2414 * bin/apport-chroot: Call apport-retrace with --no-purge when retracing in a
2415 chroot tarball.
2416 * apport/chroot.py: Add fix_symlinks() method to remove the chroot root
2417 directory prefix from symbolic links; they prevent function of tarball
2418 chroots and moving around directory chroots. Add test case.
2419 * bin/apport: Fix symlinks after creating and upgrading a chroot.
2420 * bin/apport-chroot: Add option --save to update a tarball after logging
2421 in to it.
2422
2423 -- Martin Pitt <martin.pitt@ubuntu.com> Sat, 10 Mar 2007 21:21:25 +0100
2424
2425apport (0.64) feisty; urgency=low
2426
2427 * bin/apport-chroot: Add 'login' command.
2428 * bin/apport-chroot: Install apport-retrace into a newly created chroot.
2429 * Add debian/local/setup-apport-retracer: Script to install local versions
2430 of apport, debootstrap, fake{,ch}root libraries, and a feisty apport
2431 fakechroot. This works OOTB on ronne's amd64 and i386 feisty chroots. The
2432 script is not shipped in any package yet, but it's convenient to ship it
2433 in revision control and in the source.
2434 * apport/report.py, _check_interpreted(): When calling an interpreter with a
2435 script name as argument, set ExecutablePath to the script instead of the
2436 interpreter. Add test case. (LP: #88794)
2437 * apport/report.py, search_bug_patterns(): Catch all exceptions from
2438 urlopen(), not just IOError. Sometimes this fails with funnier errors.
2439 (LP: #89589)
2440 * bin/apport-retrace: Give some additional explanation when installing
2441 packages fails. (LP: #89916)
2442 * apport/fileutils.py, get_all_{system_,}reports(): Fix file access race
2443 condition. (LP: #89977)
2444 * bin/apport-retrace: Add option -p/--extra-package to install an additional
2445 package for retracing. May be specified multiple times. Document new
2446 option in man/apport-retrace.1. (LP: #90077)
2447 * bin/apport-chroot: Add a similar option -p/--extra-package and install
2448 those in the 'create' command and simply pass it to apport-retrace in the
2449 'retrace' command. (LP: #90077)
2450 * bin/apport-chroot: Add a -v/--verbose option.
2451 * bin/apport-retrace: Do not complain about missing ddebs for Arch: all
2452 packages.
2453
2454 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 6 Mar 2007 16:20:41 +0100
2455
2456apport (0.63) feisty; urgency=low
2457
2458 New feature: fakechroot support for apport-retrace
2459
2460 * bin/apport-retrace:
2461 - Simplify program design and throw away the complicated debug symbol
2462 sandbox generation, along with the -d and -C options. Instead, directly
2463 install the missing packages and ddebs with apt. This makes the tool more
2464 suitable for running in chroots and has often been requested anyway.
2465 - Add option -u/--unpack-only which causes additionally installed packages
2466 to be unpacked without being configured and purged again after
2467 retracing. This allows apport-retrace to work under fakechroot and has
2468 the nice side effect of speeding up package installation (we do not care
2469 about configuration for retracing anyway).
2470 * man/apport-retrace.1: Update description for the new behaviour, drop
2471 documentation of the -d and -C options, and add documentation of -u.
2472 * Add apport/chroot.py: Class for representing and working with chroots;
2473 this uses the fakeroot and fakechroot libraries when being called as
2474 non-root.
2475 * Add bin/apport-chroot: CLI frontend for doing various things with
2476 chroots (including fakeroot/fakechroot support from the Chroot class). For
2477 now, this implements:
2478 - create a chroot (tarball or directory)
2479 - dist-upgrade a particular or all chroots
2480 - apport-retrace a bug or Apport report file
2481 * setup.py: Ship apport-chroot in scripts directory.
2482 * Add a new package apport-retrace which ships apport-retrace and
2483 apport-chroot and carries all the heavier dependencies (binutils,
2484 python-launchpad-bugs, python-apt, etc.). Drop the latter two dependencies
2485 from the apport package. This allows us to install the apport-retrace
2486 package in fakechroots (not possible with apport itself) and avoid
2487 unnecessary dependencies on normal desktop installations.
2488
2489 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 5 Mar 2007 11:20:36 +0100
2490
2491apport (0.62) feisty; urgency=low
2492
2493 * apport/ui.py, collect_info(): Use REThread instead of Thread and raise
2494 exceptions from it, so that errors during info collection actually become
2495 visible.
2496 * apport/report.py, add_proc_info(): Check that ExecutablePath actually
2497 exists, so that invalid values from transient error conditions are ignored
2498 (such as '/usr/bin/gnome-panel\x00\x00\x8b (deleted)').
2499 * apport/packaging.py: Add interface get_system_architecture() to return the
2500 system architecture in the distro specific notation. This can differ from
2501 get_architecture(package) on multiarch platforms such as amd64.
2502 * backends/packaging-dpkg.py: Implement get_system_architecture() to return
2503 dpkg --print-architecture, add a shallow test case.
2504 * apport/report.py, add_package_info(): Rename key 'Architecture:' to
2505 'PackageArchitecture:' for clarity.
2506 * apport/report.py, add_os_info(): Add system architecture as
2507 'Architecture:' field.
2508 * apport/ui.py, create_crash_bug_title(): Append warning about non-native
2509 package if package architecture does not match the system's one.
2510 * All test suites: Remove redundant word 'behaviour' from test descriptions.
2511 * test-hooks: Run tests on installed hooks in /usr/share/apport by default
2512 and add a '--local' switch to test the hooks in the source tree instead.
2513 Use this option in run-tests.
2514 * apport/report.py, test_add_proc_info(): Change the python script test
2515 so that it does not depend on being run in the source tree.
2516 * run-tests: Add a 'local' command line option which runs tests on the files
2517 and modules in the build tree. Run tests on system files/modules by
2518 default.
2519 * setup.py, debian/apport.install: Ship test-hooks, test-apport, and
2520 run-tests in /usr/share/apport/testsuite/, so that the full test suite can
2521 be run in the installed system.
2522 * gtk/apport-gtk.desktop.in: Only show in Gnome and Xfce.
2523 * qt4/apport-qt.desktop.in: Only show in KDE.
2524
2525 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 1 Mar 2007 10:43:29 +0100
2526
2527apport (0.61) feisty; urgency=low
2528
2529 * bin/apport:
2530 - Kernel 2.6.20-9 now sets CORE_REAL_RLIM to -1 instead of not setting it;
2531 handle this case correctly. (LP: #87065)
2532 - Add forgotten multiplication of CORE_REAL_RLIM with 1024, since ulimit
2533 sets kB, not bytes.
2534
2535 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 27 Feb 2007 16:06:11 +0100
2536
2537apport (0.60) feisty; urgency=low
2538
2539 * gtk/apport-gtk.glade: Reintroduce window titles. Since the crash
2540 notifications are like alerts, title have been removed recently to comply
2541 with Gnome HIG standards, but then the user will get 'nameless window'
2542 buttons in the task bar. Let's have the smaller evil then. (LP: #87164)
2543 * apport/packaging.py: Add get_architecture() interface for determining the
2544 architecture of a particular package (which might not match the overall
2545 system architecture on multiarch-capable systems, e. g. an i386 Firefox
2546 package installed on amd64).
2547 * backends/packaging-dpkg.py: Implement get_architecture() and add test
2548 case.
2549 * apport/report.py, add_package_info(): Add Architecture: field.
2550 (LP: #87424)
2551 * apport/ui.py: Already mark report as seen when we load it, not just in the
2552 information collection thread. That way, reports will only be shown once
2553 on systems which have /var/crash mounted noatime, too. (LP: #85809)
2554 * apport/fileutils.py, mark_report_seen(): If os.utime() fails, and opening
2555 the report file for reading does not change the atime (happens with
2556 noatime mount option), don't throw an exception, just delete the report.
2557 (other aspect of LP: #85809)
2558 * qt4/apport-qt: Wrap gettext() into an unicode(str, 'UTF-8') call,
2559 otherwise all non-ASCII unicode strings are broken. (LP: #87757)
2560
2561 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 26 Feb 2007 20:55:40 +0100
2562
2563apport (0.59) feisty; urgency=low
2564
2565 * apport/report.py: Check that interpreter options are discarded in
2566 test_check_interpreted_script(). This replicates bug #87005.
2567 * apport/report.py, _check_interpreted_script(): Filter out interpreter
2568 command line options. This should make the detection of interpreted
2569 scripts more robust. (LP: #87005)
2570 * test-apport, check_crash(): Differ between expecting the program dumping
2571 core and finding a core dump on disk, because this is not equivalent any
2572 more with core pipelining.
2573 * bin/apport: Write core files into a process' cwd if the process' ulimit
2574 requests and permits it and the crashes process is not packaged, so that
2575 developers get happy again. Test this behaviour with various ulimits in
2576 test-apport.
2577 * test-apport: Check that the core file written by apport is valid. This
2578 uncovers kernel bugs like #87065
2579 * problem_report.py test suite: Use assertAlmostEqual() when comparing stat
2580 times, since they are floats on some systems.
2581 * apport/report.py, add_gdb_info():
2582 - Remove all the initial gdb output, which gets rid of the duplicated #0
2583 line.
2584 - Replace some stray tabs with spaces.
2585 - Thanks to Kees Cook for this!
2586
2587 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 22 Feb 2007 19:52:52 +0100
2588
2589apport (0.58) feisty; urgency=low
2590
2591 * qt4/apport-qt.desktop.in move to System menu
2592
2593 -- Jonathan Riddell <jriddell@ubuntu.com> Tue, 20 Feb 2007 11:35:17 +0000
2594
2595apport (0.57) feisty; urgency=low
2596
2597 * apport/ui.py: Intercept ENOMEM and fail gracefully; there is little else
2598 we can do at that point, and there is no point in presenting a crash
2599 report for this. (LP: #85155)
2600 * apport/ui.py: Ignore KeyError when deleting the CoreDump field on sending
2601 a reduced report. This Should Not Happen™, but nevertheless did.
2602 (LP: #86083)
2603 * gtk/apport-gtk, qt4/apport-qt: Intercept ImportError for the non-builtin
2604 Python modules. This usually happens for crashes when there is a
2605 dist-upgrade active and some Python packages have not been configured yet.
2606 (LP: #86007)
2607 * apport/ui.py: If the problem report does not apply to a packaged program,
2608 and we have an ExecutablePath, mention it in the error message for easier
2609 debugging.
2610 * apport/python_hook.py: Resolve symbolic links in ExecutablePath.
2611 (LP: #85529)
2612 * apport/ui.py, open_url(): Remove debugging print statement again, now
2613 that we tracked down bug #83974.
2614
2615 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 19 Feb 2007 14:40:29 +0100
2616
2617apport (0.56) feisty; urgency=low
2618
2619 * apport/ui.py, open_url(): When being invoked as root, call gnome-open or
2620 firefox as root through sudo instead of dropping our uid/gid and calling
2621 it normally. The latter does not work for Firefox for some mysterious
2622 reason. Thanks to Mika Fischer for this trick. (LP: #81207)
2623 * Add debian/local/ubuntu-bug.1: Manpage for ubuntu-bug. Add it to
2624 debian/apport.manpages.
2625 * qt4/apport-qt: Add some missing features that are present in the GTK UI:
2626 - Do not show details by default, add a button to show them.
2627 - Add complete/reduced bug report radio buttons.
2628 - Thanks to Michael Hofmann for this!
2629
2630 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 15 Feb 2007 14:59:07 +0100
2631
2632apport (0.55) feisty; urgency=low
2633
2634 * Add debian/local/ubuntu-bug: Check for a running KDE or Gnome session,
2635 availability of apport-gtk and -qt, and open the appropriate GUI in bug
2636 filing mode. This makes it convenient for shell users and is also required
2637 for proper Firefox 'Report a bug...' menu integration (see bug #85041).
2638 * debian/apport.install: Install ubuntu-bug to /usr/bin.
2639 * gtk/apport-gtk: Generously add some gtk.main_iteration() calls to avoid
2640 hanging dialogs, since we do not have a main loop.
2641 * apport/ui.py: Do not silently ignore exceptions while uploading data to
2642 Launchpad, but intercept them and display their message in the error
2643 dialog. (Part of LP: #84992)
2644 * apport/ui.py: Switch from edge.launchpad.net to production launchpad.net,
2645 since the necessary bits are now there. (LP: #84992)
2646
2647 -- Martin Pitt <martin.pitt@ubuntu.com> Wed, 14 Feb 2007 13:37:52 +0100
2648
2649apport (0.54) feisty; urgency=low
2650
2651 * bin/apport: Re-enable, now that our kernel has been fixed to pipe complete
2652 core dumps to us.
2653
2654 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 13 Feb 2007 09:33:38 +0100
2655
2656apport (0.53) feisty; urgency=low
2657
2658 * apport/ui.py, open_url(): Remove some accidentally left-over debugging
2659 junk.
2660 * gtk/apport-gtk: Process pending GTK events after hiding the info
2661 collection window to avoid a hanging dead dialog.
2662 * gtk/apport-gtk: Do not count the lines of fields with binary data. This
2663 particularly avoids long delays with huge core dumps. (LP: #81979)
2664 * apport/ui.py, open_url(): Print URL to stdout, so that we can debug the
2665 weirdness in #83974.
2666
2667 -- Martin Pitt <martin.pitt@ubuntu.com> Mon, 12 Feb 2007 16:57:05 +0100
2668
2669apport (0.52) feisty; urgency=low
2670
2671 * apport/report.py: Fix hook directory to be
2672 /usr/share/apport/package-hooks/, not /u/s/apport/.
2673 * Add doc/package-hooks.txt: Document per-package hooks, ship in package
2674 apport.
2675 * Add debian/apport.dirs: Ship package-hooks/ directory.
2676 * gtk/apport-gtk, qt4/apport-qt: Fix detection of binary data so that the
2677 CoreDump is not displayed as incomprehensible gibberish any more.
2678 * Add qt4/apport-qt.desktop.in and add it to POTFILES.in.
2679 * bin/apport-retrace: --verbose can now be specified multiple times to
2680 increase verbosity and debug package installation. Also, fix some quoting
2681 bugs. Thanks to Kees Cook for this!
2682 * qt4/apport-qt: Fix restart button handling. (LP: #84202)
2683 * qt4/apport-qt: Do not try to call splitlines() on a report value that is a
2684 file reference; just display the reference instead. (LP: #84196)
2685 * bin/apport: Disable for now, since the current kernel produces cropped
2686 core dumps and thus we get totally useless crash reports
2687
2688 -- Martin Pitt <martin.pitt@ubuntu.com> Fri, 9 Feb 2007 18:58:08 +0100
2689
2690apport (0.51) feisty; urgency=low
2691
2692 New feature: Qt4 GUI implementation:
2693
2694 * Added qt4/: Qt4 implementation of the abstract user interface. Thanks to
2695 Michael Hofmann <mh21@piware.de> for that!
2696 * debian/copyright: Add Michael as copyright holder.
2697 * setup.py, debian/control, debian/apport-qt.install: Packaging bits for
2698 apport-qt.
2699 * Move translations from apport-gtk to apport, since they are shared between
2700 frontends. Add appropriate Conflicts/Replaces (we don't strictly need it
2701 here because we strip them anyway, but we need that for the moving icon
2702 anyway).
2703 * Move icon from apport-gtk to apport, since it is/can be shared between
2704 frontends.
2705
2706 Improvements:
2707
2708 * Replaced old apport.png icon stolen from bug-buddy with nice SVG one.
2709 Thanks to Troy Sobotka for this!
2710 * debian/copyright: Add Troy as copyright holder for the icon.
2711 * bin/apport-retrace, man/apport-retrace.1: Document that report can now be
2712 a LP bug number.
2713
2714 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 8 Feb 2007 20:01:12 +0100
2715
2716apport (0.50) feisty; urgency=low
2717
2718 * gtk/apport-gtk.glade: Fix 'prolem' typo.
2719 * bin/apport-retrace: Use python-launchpad-bugs to create a Report object
2720 from a given Launchpad bug number (given as argument instead of the report
2721 file path). Add appropriate p-l-b dependency.
2722 * gtk/apport-gtk: Mark '(binary data)' string as translatable.
2723
2724 -- Martin Pitt <martin.pitt@ubuntu.com> Thu, 8 Feb 2007 15:15:47 +0100
2725
2726apport (0.49) feisty; urgency=low
2727
2728 * gtk/apport-gtk.glade: Fix s/send/sent/ typo. Closes: LP#83061
2729 * apport/ui.py, create_crash_bug_title(): Cope with odd Tracebacks that are
2730 shorter than three lines. Add test case from the bug. Closes: LP#83556
2731 * apport/python_hook: Do not create a report if the binary is ignored. Add
2732 test case. Closes: LP#83566
2733 * gtk/apport-gtk: Do not save/alter crash dialog title any more, it's empty
2734 now.
2735 * apport/ui.py, open_url(): Check the user's session for
2736 ksmserver/gnome-session to decide whether to prefer kfmclient or
2737 gnome-open. Also, only call Firefox directly if gconf's prefered browser
2738 is actually Firefox. Closes: LP#82007
2739
2740 -- Martin Pitt <martin.pitt@ubuntu.com> Tue, 6 Feb 2007 18:33:15 +0100
2741
2742apport (0.48) feisty; urgency=low
2743
2744 New feature: Infrastructure for reporting kernel Oopses:
2745
2746 * Add bin/kernel_hook and ship it in /usr/share/apport. The kernel can call
2747 this on an Oops. Add a test suite for it to test-hooks.
2748 * apport/ui.py: Add support for reporting ProblemType: Kernel reports, and
2749 add test suite for the workflow.
2750 * gtk/apport-gtk{,.glade}: Add implementation for ui_present_kernel_error().