Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 108 lines (94 sloc) 3.4 KB
#!/usr/bin/python
"""
svn.py
Script for BuildBot to monitor a remote Subversion repository.
Copyright (C) 2006 John Pye
"""
# This script is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
# USA
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import ConfigParser
import os.path
import subprocess
import sys
import xml.dom.minidom
# change these settings to match your project
svnurl = "https://pse.cheme.cmu.edu/svn/ascend/code/trunk"
statefilename = "~/changemonitor/config.ini"
buildmaster = "buildbot.example.org:9989" # connects to a PBChangeSource
xml1 = subprocess.check_output(
"svn log --non-interactive --verbose --xml --limit=1 " + svnurl,
shell=True)
xml1 = xml1.decode(sys.stdout.encoding)
# print "XML\n-----------\n"+xml1+"\n\n"
try:
doc = xml.dom.minidom.parseString(xml1)
el = doc.getElementsByTagName("logentry")[0]
revision = el.getAttribute("revision")
author = "".join([t.data for t in el.getElementsByTagName(
"author")[0].childNodes])
comments = "".join([t.data for t in el.getElementsByTagName(
"msg")[0].childNodes])
pathlist = el.getElementsByTagName("paths")[0]
paths = []
for p in pathlist.getElementsByTagName("path"):
paths.append("".join([t.data for t in p.childNodes]))
# print "PATHS"
# print paths
except xml.parsers.expat.ExpatError as e:
print("FAILED TO PARSE 'svn log' XML:")
print(str(e))
print("----")
print("RECEIVED TEXT:")
print(xml1)
import sys
sys.exit(1)
fname = statefilename
fname = os.path.expanduser(fname)
ini = ConfigParser.SafeConfigParser()
try:
ini.read(fname)
except Exception:
print("Creating changemonitor config.ini:", fname)
ini.add_section("CurrentRevision")
ini.set("CurrentRevision", -1)
try:
lastrevision = ini.get("CurrentRevision", "changeset")
except ConfigParser.NoOptionError:
print("NO OPTION FOUND")
lastrevision = -1
except ConfigParser.NoSectionError:
print("NO SECTION FOUND")
lastrevision = -1
if lastrevision != revision:
# comments = codecs.encodings.unicode_escape.encode(comments)
cmd = "buildbot sendchange --master=" + buildmaster + " --branch=trunk \
--revision=\"" + revision + "\" --who=\"" + author + "\" --vc=\"svn\" \
--comments=\"" + comments + "\" " + " ".join(paths)
# print cmd
res = subprocess.check_output(cmd)
res = res.decode(sys.stdout.encoding)
print("SUBMITTING NEW REVISION", revision)
if not ini.has_section("CurrentRevision"):
ini.add_section("CurrentRevision")
try:
ini.set("CurrentRevision", "changeset", revision)
f = open(fname, "w")
ini.write(f)
# print "WROTE CHANGES TO",fname
except Exception:
print("FAILED TO RECORD INI FILE")