body += "The failures are continued till this build %s. ", build_uri("http://build.samba.org/build.cgi", original) msg = MIMEText(body) msg["Subject"] = "BUILD of %s:%s BROKEN on %s with %s AT REVISION %s" % (cur.tree, t.branch, cur.host, cur.compiler, diff.new_rev) msg["From"] = "\"Build Farm\" <*****@*****.**>" msg["To"] = ",".join(recipients) if not opts.dry_run: smtp.sendmail(msg["From"], [msg["To"]], msg.as_string()) else: print msg.as_string() #variable created for testing purposes if __name__ == '__main__': builds = buildfarm.builds for build in buildfarm.get_new_builds(): if build in builds: continue if not opts.dry_run: old_build = build try: build = builds.upload_build(old_build) except MissingRevisionInfo: print "No revision info in %r, skipping" % build continue try: rev = build.revision_details() except MissingRevisionInfo: #no point in sending mail as there is no rev and this is not added to database print "No revision info in %r, skipping" % build
"old_status": diff.old_status, "build_link": build_uri("https://build.samba.org/build.cgi", cur) } msg = MIMEText(body) msg["Subject"] = "BUILD of %s:%s BROKEN on %s with %s AT REVISION %s" % ( cur.tree, t.branch, cur.host, cur.compiler, diff.new_rev) msg["From"] = "\"Build Farm\" <*****@*****.**>" msg["To"] = ",".join(recipients) if not opts.dry_run: smtp.sendmail(msg["From"], [msg["To"]], msg.as_string()) else: print msg.as_string() for build in buildfarm.get_new_builds(): if build in buildfarm.builds: continue if not opts.dry_run: old_build = build try: build = buildfarm.builds.upload_build(old_build) except MissingRevisionInfo: print "No revision info in %r, skipping" % build continue try: rev = build.revision_details() except MissingRevisionInfo: print "No revision info in %r, skipping" % build
class BuildFarmTests(BuildFarmTestCase): def setUp(self): super(BuildFarmTests, self).setUp() self.buildfarm = BuildFarm(self.path) self.write_compilers(["cc"]) self.write_hosts({"myhost": "Fedora", "charis": "Debian"}) self.write_trees({"trivial": {"scm": "git", "repo": "git://foo", "branch": "master"}, "other": {"scm": "git", "repo": "other.git", "branch": "HEAD"}}) self.buildfarm.commit() self.x = BuildFarm(self.path) def test_get_new_builds_empty(self): self.assertEquals([], list(self.x.get_new_builds())) def test_get_last_builds_empty(self): self.assertEquals([], list(self.x.get_last_builds())) def test_get_tree_builds_empty(self): self.assertEquals([], list(self.x.get_tree_builds("trival"))) def test_get_tree_builds(self): path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "gcc", stdout_contents="BUILD COMMIT REVISION: 12\n", mtime=1200) path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "cc", stdout_contents="BUILD COMMIT REVISION: 13\n", mtime=1300) path = self.upload_mock_logfile(self.x.builds, "tdb", "myhost", "cc", stdout_contents="BUILD COMMIT REVISION: 42\n", mtime=4200) builds = list(self.x.get_tree_builds("tdb")) self.assertEquals(["42", "12"], [x.revision for x in builds]) def test_get_last_builds(self): path = self.upload_mock_logfile(self.x.builds, "other", "myhost", "cc", "BUILD COMMIT REVISION: 12\n", mtime=1200) path = self.upload_mock_logfile(self.x.builds, "trivial", "myhost", "cc", "BUILD COMMIT REVISION: 13\n", mtime=1300) path = self.upload_mock_logfile(self.x.builds, "trivial", "myhost", "cc", "BUILD COMMIT REVISION: 42\n", mtime=4200) builds = list(self.x.get_last_builds()) self.assertEquals(2, len(builds)) self.assertEquals(4200, builds[0].upload_time) self.assertEquals("42", builds[0].revision_details()) self.assertEquals("trivial", builds[0].tree) self.assertEquals(1200, builds[1].upload_time) self.assertEquals("12", builds[1].revision_details()) self.assertEquals("other", builds[1].tree) def test_get_summary_builds_empty(self): self.assertEquals([], list(self.x.get_summary_builds())) def test_get_summary_builds(self): path = self.upload_mock_logfile(self.x.builds, "other", "myhost", "cc", "BUILD COMMIT REVISION: 12\n", mtime=1200) path = self.upload_mock_logfile(self.x.builds, "trivial", "myhost", "cc", "BUILD COMMIT REVISION: 13\n", mtime=1300) path = self.upload_mock_logfile(self.x.builds, "trivial", "myhost", "cc", "BUILD COMMIT REVISION: 42\n", mtime=4200) builds = list(self.x.get_summary_builds()) self.assertEquals(2, len(builds)) self.assertEquals("other", builds[0][0]) self.assertEquals("trivial", builds[1][0]) builds = list(self.x.get_summary_builds(min_age=4000)) self.assertEquals(1, len(builds)) builds = list(self.x.get_summary_builds(min_age=5000)) self.assertEquals(0, len(builds)) def test_get_host_builds_empty(self): self.assertEquals([], list(self.x.get_host_builds("myhost"))) def test_lcov_status_none(self): self.assertRaises(NoSuchBuildError, self.x.lcov_status, "trivial") def test_tree(self): self.assertEquals("trivial", self.x.trees["trivial"].name) tree = self.x.trees["trivial"] self.assertEquals("git", tree.scm) self.assertEquals("git://foo", tree.repo) self.assertEquals("master", tree.branch) def test_get_build_rev(self): path = self.upload_mock_logfile(self.x.builds, "tdb", "charis", "cc", stdout_contents="tHIS is what a log file looks like.\n" "BUILD COMMIT REVISION: 12\n") build = self.x.get_build("tdb", "charis", "cc", "12") self.assertEquals("tdb", build.tree) self.assertEquals("charis", build.host) self.assertEquals("cc", build.compiler) self.assertEquals("12", build.revision) def test_get_build_no_rev(self): path = self.create_mock_logfile("tdb", "charis", "cc", contents="This is what a log file looks like.") build = self.x.get_build("tdb", "charis", "cc") self.assertEquals("tdb", build.tree) self.assertEquals("charis", build.host) self.assertEquals("cc", build.compiler) self.assertIs(None, build.revision)