[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: show-bugs script: show release-critical bugs on installed packages



On Wed, Aug 13, 2003 at 12:39:13AM -0700, Blars Blarson wrote:

> Since the three-line show-bugs script that Colin Watson posted to one
> of the Debian mailing lists no longer works, I re-wrote it in perl.
> 
> The attached script will display the release-critical bugs in all
> packages you have installed.

Here is a similar program which uses popularity-contest data instead of the
status file, in an attempt to filter the bugs to packages you actually use,
and sort them by approximate frequency of use.  I run it like this:

popbugs | w3m -T text/html

A similar idea could be applied to the summarized popcon data, in order to
prioritize RC bugs by package popularity.

Tools like this could be much more flexible and robust if this data were
available in a more parser-friendly format, if anyone feels like extending
the tools.

-- 
 - mdz
#!/usr/bin/python

#
#      popbugs - Find RC bugs in packages you commonly use
#      Matt Zimmerman <mdz@debian.org> 2001
#

import sys
import re
import urllib2

popconfile = '/var/log/popularity-contest'
bugurl = 'http://bugs.debian.org/release-critical/other/all.html'


if len(sys.argv) > 1:
    popconfile = sys.argv[1]

class Package:
    def __init__(self, name, atime):
        self.name = name
        self.atime = atime

packages = {}
pkglist = []
popcon = open(popconfile,'r')
for line in popcon.readlines():
    if len(line) == 0 or line.find(':') != -1:
        continue

    fields = line.split()
    if len(fields) != 4:
        continue
    if (fields[0] == 'POPULARITY-CONTEST-0' or
        fields[0] == 'END-POPULARITY-CONTEST-0'):
        continue
    
    (atime, ctime, package, pathname) = fields
#    if pathname == '<NOFILES>' or pathname == '<RECENT-CTIME>':
#        continue

    
    packages[package] = Package(package,atime)
    pkglist.append(packages[package])
    
popcon.close()

page = urllib2.urlopen(bugurl).readlines()

while page:
    line = page.pop(0)
    sys.stdout.write(line)
    if line.startswith('<pre>'):
        break

packagere = re.compile('^<a name="([^"]+)"><strong>Package:.*')
while page:
    m = packagere.match(page[0])
    if m:
        html = ''
        while page:
            line = page.pop(0)
            html += line
            if line == '\n' or line == '</font>\n':
                break

        pkgname = m.group(1)

        if pkgname in packages:
            packages[pkgname].html = html
    else:
        if page[0].startswith('</pre>'):
            break
        page.pop(0)

pkglist.sort(lambda a,b: -cmp(a.atime,b.atime))
for package in pkglist:
    if hasattr(package,'html'):
        sys.stdout.write(package.html)
        sys.stdout.write('\n')

sys.stdout.writelines(page)

Attachment: pgp1ZHJG6ubA9.pgp
Description: PGP signature


Reply to: