--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/scripts/python/issuelister.py Fri Nov 20 14:12:53 2009 +0000
@@ -0,0 +1,422 @@
+import xml.dom.minidom
+import sys
+
+headers = []
+libraryissues = []
+
+def loadfile(filename):
+ x = xml.dom.minidom.parse(filename)
+ issuelists=x.getElementsByTagName('issuelist')
+
+
+ for issuelist in issuelists:
+ for cn in issuelist.childNodes:
+ if isinstance(cn, xml.dom.minidom.Element):
+ if cn.nodeName == 'library':
+ libraryissues.append(cn)
+ elif cn.nodeName == 'headerfile':
+ headers.append(cn)
+
+
+typeidmap=['removed', '','moved','deleted','inserted','modified','added','modified','modified','modified','modified','modified','removed','N/A','','']
+
+noktypemaphdr={
+ 'NOK': 'This header contains changes that cause incompatibility. It must be fixed.',
+ 'MOK': 'This header contains changes that cannot be verified automatically; they must be investigated manually.'}
+
+ioktypehdr='This issue is known to be ok. But the header contains other unrelated changes.'
+oktypehdr='This header is known to be ok.'
+othertypehdr='This header contains changes that may cause incompatibility. It must be analysed by an expert.'
+
+oktype='This library is known to be ok'
+noktype='This library contains changes that cause incompatibility. It must be fixed.'
+othertype='This library contains changes that may cause incompatibility. It must be analysed by an expert.'
+
+#
+#
+#typeidmap=['removed', '','moved','deleted','inserted','modified','added','modified','modified','modified','modified','modified','removed','N/A','','']
+#
+#oktypemaphdr={'OK': 'This header is known to be ok.',
+# 'NOK': 'This header contains changes that cause incompatibility. It must be fixed.',
+# 'IOK': 'This issue is known to be ok. But the header contains other unrelated changes.',
+# 'MOK': 'This header contains changes that cannot be verified automatically; they must be investigated manually.'}
+#
+#othertypemaphdr='This header contains changes that may cause incompatibility. It must be analysed by an expert.'
+#
+#oktype='This library is known to be ok'
+#noktype='This library contains changes that cause incompatibility. It must be fixed.'
+#othertype='This library contains changes that may cause incompatibility. It must be analysed by an expert.'
+
+
+
+
+def print_errors(library, isok=False):
+
+ if isok:
+ libstatus = oktype
+ bug_severity='NORMAL'
+ bug_status='RESOLVED'
+ resolution='WONTFIX'
+ else:
+ libstatus = othertype
+ bug_severity='MAJOR'
+ bug_status='NEW'
+ resolution=''
+
+ for issue in library['issues']:
+ if issue['status'] == 'NOK':
+ libstatus = noktype
+ bug_severity='CRITICAL'
+ bug_status='NEW'
+ resolution=''
+
+
+ short_desc = 'Compatibility break in library %s' % library['shortname']
+
+ library_info='Library details<br>name: %s<br>shortname: %s<br>comparefilename: %s<br>baseplatform: %s<br>currentplatform: %s' % (library['name'], library['shortname'], library['comparefilename'], library['baseplatform'], library['currentplatform'])
+
+ long_desc = libstatus + '<br>'
+ for issue in library['issues']:
+ if issue['funcpos'] == '':
+ if issue['newfuncpos'] != '':
+ pos = issue['newfuncpos']
+ else:
+ pos = '-'
+ elif issue['newfuncpos'] != '':
+ pos = '%s->%s' % (issue['funcpos'], issue['newfuncpos'])
+ else:
+ pos = issue['funcpos']
+
+ if issue['funcname'] != '':
+ if issue['newfuncname'] != '':
+ funcstring = 'was %s; now %s' % (issue['funcname'], issue['newfuncname'])
+ else:
+ funcstring = issue['funcname']
+ elif issue['newfuncname'] != '':
+ funcstring = issue['newfuncname']
+ else:
+ funcstring = ''
+
+ long_desc = long_desc + '[%s] (%s) %s %s (%s) [BC: %s, SC:%s]<br>%s' % (pos, typeidmap[issue['typeid']-1], issue['typeinfo'], funcstring, issue['comment'], issue['bc_severity'], issue['sc_severity'], library_info)
+
+
+ product=library['shortname']
+ reporter='BC checker'
+ assigned_to=''
+ backlog_url=''
+ deadline=''
+ assigned_to=''
+ version='unspecified'
+ component=''
+ rep_platform='N/A'
+ keywords='Symbian^2, Compatibility_Break'
+
+ print "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" % (product, reporter, assigned_to, bug_severity, backlog_url, short_desc, long_desc, deadline, bug_status, resolution, version, component, rep_platform, keywords)
+
+
+def list_libraryissues():
+ libissues=[]
+ for li in libraryissues:
+
+ try:
+ name=li.getElementsByTagName('name')[0].childNodes[0].wholeText
+ except:
+ name=''
+ try:
+ shortname=li.getElementsByTagName('shortname')[0].childNodes[0].wholeText
+ except:
+ shortname=''
+
+ try:
+ comparefilename=li.getElementsByTagName('comparefilename')[0].childNodes[0].wholeText
+ except:
+ comparefilename=''
+
+ try:
+ baseplatform=li.getElementsByTagName('baseplatform')[0].childNodes[0].wholeText
+ except:
+ baseplatform=''
+
+ try:
+ currentplatform=li.getElementsByTagName('currentplatform')[0].childNodes[0].wholeText
+ except:
+ currentplatform=''
+
+ try:
+ issues=li.getElementsByTagName('issue')
+ issuelist = []
+ for issue in issues:
+ try:
+ typeid=int(issue.getElementsByTagName('typeid')[0].childNodes[0].wholeText)
+ except:
+ typeid=-1
+ try:
+ funcname=issue.getElementsByTagName('funcname')[0].childNodes[0].wholeText
+ except:
+ funcname=''
+ try:
+ newfuncname=issue.getElementsByTagName('newfuncname')[0].childNodes[0].wholeText
+ except:
+ newfuncname=''
+ try:
+ funcpos=issue.getElementsByTagName('funcpos')[0].childNodes[0].wholeText
+ except:
+ funcpos=''
+ try:
+ newfuncpos=issue.getElementsByTagName('newfuncpos')[0].childNodes[0].wholeText
+ except:
+ newfuncpos=''
+ try:
+ bc_severity=issue.getElementsByTagName('bc_severity')[0].childNodes[0].wholeText
+ except:
+ bc_severity=''
+ try:
+ sc_severity=issue.getElementsByTagName('sc_severity')[0].childNodes[0].wholeText
+ except:
+ sc_severity=''
+ try:
+ status=issue.getElementsByTagName('status')[0].childNodes[0].wholeText
+ except:
+ status=''
+ try:
+ typeinfo=issue.getElementsByTagName('typeinfo')[0].childNodes[0].wholeText
+ except:
+ typeinfo=''
+ try:
+ comment=issue.getElementsByTagName('comment')[0].childNodes[0].wholeText
+ except:
+ comment=''
+ anissue={'typeid': typeid, 'funcname':funcname, 'newfuncname':newfuncname, 'funcpos': funcpos, 'newfuncpos': newfuncpos, 'bc_severity': bc_severity, 'sc_severity': sc_severity, 'status': status, 'typeinfo': typeinfo, 'comment': comment}
+ issuelist.append(anissue)
+ except:
+ pass
+
+ libissue = {'name': name, 'shortname': shortname, 'comparefilename': comparefilename, 'baseplatform': baseplatform, 'currentplatform': currentplatform, 'issues': issuelist}
+ libissues.append(libissue)
+
+ summ = 0
+ libsok = []
+ libsnotok = []
+
+ for libiss in libissues:
+ nokcount = 0
+ mokcount = 0
+ okcount = 0
+ othercount = 0
+
+ for iss in libiss['issues']:
+
+ if iss['status'] == 'NOK':
+ nokcount=nokcount+1
+ elif iss['status'] == 'MOK':
+ mokcount=mokcount+1
+ elif iss['status'] == 'OK':
+ okcount=okcount+1
+ elif iss['status'] == '' and iss['typeid'] != 7 and iss['typeid'] != 2:
+ othercount = othercount+1
+
+ if nokcount == 0 and mokcount == 0 and okcount > 0 and othercount == 0:
+ libsok.append(libiss)
+ elif nokcount > 0 or othercount > 0:
+ libsnotok.append(libiss)
+
+ for l in libsnotok:
+ print_errors(l)
+
+ for l in libsok:
+ print_errors(l, True)
+
+def print_header_errors(header):
+
+ if header['status']=='OK':
+ headerstatus = oktypehdr
+ bug_severity='NORMAL'
+ bug_status='RESOLVED'
+ resolution='WONTFIX'
+ elif header['status']=='IOK':
+ headerstatus = ioktypehdr
+ bug_severity='NORMAL'
+ bug_status='RESOLVED'
+ resolution='WONTFIX'
+ elif header['status'] != '':
+ headerstatus = noktypemaphdr[header['status']]
+ bug_severity='CRITICAL'
+ bug_status='NEW'
+ resolution=''
+ else:
+ headerstatus = othertypehdr
+ bug_severity='MAJOR'
+ bug_status='NEW'
+ resolution=''
+
+ short_desc = 'Compatibility break in header %s' % (header['shortname'])
+
+
+ headerinfo='Header details<br>filename: %s<br>shortname: %s<br>comparefilename: %s' % (header['filename'], header['shortname'], header['comparefilename'])
+
+
+ if header['status'] == 'OK':
+ long_desc = headerstatus + ' Comment: ' + header['comment'] + '<br>'
+ else:
+ long_desc = headerstatus + ' '
+
+ for issue in header['issues']:
+ long_desc = long_desc + '%s %s %s [BC: %s, SC:%s]<br>%s' % (issue['identitydescription'], issue['typestring'], issue['cause'], issue['bc_severity'], issue['sc_severity'], headerinfo)
+
+
+ product=header['shortname']
+ reporter='BC checker'
+ assigned_to=''
+ backlog_url=''
+ deadline=''
+ assigned_to=''
+ version='unspecified'
+ component=''
+ rep_platform='N/A'
+ keywords='Symbian^2, Compatibility_Break'
+
+
+ print "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" % (product, reporter, assigned_to, bug_severity, backlog_url, short_desc, long_desc, deadline, bug_status, resolution, version, component, rep_platform, keywords)
+
+
+def list_headerissues():
+ headerissues=[]
+ for hi in headers:
+
+ try:
+ filename=hi.getElementsByTagName('filename')[0].childNodes[0].wholeText
+ except:
+ filename=''
+
+ try:
+ shortname=hi.getElementsByTagName('shortname')[0].childNodes[0].wholeText
+ except:
+ shortname=''
+
+ try:
+ comparefilename=hi.getElementsByTagName('comparefilename')[0].childNodes[0].wholeText
+ except:
+ comparefilename=''
+
+ try:
+ status=hi.getElementsByTagName('status')[0].childNodes[0].wholeText
+ except:
+ status=''
+
+ try:
+ comment=hi.getElementsByTagName('comment')[0].childNodes[0].wholeText
+ except:
+ comment=''
+
+ try:
+ checksum=hi.getElementsByTagName('checksum')[0].childNodes[0].wholeText
+ except:
+ checksum=''
+
+ try:
+ issues=hi.getElementsByTagName('issue')
+ issuelist = []
+ for issue in issues:
+ try:
+ issueid=int(issue.getElementsByTagName('issueid')[0].childNodes[0].wholeText)
+ except:
+ issueid=-1
+
+ try:
+ typeid=int(issue.getElementsByTagName('typeid')[0].childNodes[0].wholeText)
+ except:
+ typeid=-1
+ try:
+ identityid=issue.getElementsByTagName('identityid')[0].childNodes[0].wholeText
+ except:
+ identityid=''
+ try:
+ identitydescription=issue.getElementsByTagName('identitydescription')[0].childNodes[0].wholeText
+ except:
+ identitydescription=''
+
+ try:
+ typestring=issue.getElementsByTagName('typestring')[0].childNodes[0].wholeText
+ except:
+ typestring=''
+
+ try:
+ cause=issue.getElementsByTagName('cause')[0].childNodes[0].wholeText
+ except:
+ cause=''
+
+ try:
+ ignoreinformation=issue.getElementsByTagName('ignoreinformation')[0].childNodes[0].wholeText
+ except:
+ ignoreinformation=''
+
+ try:
+ documentation=issue.getElementsByTagName('documentation')[0].childNodes[0].wholeText
+ except:
+ documentation=''
+
+ try:
+ linenumber=issue.getElementsByTagName('linenumber')[0].childNodes[0].wholeText
+ except:
+ linenumber=''
+
+ try:
+ sc_severity=issue.getElementsByTagName('scseverity')[0]
+
+ try:
+ typeid=sc_severity.getElementsByTagName('typeid')[0].childNodes[0].wholeText
+ except:
+ typeid=''
+
+
+ try:
+ sctypestring=sc_severity.getElementsByTagName('typestring')[0].childNodes[0].wholeText
+ except:
+ sctypestring=''
+
+ sc_severity=sctypestring
+ except:
+ sc_severity=''
+
+ try:
+ bc_severity=issue.getElementsByTagName('severity')[0]
+
+ try:
+ typeid=bc_severity.getElementsByTagName('typeid')[0].childNodes[0].wholeText
+ except:
+ typeid=''
+
+
+ try:
+ bctypestring=bc_severity.getElementsByTagName('typestring')[0].childNodes[0].wholeText
+ except:
+ bctypestring=''
+
+ bc_severity=bctypestring
+ except:
+ bc_severity=''
+
+ anissue={'issueid': issueid, 'typeid': typeid, 'identityid': identityid, 'identitydescription': identitydescription, 'typestring': typestring, 'cause': cause, 'ignoreinformation': ignoreinformation, 'documentation': documentation, 'linenumber': linenumber, 'bc_severity': bc_severity, 'sc_severity': sc_severity}
+ issuelist.append(anissue)
+ except:
+ print 'except!'
+
+ headerissue = {'filename': filename, 'shortname': shortname, 'comparefilename': comparefilename, 'status': status, 'comment': comment, 'checksum': checksum, 'issues': issuelist}
+ headerissues.append(headerissue)
+
+ for l in headerissues:
+ print_header_errors(l)
+
+
+if len(sys.argv) < 2:
+ print 'usage: python issuelist.py <reportfile1.xml> [reportfile2.xml]'
+elif len(sys.argv) >= 2:
+ loadfile(sys.argv[1])
+ if len(sys.argv) > 2:
+ loadfile(sys.argv[2])
+
+ print "%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s" % ('product', 'reporter', 'assigned_to', 'bug_severity', 'backlog_url', 'short_desc', 'long_desc', 'deadline', 'bug_status', 'resolution', 'version', 'component', 'rep_platform','keywords')
+
+ list_headerissues()
+ list_libraryissues()
+