Skip to content

Commit

Permalink
Merge branch 'startcb' of git://github.com/jstultz/buildbot
Browse files Browse the repository at this point in the history
  • Loading branch information
djmitche committed Sep 7, 2012
2 parents 20e005a + 3f74746 commit 8d2932c
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 10 deletions.
31 changes: 21 additions & 10 deletions master/buildbot/status/status_gerrit.py
Expand Up @@ -37,15 +37,19 @@ def defaultReviewCB(builderName, build, result, status, arg):
class GerritStatusPush(StatusReceiverMultiService):
"""Event streamer to a gerrit ssh server."""

def __init__(self, server, username, reviewCB=defaultReviewCB, port=29418, reviewArg=None,
**kwargs):
def __init__(self, server, username, reviewCB=defaultReviewCB,
startCB=None, port=29418, reviewArg=None,
startArg=None, **kwargs):
"""
@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 startCB: Callback that is called each time a build is started.
Used to define the message sent to Gerrit.
@param port: Gerrit SSH server's port.
@param reviewArg: Optional argument that is passed to the callback.
@param reviewArg: Optional argument passed to the review callback.
@param startArg: Optional argument passed to the start callback.
"""
StatusReceiverMultiService.__init__(self)
# Parameters.
Expand All @@ -54,6 +58,8 @@ def __init__(self, server, username, reviewCB=defaultReviewCB, port=29418, revie
self.gerrit_port = port
self.reviewCB = reviewCB
self.reviewArg = reviewArg
self.startCB = startCB
self.startArg = startArg

class LocalPP(ProcessProtocol):
def __init__(self, status):
Expand All @@ -80,18 +86,26 @@ def startService(self):
def builderAdded(self, name, builder):
return self # subscribe to this builder

def buildStarted(self, builderName, build):
if self.startCB is not None:
message = self.startCB(builderName, build, self.startArg)
self.sendCodeReviews(build, message)

def buildFinished(self, builderName, build, result):
"""Do the SSH gerrit verify command to the server."""
message, verified, reviewed = self.reviewCB(builderName, build, result, self.reviewArg)
self.sendCodeReviews(build, message, verified, reviewed)

def sendCodeReviews(self, build, message, verified=0, reviewed=0):
if message is None:
return

# Gerrit + Repo
downloads = build.getProperty("repo_downloads")
downloaded = build.getProperty("repo_downloaded")
if downloads is not None and downloaded is not None:
if downloads is not None and downloaded is not None:
downloaded = downloaded.split(" ")
if downloads and 2 * len(downloads) == len(downloaded):
message, verified, reviewed = self.reviewCB(builderName, build, result, self.status, self.reviewArg)
if message is None:
return
for i in range(0, len(downloads)):
try:
project, change1 = downloads[i].split(" ")
Expand All @@ -110,9 +124,6 @@ def buildFinished(self, builderName, build, result):
project = build.getProperty("project")
revision = build.getProperty("got_revision")
if project is not None and revision is not None:
message, verified, reviewed = self.reviewCB(builderName, build, result, self.status, self.reviewArg)
if message is None:
return
self.sendCodeReview(project, revision, message, verified, reviewed)
return

Expand Down
4 changes: 4 additions & 0 deletions master/docs/release-notes.rst
Expand Up @@ -31,6 +31,10 @@ Changes for Developers

* Added an optional build start callback to ``buildbot.status.status_gerrit.GerritStatusPush``

* An optional ``startCB`` callback to :bb:status:`GerritStatusPush` can be used
to send a message back to the committer.
See the linked documentation for details.

Slave
-----

Expand Down

0 comments on commit 8d2932c

Please sign in to comment.