From fe6fa074db94fa52a907e8fb2c8414e4c165f11f Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Tue, 30 Sep 2008 16:37:50 +0000 Subject: [PATCH] Add "SelectionParameter" class to represent drop-down boxes. Added "Classification" field to Radar filing. Modified FileRadar.scpt to take the classification as an argument. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@56854 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/scan-view/Reporter.py | 40 +++++++++++++++-------- tools/scan-view/Resources/FileRadar.scpt | Bin 16540 -> 18422 bytes 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/tools/scan-view/Reporter.py b/tools/scan-view/Reporter.py index ba7b733be2..2f05fdfd83 100644 --- a/tools/scan-view/Reporter.py +++ b/tools/scan-view/Reporter.py @@ -37,24 +37,34 @@ from email.mime.text import MIMEText class ReporterParameter: def __init__(self, n): self.name = n - def getName(self): return self.name - + def getValue(self,r,bugtype,getConfigOption): + return getConfigOption(r.getName(),self.getName()) def saveConfigValue(self): return True class TextParameter (ReporterParameter): - def getValue(self,r,bugtype,getConfigOption): - return getConfigOption(r.getName(),self.getName()) - def getHTML(self,r,bugtype,getConfigOption): return """\ - %s: - +%s: + """%(self.getName(),r.getName(),self.getName(),self.getValue(r,bugtype,getConfigOption)) +class SelectionParameter (ReporterParameter): + def __init__(self, n, values): + ReporterParameter.__init__(self,n) + self.values = values + + def getHTML(self,r,bugtype,getConfigOption): + return """\ + +%s:"""%(self.getName(),r.getName(),self.getName(),'\n'.join(["""\ +"""%(o[0],o[1]) for o in self.values])) + #===------------------------------------------------------------------------===# # Reporters #===------------------------------------------------------------------------===# @@ -156,11 +166,16 @@ class RadarReporter: return 'Radar' def getParameters(self): - return map(lambda x:TextParameter(x),['Component', 'Component Version']) + return [ TextParameter('Component'), TextParameter('Component Version'), + SelectionParameter('Classification', + [ ['1', 'Security'], ['2', 'Crash/Hang/Data Loss'], + ['3', 'Performance'], ['4', 'UI/Usability'], + ['6', 'Serious Bug'], ['7', 'Other'] ]) ] def fileReport(self, report, parameters): component = parameters.get('Component', '') componentVersion = parameters.get('Component Version', '') + classification = parameters.get('Classification', '') personID = "" diagnosis = "" config = "" @@ -171,13 +186,12 @@ class RadarReporter: componentVersion = 'X' script = os.path.join(os.path.dirname(__file__),'Resources/FileRadar.scpt') - args = ['osascript', script, component, componentVersion, personID, report.title, + args = ['osascript', script, component, componentVersion, classification, personID, report.title, report.description, diagnosis, config] + map(os.path.abspath, report.files) # print >>sys.stderr, args - try: - p = subprocess.Popen(args, - stdout=subprocess.PIPE, stderr=subprocess.PIPE) - except: + try: + p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + except: raise ReportFailure("Unable to file radar (AppleScript failure).") data, err = p.communicate() res = p.wait() diff --git a/tools/scan-view/Resources/FileRadar.scpt b/tools/scan-view/Resources/FileRadar.scpt index 884b1da34888fd1f7e940d48d6089d87ca361785..7009ab9b761f5e7853e91c8a49c746021f7c834a 100644 GIT binary patch literal 18422 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
y>81ODda@O$mwu2&Lk2>xA-{oJ86I3y+b2j>$n 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