diff options
Diffstat (limited to 'buildbot/contrib/arch_buildbot.py')
-rwxr-xr-x | buildbot/contrib/arch_buildbot.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/buildbot/contrib/arch_buildbot.py b/buildbot/contrib/arch_buildbot.py new file mode 100755 index 0000000..99b065c --- /dev/null +++ b/buildbot/contrib/arch_buildbot.py @@ -0,0 +1,76 @@ +#! /usr/bin/python + +# this script is meant to run as an Arch post-commit hook (and also as a +# pre-commit hook), using the "arch-meta-hook" framework. See +# http://wiki.gnuarch.org/NdimMetaHook for details. The pre-commit hook +# creates a list of files (and log comments), while the post-commit hook +# actually notifies the buildmaster. + +# this script doesn't handle partial commits quite right: it will tell the +# buildmaster that everything changed, not just the filenames you give to +# 'tla commit'. + +import os +import commands +import cStringIO + +from buildbot.scripts import runner + +# Just modify the appropriate values below and then put this file in two +# places: ~/.arch-params/hooks/ARCHIVE/=precommit/90buildbot.py and +# ~/.arch-params/hooks/ARCHIVE/=commit/10buildbot.py + +master = "localhost:9989" +username = "myloginname" + +# Remember that for this to work, your buildmaster's master.cfg needs to have +# a c['sources'] list which includes a pb.PBChangeSource instance. + +os.chdir(os.getenv("ARCH_TREE_ROOT")) +filelist = ",,bb-files" +commentfile = ",,bb-comments" + +if os.getenv("ARCH_HOOK_ACTION") == "precommit": + files = [] + out = commands.getoutput("tla changes") + for line in cStringIO.StringIO(out).readlines(): + if line[0] in "AMD": # add, modify, delete + files.append(line[3:]) + if files: + f = open(filelist, "w") + f.write("".join(files)) + f.close() + # comments + logfiles = [f for f in os.listdir(".") if f.startswith("++log.")] + if len(logfiles) > 1: + print ("Warning, multiple ++log.* files found, getting comments " + "from the first one") + if logfiles: + open(commentfile, "w").write(open(logfiles[0], "r").read()) + +elif os.getenv("ARCH_HOOK_ACTION") == "commit": + revision = os.getenv("ARCH_REVISION") + + files = [] + if os.path.exists(filelist): + f = open(filelist, "r") + for line in f.readlines(): + files.append(line.rstrip()) + if not files: + # buildbot insists upon having at least one modified file (otherwise + # the prefix-stripping mechanism will ignore the change) + files = ["dummy"] + + if os.path.exists(commentfile): + comments = open(commentfile, "r").read() + else: + comments = "commit from arch" + + c = {'master': master, 'username': username, + 'revision': revision, 'comments': comments, 'files': files} + runner.sendchange(c, True) + + if os.path.exists(filelist): + os.unlink(filelist) + if os.path.exists(commentfile): + os.unlink(commentfile) |