Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/buildbot/contrib/arch_buildbot.py
diff options
context:
space:
mode:
Diffstat (limited to 'buildbot/contrib/arch_buildbot.py')
-rwxr-xr-xbuildbot/contrib/arch_buildbot.py76
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)