diff options
Diffstat (limited to 'qpid/review/changeLogToWiki.py')
-rwxr-xr-x | qpid/review/changeLogToWiki.py | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/qpid/review/changeLogToWiki.py b/qpid/review/changeLogToWiki.py new file mode 100755 index 0000000000..4054b135df --- /dev/null +++ b/qpid/review/changeLogToWiki.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python +# +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +import sys, re +from popen2 import popen2, popen3 +from optparse import OptionParser +from xml.dom.minidom import parse, parseString + +prereqs = ["tr", "svn", "xsltproc", "sed", "grep", "wget"] + +apacheSVN="https://svn.apache.org/repos/asf/qpid/trunk/qpid/java" + +svncmd = "svn log %s --xml -r %s:HEAD | tr '\\n\\r|' ' -' | xsltproc svnlog2wiki.xsl - | grep r | sed -e 's/^ *//' | sed -e 's/\\(QPID-[0-9]*\\)/\\[\\1 | https:\\/\\/issues.apache.org\\/jira\\/browse\\/\\1 \]/g'" + + +def get_commits(revision): + (stdout, stdin) = popen2(svncmd % (options.repo,revision)) + return add_jira_status(stdout.read()) + +def add_jira_status(commits): + commit_lines = commits.split("\n") + new_commits = [] + for commit in commit_lines: + if re.match(".*https://issues.apache.org/.*", commit): + jira = re.findall("QPID-[0-9]*", commit)[0] + jira_xml_url = "http://issues.apache.org/jira/si/jira.issueviews:issue-xml/%s/%s.xml" % (jira, jira) + (stdout, stdin) = popen2("wget -q -O - %s" % jira_xml_url) + + jira_dom = parse(stdout) + status = jira_dom.getElementsByTagName("status")[0] + new_commits.append("%s %s | " % (commit, status.lastChild.data)) + else: + new_commits.append(commit) + + return "\n".join(new_commits) + + +def main(): + global options + parser = OptionParser() + parser.add_option("-r", "--revision", dest="revision", action="store", + type="string", + help="The first revision to generate logs for") + + parser.add_option("-s", "--svn-repo", dest="repo", action="store", + default=apacheSVN, + type="string", + help="Provide a svn repository to process") + + + (options, args) = parser.parse_args() + + # Check that we have what's necessary + + notfound = re.compile('^which') + for cmd in prereqs: + (stdout, stdin, stderr) = popen3('which %s' % cmd) + if (notfound.match(stderr.read())): + parser.error ("Could not find command %s, try [apt-get|yum] install %s" % + (cmd, cmd)) + + if (options.revision == None): + parser.error("svn revision must be specified") + + print(get_commits(options.revision)) + +if __name__ == "__main__": + main() |