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

Proposed by Michael Vogt
Status: Merged
Merge reported by: Martin Pitt
Merged at revision: not available
Proposed branch: lp:~mvo/apport/kernel-crashdump
Merge into: lp:~apport-hackers/apport/trunk
Diff against target: None lines
To merge this branch: bzr merge lp:~mvo/apport/kernel-crashdump
Reviewer Review Type Date Requested Status
Apport upstream developers Pending
Review via email: mp+8448@code.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

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

Subscribers

People subscribed via source and target branches