Hello fellow developers,
As announced recently, I am now working on a new version of MPfm for the Linux and Mac OS X platforms. I have installed Ubuntu and MonoDevelop for developing the Linux version of MPfm.
Because of this, I am now moving my private Subversion server into a minimal Gentoo Linux box inside VirtualBox. I can now host the SVN server inside any OS I want. I was previously using VisualSVN on Windows.
Since I didn’t want to install Mono on the Gentoo box to re-use my previous .NET console application, I have chosen to write the new Subversion/Mantis integration script using Python3.
Here is the post-commit file I am using:
#!/bin/sh REPOS="$1" REV="$2" /usr/bin/python /var/svn/repos/MPfm/hooks/mantis.py "$REPOS" "$REV"
Here is the code for the Python3 script that posts the Subversion log to Mantis:
#!/usr/bin/python
# SVN/Mantis Integration Script 0.1
import sys
import subprocess as sub
import urllib.request
import urllib.parse
def main():
# Check arguments
if(len(sys.argv) != 3):
print("The script needs 2 arguments")
sys.exit(0)
repo = sys.argv[1]
rev = sys.argv[2]
# Get SVN change log
args = ['svnlook', 'changed', '-r', rev, repo]
p = sub.Popen(args,stdout=sub.PIPE,stderr=sub.PIPE)
outputChanged, errorsChanged = p.communicate()
strOutputChanged = str(outputChanged, encoding='utf8')
# Get SVN author
args = ['svnlook', 'author', '-r', rev, repo]
p = sub.Popen(args,stdout=sub.PIPE,stderr=sub.PIPE)
outputAuthor, errorsAuthor = p.communicate()
strOutputAuthor = str(outputAuthor, encoding='utf8').replace("\n", "")
# Get SVN comment
args = ['svnlook', 'log', '-r', rev, repo]
p = sub.Popen(args,stdout=sub.PIPE,stderr=sub.PIPE)
outputLog, errorsLog = p.communicate()
strOutputLog = str(outputLog, encoding='utf8')
# Add comment to Mantis issue
url = "http://www.mp4m.org/mantis/checkin.php"
logContent = "The user <b>" + strOutputAuthor + "</b> has checked in files related to this issue (revision <b>" + rev + "</b>).<br /><br /><b>Comment:</b><br />" + strOutputLog + "<br /><br /><b>Files modified:</b><br />" + strOutputChanged
print(logContent)
logContent = logContent.replace("\\n", "<br />")
post_data = {"user":"svn", "log":logContent}
post_data_encoded = urllib.parse.urlencode(post_data)
request_object = urllib.request.Request(url, post_data_encoded)
response = urllib.request.urlopen(request_object)
html_string = response.read()
print(html_string)
if __name__ == "__main__":
main()
Do not forget to make both files executable by typing:
sudo chmod o+x filename.ext
Note: To complete the integration, you will also need the modified checkin.php file for Mantis, which you can find in the previous article.
If you have any questions, do not hesitate to ask!
Tags: Gentoo Linux, Mantis, Mono, MonoDevelop, Python, Subversion, Ubuntu, VirtualBox
Recent Comments