# # # add_file "contrib/monotone-buildbot-notification.lua" # content [fc1f181e41247fd8e7244024cf5862ce85eea03b] # ============================================================ --- contrib/monotone-buildbot-notification.lua fc1f181e41247fd8e7244024cf5862ce85eea03b +++ contrib/monotone-buildbot-notification.lua fc1f181e41247fd8e7244024cf5862ce85eea03b @@ -0,0 +1,61 @@ +-- The following hook informs the buildbot about a new revision received +-- via netsync. This is done via the `buildbot sendchange` command here and +-- with the PBChangeSource on the buildbot server side. +-- +-- +-- Version history: +-- ---------------- +-- +-- 0.1 (2007-07-10) Markus Schiltknecht +-- - initial version +-- +-- License: GPL +-- + +_buildbot_bin = "/usr/bin/buildbot" +_buildbot_addr = "localhost:9989" + +function notify_buildbot(rev_id, revision, certs) + local author = "" + local changelog = "" + local branch = "" + for i,cert in pairs(certs) do + if cert["name"] == "changelog" then + changelog = changelog .. cert["value"] .. "\n" + elseif cert["name"] == "author" then + -- we simply override the author, in case there are multiple + -- author certs. + author = cert["value"] + elseif cert["name"] == "branch" then + -- likewise with the branch cert, which probably isn't that + -- clever... + branch = cert["value"] + end + end + + touched_files = "" + for i,row in ipairs(parse_basic_io(revision)) do + local key = row["name"] + if (key == 'delete') or (key == 'add_dir') or (key == 'add_file') or + (key == 'patch') then + local filename = row["values"][1] + touched_files = touched_files .. filename .. " " + end + end + + execute(_buildbot_bin, "sendchange", + "--master", _buildbot_addr, + "--username", author, + "--revision", rev_id, + "--comments", changelog, + "--branch", branch, + touched_files) +end + +function note_commit (new_id, revision, certs) + notify_buildbot(new_id, revision, certs) +end + +function note_netsync_revision_received(new_id, revision, certs, session_id) + notify_buildbot(new_id, revision, certs) +end