Skip to content

Commit

Permalink
gerritchangesource: factorize to allow subclassing
Browse files Browse the repository at this point in the history
its not possible to customize what to do on gerrit events
We refactor a bit the code, in order to call different method of
the class for each event type.

Old behaviour is still working

Signed-off-by: Pierre Tardy <pierre.tardy@intel.com>
  • Loading branch information
Pierre Tardy authored and djmitche committed Jul 8, 2011
1 parent 57d5ee1 commit ecef1b0
Showing 1 changed file with 51 additions and 49 deletions.
100 changes: 51 additions & 49 deletions master/buildbot/changes/gerritchangesource.py
Expand Up @@ -95,57 +95,59 @@ def lineReceived(self, line):
log.msg("bad json line: %s" % (line,))
return defer.succeed(None)

if type(event) == type({}) and "type" in event and event["type"] in ["patchset-created", "ref-updated"]:
# flatten the event dictionary, for easy access with WithProperties
def flatten(event, base, d):
for k, v in d.items():
if type(v) == dict:
flatten(event, base + "." + k, v)
else: # already there
event[base + "." + k] = v

properties = {}
flatten(properties, "event", event)

if event["type"] == "patchset-created":
change = event["change"]

chdict = dict(
author="%s <%s>" % (change["owner"]["name"], change["owner"]["email"]),
project=change["project"],
branch=change["branch"]+"/"+change["number"],
revision=event["patchSet"]["revision"],
revlink=change["url"],
comments=change["subject"],
files=["unknown"],
category=event["type"],
properties=properties)
elif event["type"] == "ref-updated":
ref = event["refUpdate"]
author = "gerrit"

if "submitter" in event:
author="%s <%s>" % (event["submitter"]["name"], event["submitter"]["email"])

chdict = dict(
author=author,
project=ref["project"],
branch=ref["refName"],
revision=ref["newRev"],
comments="Gerrit: patchset(s) merged.",
files=["unknown"],
category=event["type"],
properties=properties)
else:
return defer.succeed(None) # this shouldn't happen anyway

d = self.master.addChange(**chdict)
# eat failures..
d.addErrback(log.err, 'error adding change from GerritChangeSource')
return d
else:
if not(type(event) == type({}) and "type" in event):
log.msg("no type in event %s" % (line,))
return defer.succeed(None)
func = getattr(self, "eventReceived_"+event["type"].replace("-","_"), None)
if func == None:
log.msg("unsupported event %s" % (event["type"],))
return defer.succeed(None)

# flatten the event dictionary, for easy access with WithProperties
def flatten(event, base, d):
for k, v in d.items():
if type(v) == dict:
flatten(event, base + "." + k, v)
else: # already there
event[base + "." + k] = v

properties = {}
flatten(properties, "event", event)
return func(properties,event)
def addChange(self, chdict):
d = self.master.addChange(**chdict)
# eat failures..
d.addErrback(log.err, 'error adding change from GerritChangeSource')
return d
def eventReceived_patchset_created(self, properties, event):
change = event["change"]
return self.addChange(dict(
author="%s <%s>" % (change["owner"]["name"], change["owner"]["email"]),
project=change["project"],
branch=change["branch"]+"/"+change["number"],
revision=event["patchSet"]["revision"],
revlink=change["url"],
comments=change["subject"],
files=["unknown"],
category=event["type"],
properties=properties))
def eventReceived_ref_updated(self, properties, event):
ref = event["refUpdate"]
author = "gerrit"

if "submitter" in event:
author="%s <%s>" % (event["submitter"]["name"], event["submitter"]["email"])

return self.addChange(dict(
author=author,
project=ref["project"],
branch=ref["refName"],
revision=ref["newRev"],
comments="Gerrit: patchset(s) merged.",
files=["unknown"],
category=event["type"],
properties=properties))

def streamProcessStopped(self):
self.process = None

Expand Down

0 comments on commit ecef1b0

Please sign in to comment.