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