| #!/usr/bin/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. |
| # |
| # |
| |
| from xml.dom.minidom import Document |
| import httplib,sys,os,subprocess |
| import ConfigParser |
| |
| ##################################### |
| ##### Subversion configurations ##### |
| REPOS = sys.argv[1] |
| REV = sys.argv[2] |
| |
| # if the repository and the version number of the repository not empty. |
| if REPOS and REV: |
| # The path of revision.properties |
| CONFIG_PATH = "/home/ofbiz/ofbiz/hot-deploy/scrum/config/revision.properties" |
| openfile = open(CONFIG_PATH) |
| openfile.readline() |
| revision = ConfigParser.ConfigParser() |
| revision.readfp(openfile) |
| REVISION_URL = revision.get("config", "revision.url") |
| HOSTNAME = revision.get("config", "host.name") |
| HOSTPORT = revision.get("config", "host.port") |
| OFBIZ_WEBSERVICE_URL = revision.get("config", "ofbiz.webservice.url") |
| SVN_USER = revision.get("config", "svn.user") |
| SVN_PASSWORD = revision.get("config", "svn.password") |
| |
| print "HOSTNAME == >>>" + HOSTNAME |
| print "HOSTPORT == >>>" + HOSTPORT |
| print "OFBIZ_WEBSERVICE_URL == >>>" + OFBIZ_WEBSERVICE_URL |
| print "SVN_USER == >>>" + SVN_USER |
| print "SVN_PASSWORD == >>>" + SVN_PASSWORD |
| |
| try: |
| REPOS_INPUT = REPOS[ 0 : REPOS.rfind("svn/")] |
| if len(REPOS_INPUT) > 15: |
| REPOSITORY_ROOT = REPOS[ REPOS.rfind("svn/") + 4 : len(REPOS)] |
| REPOS = REPOS |
| else: |
| REPOSITORY_ROOT = REPOS[ REPOS.rfind("svn/repositories/") + 17 : len(REPOS)] |
| REPOS = REVISION_URL + REPOSITORY_ROOT |
| |
| SVN_INFO_URL = REPOSITORY_ROOT + "&revision=" + REV |
| |
| print "REPOS == >>>" + REPOS |
| print "SVN_INFO_URL == >>>" + SVN_INFO_URL |
| ##### Web service configurations ##### |
| ##################################### |
| ###### Find Task and User ###### |
| if SVN_USER and SVN_PASSWORD: |
| l = subprocess.Popen('svn log -r %s %s --username %s --password %s \n\n' % (REV, REPOS, SVN_USER, SVN_PASSWORD), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT) |
| l.stdin.write('no\n') |
| l.stdin.write('t\n') |
| else: |
| l = subprocess.Popen('svn log -r %s %s \n\n' % (REV, REPOS), shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.STDOUT) |
| l.stdin.write('clear\n') |
| log = l.communicate()[0] |
| logListInput = log.split('\n'); |
| if len(logListInput) > 7: |
| log = logListInput[17] |
| else: |
| logList = log.split('|'); |
| log = logList[3] |
| ### check taskId ### |
| count = 0 |
| taskId = '' |
| for index in range(len(log)): |
| letter = log[index] |
| if letter.isdigit(): |
| count = count + 1 |
| else: |
| count = 0 |
| if count == 5: |
| taskId = log[(index - 4) : index + 1] |
| break |
| ### check hours ### |
| hours =''; |
| checkCond = False; |
| hourData = log.lower(); |
| hourMes = hourData[ hourData.rfind("hrs:") + 4 : hourData.rfind("hrs:") + 8] |
| countHrs = len(hourMes); |
| firstchar = hourMes[0]; |
| for hrsIndex in xrange(countHrs,0,-1): |
| if firstchar.isdigit(): |
| hrsLetter = hourMes[hrsIndex-1]; |
| if hrsLetter.isdigit(): |
| checkCond = True; |
| else: |
| checkCond = False; |
| if checkCond: |
| hours = hourMes[0 : (hrsIndex)] |
| break |
| else: |
| break |
| ### check Description ### |
| if len(logListInput) > 7: |
| userlog = logListInput[15] |
| userlogList = userlog.split('|'); |
| user = userlogList[1] |
| logMes = logListInput[17] |
| if len(logMes) > 255: |
| logMes = logMes[0:255] |
| revisionDescription = logMes |
| else: |
| user = logList[1].strip() |
| removeIndex = log.find('----------') |
| if removeIndex != -1: |
| log = log[0 : removeIndex - 1] |
| if len(log) > 255: |
| log = log[0:255] |
| revisionDescription = log[9 : len(log) - 1] |
| |
| print "user == >>>" + user |
| print "taskId == >>>" + taskId |
| print "hours == >>>" + hours |
| print "revisionDescription == >>>" + revisionDescription |
| ###### Create the minidom document ###### |
| doc = Document() |
| soapenv = doc.createElement("soapenv:Envelope") |
| doc.appendChild(soapenv) |
| soapenv.setAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/") |
| soapenv.setAttribute("xmlns:ser", OFBIZ_WEBSERVICE_URL) |
| |
| header = doc.createElement("soapenv:Header") |
| soapenv.appendChild(header) |
| |
| body = doc.createElement("soapenv:Body") |
| soapenv.appendChild(body) |
| |
| updateScrumRevision = doc.createElement("ser:updateScrumRevision") |
| body.appendChild(updateScrumRevision) |
| |
| mapMap = doc.createElement("map-Map") |
| updateScrumRevision.appendChild(mapMap) |
| |
| mapEntry = doc.createElement("ser:map-Entry") |
| mapKey = doc.createElement("ser:map-Key") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", "revisionNumber") |
| mapKey.appendChild(stdString) |
| mapEntry.appendChild(mapKey) |
| mapValue = doc.createElement("ser:map-Value") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", REV) |
| mapValue.appendChild(stdString) |
| mapEntry.appendChild(mapValue) |
| mapMap.appendChild(mapEntry) |
| |
| mapEntry = doc.createElement("ser:map-Entry") |
| mapKey = doc.createElement("ser:map-Key") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", "revisionLink") |
| mapKey.appendChild(stdString) |
| mapEntry.appendChild(mapKey) |
| mapValue = doc.createElement("ser:map-Value") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", SVN_INFO_URL) |
| mapValue.appendChild(stdString) |
| mapEntry.appendChild(mapValue) |
| mapMap.appendChild(mapEntry) |
| |
| mapEntry = doc.createElement("ser:map-Entry") |
| mapKey = doc.createElement("ser:map-Key") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", "revisionDescription") |
| mapKey.appendChild(stdString) |
| mapEntry.appendChild(mapKey) |
| mapValue = doc.createElement("ser:map-Value") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", revisionDescription) |
| mapValue.appendChild(stdString) |
| mapEntry.appendChild(mapValue) |
| mapMap.appendChild(mapEntry) |
| |
| mapEntry = doc.createElement("ser:map-Entry") |
| mapKey = doc.createElement("ser:map-Key") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", "taskId") |
| mapKey.appendChild(stdString) |
| mapEntry.appendChild(mapKey) |
| mapValue = doc.createElement("ser:map-Value") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", taskId) |
| mapValue.appendChild(stdString) |
| mapEntry.appendChild(mapValue) |
| mapMap.appendChild(mapEntry) |
| |
| mapEntry = doc.createElement("ser:map-Entry") |
| mapKey = doc.createElement("ser:map-Key") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", "hours") |
| mapKey.appendChild(stdString) |
| mapEntry.appendChild(mapKey) |
| mapValue = doc.createElement("ser:map-Value") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", hours) |
| mapValue.appendChild(stdString) |
| mapEntry.appendChild(mapValue) |
| mapMap.appendChild(mapEntry) |
| |
| mapEntry = doc.createElement("ser:map-Entry") |
| mapKey = doc.createElement("ser:map-Key") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", "user") |
| mapKey.appendChild(stdString) |
| mapEntry.appendChild(mapKey) |
| mapValue = doc.createElement("ser:map-Value") |
| stdString = doc.createElement("ser:std-String") |
| stdString.setAttribute("value", user) |
| mapValue.appendChild(stdString) |
| mapEntry.appendChild(mapValue) |
| mapMap.appendChild(mapEntry) |
| |
| soapMessage = doc.toprettyxml(indent=" "); |
| |
| ####### Call Webservice ####### |
| # Send request |
| webservice = httplib.HTTPConnection(HOSTNAME, HOSTPORT, timeout=10) |
| webservice.putrequest("POST", OFBIZ_WEBSERVICE_URL) |
| webservice.putheader("Host", HOSTNAME) |
| webservice.putheader("User-Agent", "Python post") |
| webservice.putheader("Content-type", "text/xml; charset=\"UTF-8\"") |
| webservice.putheader("Content-length", "%d" % len(soapMessage)) |
| webservice.putheader("SOAPAction", "\"\"") |
| webservice.endheaders() |
| webservice.send(soapMessage) |
| |
| # Get response |
| response = webservice.getresponse() |
| #print "reason: ", response.reason |
| webservice.close() |
| except Exception: |
| print >>sys.stderr, "File: {0}".format(sys.argv[0]) |
| error_info = sys.exc_info()[1] |
| sys.stderr.write("Exception :%s" % error_info) |
| sys.exit(1) |
| else: |
| print >>sys.stderr, "File: {0}".format(sys.argv[0]) |
| sys.stderr.write("<<<: Error: The repository and the version number of subversion can not be null :>>\n") |
| sys.exit(1) |
| |
| sys.exit(0) |