diff options
author | Holger Freyther <zecke@selfish.org> | 2007-03-07 00:42:41 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2007-03-07 00:42:41 +0000 |
commit | deacf77e13e6f1f450d1f9e91a466c387c8494f0 (patch) | |
tree | e8974215a60ae89d5f52cd4bed8254422ad3c466 /classes | |
parent | b7d3b2793c6142f295862593a1c9c3544139a79f (diff) |
classes/seppuku.bbclass: Make it almost work
This class can find the broken bug, reopen it, or leave it open.
There is some issue with sending the logfile to the server, the
url itself is correct, when opened in a browser the right thing
happens but not from within python *sigh* need a working tcpdump
to look into this (which means I will continue tomorrow)
Diffstat (limited to 'classes')
-rw-r--r-- | classes/seppuku.bbclass | 59 |
1 files changed, 38 insertions, 21 deletions
diff --git a/classes/seppuku.bbclass b/classes/seppuku.bbclass index 9fdcbbd236..5757df7efb 100644 --- a/classes/seppuku.bbclass +++ b/classes/seppuku.bbclass @@ -15,7 +15,7 @@ def seppuku_login(opener, login, user, password): @param opened = cookie enabled urllib2 opener @param login = http://bugzilla.openmoko.org/cgi-bin/bugzilla/query.cgi? @param user = Your username - @param pass = Your password + @param password = Your password """ import urllib param = urllib.urlencode( {"GoAheadAndLogIn" : 1, "Bugzilla_login" : user, "Bugzilla_password" : password } ) @@ -52,19 +52,16 @@ def seppuku_find_bug_report_old(): def handle_starttag(self, tag, attr): if self.state == self.STATE_NONE and tag.lower() == "tr": if len(attr) == 1 and attr[0] == ('class', 'bz_normal bz_P2 '): - print "Found tr %s %s" % (tag, attr) self.state = self.STATE_FOUND_TR elif self.state == self.STATE_FOUND_TR and tag.lower() == "td": self.state += 1 def handle_endtag(self, tag): if tag.lower() == "tr": - print "Going back" if self.state != self.STATE_NONE: self.bugs.append( (self.bug,self.status) ) self.state = self.STATE_NONE if self.state > 1 and tag.lower() == "td": - print "Next TD" self.state += 1 def handle_data(self,data): @@ -110,7 +107,7 @@ def seppuku_find_bug_report(opener, query, product, component, bugname): return (False,None) else: # silently pick the first result (number,status) = scanner.result()[0] - return (status != "CLOSED",number) + return (not status in ["CLOS", "RESO", "VERI"],number) def seppuku_reopen_bug(opener, file, product, component, bug_number, bugname, text): """ @@ -121,13 +118,19 @@ def seppuku_reopen_bug(opener, file, product, component, bug_number, bugname, te http://bugzilla.openmoko.org/cgi-bin/bugzilla/process_bug.cgi?id=239&bug_file_loc=http%3A%2F%2F&version=2007&longdesclength=2&product=OpenMoko&component=autobuilds&comment=bla&priority=P2&bug_severity=normal&op_sys=Linux&rep_platform=Neo1973&knob=reopen&target_milestone=Phase+0&short_desc=foo """ - import urllib + import urllib, urllib2 param = urllib.urlencode( { "product" : product, "component" : component, "longdesclength" : 2, - "short_desc" : bugname, "comment" : text, "knob" : "reopen", "id" : bug_number } ) - result = opener.open( file + param ) + "short_desc" : bugname, "knob" : "reopen", "id" : bug_number, "comment" : text } ) + try: + result = opener.open( file + param ) + except urllib2.HTTPError, e: + print e.geturl() + print e.info() + return False + if result.code != 200: return False - else + else: return True def seppuku_file_bug(opener, file, product, component, bugname, text): @@ -147,9 +150,16 @@ def seppuku_file_bug(opener, file, product, component, bugname, text): @param text Text """ - import urllib + import urllib,urllib2 param = urllib.urlencode( { "product" : product, "component" : component, "short_desc" : bugname, "comment" : text } ) - result = opener.open( file + param ) + try: + result = opener.open( file + param ) + except urllib2.HTTPError, e: + print e.geturl() + print e.info() + raise e + return False + if result.code != 200: return False else: @@ -157,8 +167,8 @@ def seppuku_file_bug(opener, file, product, component, bugname, text): -addhandler seppuku_do_report -python seppuku_do_report() { +addhandler seppuku_eventhandler +python seppuku_eventhandler() { """ Report task failures to the bugzilla and succeeded builds to the box @@ -167,6 +177,8 @@ python seppuku_do_report() { from bb import data, mkdirhier, build import bb, os, glob + bb.note( "Ran" ) + try: import urllib2, cookielib except: @@ -177,7 +189,7 @@ python seppuku_do_report() { data = e.data name = getName(event) if name == "PkgFailed": - if not data.getVar('SEPPUKU_AUTOBUILD', data, True) == "0": + if not bb.data.getVar('SEPPUKU_AUTOBUILD', data, True) == "0": build.exec_task('do_clean', data) elif name == "TaskFailed" or name == "NoProvider": cj = cookielib.CookieJar() @@ -187,40 +199,45 @@ python seppuku_do_report() { newbug = bb.data.getVar("SEPPUKU_NEWREPORT", data, True) reopen = bb.data.getVar("SEPPUKU_ADDCOMMENT", data, True) user = bb.data.getVar("SEPPUKU_USER", data, True) - pass = bb.data.getVar("SEPPUKU_PASS", data, True) + passw = bb.data.getVar("SEPPUKU_PASS", data, True) product = bb.data.getVar("SEPPUKU_PRODUCT", data, True) component = bb.data.getVar("SEPPUKU_COMPONENT", data, True) - if not seppuku_login(opener, login, user, pass): + if not seppuku_login(opener, login, user, passw): bb.note("Login to bugzilla failed") return NotHandled + else: + print "Logged into the box" if name == "TaskFailed": bugname = "%(package)s-%(pv)s-%(pr)s-%(task)s" % { "package" : bb.data.getVar("PN", data, True), "pv" : bb.data.getVar("PV", data, True), "pr" : bb.data.getVar("PR", data, True), "task" : e.task } - log_file = glob.glob("%s/log.%s.*" % (data.getVar('T', event.data, True), event.task)) + log_file = glob.glob("%s/log.%s.*" % (bb.data.getVar('T', event.data, True), event.task)) if len(log_file) != 0: - to_file = data.getVar('TINDER_LOG', event.data, True) + to_file = bb.data.getVar('TINDER_LOG', event.data, True) text = "".join(open(log_file[0], 'r').readlines()) elif name == "NoProvider": bugname = "noprovider for %s runtime: %s" % (event.getItem, event.getisRuntime) text = "Please fix it" - else + else: assert False (bug_open, bug_number) = seppuku_find_bug_report(opener, query, product, component, bugname) + bb.note("Bug is open: %s and bug number: %s" % (bug_open, bug_number)) + # The bug is present and still open, no need to attach an error log if bug_number and bug_open: - bb.note("The bug is known as '%s'" % bug_number" + bb.note("The bug is known as '%s'" % bug_number) return NotHandled if bug_number and not bug_open: if not seppuku_reopen_bug(opener, reopen, product, component, bug_number, bugname, text): bb.note("Failed to reopen the bug report") - else seppuku_file_bug(opener, newbug, product, component, bugname, text): + elif not seppuku_file_bug(opener, newbug, product, component, bugname, text): bb.note("Filing a bugreport failed") return NotHandled +} |