Skip to content

Commit

Permalink
Add optional arg parameter that will be passed to the callback.
Browse files Browse the repository at this point in the history
While there, make sure that parameters of correct type are passed
to ssh command.
  • Loading branch information
PiotrSikora committed Dec 15, 2010
1 parent 3b7a8d3 commit 84b45f0
Showing 1 changed file with 28 additions and 24 deletions.
52 changes: 28 additions & 24 deletions master/buildbot/status/status_gerrit.py
Expand Up @@ -21,34 +21,38 @@
import os

from buildbot.status.base import StatusReceiverMultiService
from buildbot.status.builder import Results
from twisted.internet import reactor
from twisted.internet.protocol import ProcessProtocol

def defaultMessageCB(buildername, build, results):
message = "buildbot finished compiling your patchset\n"
message += "on configuration %s "%(buildername)
message += "the result is %s\n"%(results)
message += "more details: http://%s:8010/builders/%s/builds/%d\n"%(os.uname()[1],buildername,build.getNumber())
return message,0,0
def defaultReviewCB(builderName, build, result, arg):
message = "Buildbot finished compiling your patchset\n"
message += "on configuration: %s\n" % builderName
message += "The result is: %s\n" % Results[result].upper()

# message, verified, reviewed
return message, (result == 0 or -1), 0

class GerritStatusPush(StatusReceiverMultiService):
"""Event streamer to a gerrit ssh server."""

def __init__(self, server, username, messageCB=defaultMessageCB, port=29418,
def __init__(self, server, username, reviewCB=defaultReviewCB, port=29418, reviewArg=None,
**kwargs):
"""
@server: server address to be used to push events notifications.
@username: ssh userid to use to connect to server.
@messageCB: callable that is called each time a build is finished, and that is used to define the message,
and note depending on the build results
@port: ssh port to use to connect to server.
@param server: Gerrit SSH server's address to use for push event notifications.
@param username: Gerrit SSH server's username.
@param reviewCB: Callback that is called each time a build is finished, and that is used
to define the message and review approvals depending on the build result.
@param port: Gerrit SSH server's port.
@param reviewArg: Optional argument that is passed to the callback.
"""
StatusReceiverMultiService.__init__(self)
# Parameters.
self.gerritserver = server
self.username = username
self.messageCB = messageCB
self.gerritport = port
self.gerrit_server = server
self.gerrit_username = username
self.gerrit_port = port
self.reviewCB = reviewCB
self.reviewArg = reviewArg

class LocalPP(ProcessProtocol):
def __init__(self, status):
Expand All @@ -75,7 +79,7 @@ def setServiceParent(self, parent):
def builderAdded(self, name, builder):
return self # subscribe to this builder

def buildFinished(self, builderName, build, results):
def buildFinished(self, builderName, build, result):
"""Do the SSH gerrit verify command to the server."""
repo, git = False, False

Expand All @@ -89,7 +93,7 @@ def buildFinished(self, builderName, build, results):

if repo:
if downloads and 2 * len(downloads) == len(downloaded):
message, verified, reviewed = self.messageCB(builderName, build, results)
message, verified, reviewed = self.reviewCB(builderName, build, result, self.reviewArg)
for i in range(0, len(downloads)):
try:
project, change1 = downloads[i].split(" ")
Expand All @@ -98,7 +102,7 @@ def buildFinished(self, builderName, build, results):
change2 = downloaded[2 * i]
revision = downloaded[2 * i + 1]
if change1 == change2:
self.sendCodeReview(str(project), revision, message, verified, reviewed)
self.sendCodeReview(project, revision, message, verified, reviewed)
else:
return # something is wrong, abort
return
Expand All @@ -113,19 +117,19 @@ def buildFinished(self, builderName, build, results):
pass

if git:
message, verified, reviewed = self.messageCB(builderName, build, results)
message, verified, reviewed = self.reviewCB(builderName, build, result, self.reviewArg)
self.sendCodeReview(project, revision, message, verified, reviewed)
return

def sendCodeReview(self, project, revision, message=None, verified=0, reviewed=0):
command = ["ssh", self.username + "@" + self.gerritserver, "-p", str(self.gerritport),
"gerrit", "review", "--project", project]
command = ["ssh", self.gerrit_username + "@" + self.gerrit_server, "-p %d" % self.gerrit_port,
"gerrit", "review", "--project %s" % str(project)]
if message:
command.append("--message '%s'" % message)
if verified:
command.extend(["--verified", str(verified)])
command.extend(["--verified %d" % int(verified)])
if reviewed:
command.extend(["--code-review", str(reviewed)])
command.extend(["--code-review %d" % int(reviewed)])
command.append(str(revision))
print command
reactor.spawnProcess(self.LocalPP(self), "ssh", command)
Expand Down

0 comments on commit 84b45f0

Please sign in to comment.