Hi all,

On Mon, Apr 25, 2011 at 02:07, Kevin Ryde <use...@zip.com.au> wrote:
> Sandro Tosi <mo...@debian.org> writes:
>>
>> First of all, can you still replicate it?
>
> Yes, reportbug on fvwm as in my 623286, with umm, today's python2.6 and
> python-apt, but may be behind on other packages.

Kevin, since you're able to replicate this bug, can you please run the
attached script like this:

$ python bts616455.py fvwm

(or for whatever package you can replicate it) and attach the full output here?

Thanks,
-- 
Sandro Tosi (aka morph, morpheus, matrixhasu)
My website: http://matrixhasu.altervista.org/
Me at Debian: http://wiki.debian.org/SandroTosi
import re
import sys
from reportbug.utils import get_dpkg_database

def _debug(regex, text, prefix):
    m = regex.search(text)
    if m:
        print prefix, m.groups()
    else:
        print prefix, m

packages = [((sys.argv[1],), sys.argv[1])]

packinfo = get_dpkg_database()
pkgname = r'(?:[\S]+(?:$|,\s+))'

groupfor = {}
searchpkgs = []
searchbits = []
for (group, package) in packages:
    groupfor[package] = group
    escpkg = re.escape(package)
    searchpkgs.append(escpkg)

searchbits = [
    # Package regular expression
    r'^(?P<hdr>Package):\s+('+'|'.join(searchpkgs)+')$',
    # Provides regular expression
    r'^(?P<hdr>Provides):\s+'+pkgname+r'*(?P<pkg>'+'|'.join(searchpkgs)+
    r')(?:$|,\s+)'+pkgname+'*$'
    ]

groups = groupfor.values()
found = {}

searchobs = [re.compile(x, re.MULTILINE) for x in searchbits]
packob = re.compile('^Package: (?P<pkg>.*)$', re.MULTILINE)
statob = re.compile('^Status: (?P<stat>.*)$', re.MULTILINE)
versob = re.compile('^Version: (?P<vers>.*)$', re.MULTILINE)
descob = re.compile('^Description: (?P<desc>.*)$', re.MULTILINE)

ret = []
for p in packinfo:
    for ob in searchobs:
        m = ob.search(p)
        if m:
            print "\nfound paragraph:\n%s\n" % p
            try:
                _debug(packob, p, 'packop:')
                pack = packob.search(p).group('pkg')
                _debug(statob, p, 'statob:')
                stat = statob.search(p).group('stat')
                sinfo = stat.split()
                print 'sinfo:', sinfo
                stat = sinfo[0][0] + sinfo[2][0]
                print 'stat:', stat
                # check if the package is installed, and in that case, retrieve
                # its information; if the first char is not 'i' (installed),
                # then skip data retrieval
                if stat[0] != 'i':
                    continue

                if m.group('hdr') == 'Provides':
                    provides = m.group('pkg')
                else:
                    provides = None
                print 'provides:', provides

                _debug(versob, p, 'versob:')
                vers = versob.search(p).group('vers')
                _debug(descob, p, 'descob:')
                desc = descob.search(p).group('desc')

                info = (pack,stat,vers,desc,provides)
                ret.append(info)
                print 'ret1:', ret
                group = groupfor.get(pack)
                print 'group:', group
                if group:
                    for item in group:
                        found[item] = True
                if provides not in found:
                    found[provides] = True
                print 'found:', found
            except:
                pass

#if skip_notfound:
#    print ret

print "ret pre  group:", ret

for group in groups:
    notfound = [x for x in group if x not in found]
    if len(notfound) == len(group):
        if group not in found:
            ret.append( (' | '.join(group), 'pn', '<none>',
                         '(no description available)', None) )

print "ret post group:", ret

Reply via email to