需求来源:组队经理想做代码评审,需要SVN上面的Log,手动复制下来的时候,格式不整齐,需要自己手动排版等等,而且需要对较多的SVN路径处理,根据日期筛选,比较麻烦,想做个自动化的脚本工具,能够根据日期,以及SVN路径抓取Log,然后保存到excel表格里面。
pip install xlrd
pip install xlwt
环境配置:
1.首先需要准备一些环境条件,下载python包xlrd,xlwt。这两个包操作excel非常方便
2.SVN需要添加环境变量,因为后续会使用svn log命令来抓取log,然后对log分析。
可以使用命令svn log –help查看一下可以带那些参数以及筛选条件。在此我们关注-r选项,例如
svn log -r{2017-08-24T14:35:06}:{2018-03-24T14:35:06} svnPath
svnPath就填写自己实际的svn路径,上面命令返回在时间点2017-08-24 14:35:06 到2018-03-24 14:35:06的log,返回格式可以参看:
查看上图SVN log返回格式,然后开始解析。
去掉中间的分割线。提取rivision, author, message, time四个即可。
import xlwt
import os
class baseLog:
def __init__(self):
self.revision = ""
self.author = ""
self.time = ""
self.message = ""
def setRevision(self, revision):
self.revision = revision
def setAuthor(self, author):
self.author = author
def setTime(self, time):
self.time = time
def setMessage(self, msg):
self.message = msg
def getRevision(self):
return self.revision
def getAuthor(self):
return self.author
def getTime(self):
return self.time
def getMessage(self):
return self.message
def __str__(self):
str = ("Revision : %s\nTime : %s\nAuthor : %s\nMessage : %s\n") %(self.revision, self.time, self.author, self.message)
return str
def readSVNLog():
rootDir = "svn://192.168.0./tags" ## svn路径
startDate = "{2017-08-24T14:35:06}" ## 开始时间
endDate = "{2018-03-24T14:35:06}" ## 终止时间
xlsx = "E:\\TestDirectory\\XML_CFG\\Book1.xlsx" ## 保存的excel路径以及文件名
command = "svn log " + "-r" + startDate + ":" + endDate + " " + rootDir
print(command)
rootLogList = os.popen(command)
res = rootLogList.read()
rootLogList.close()
i = 0
log = baseLog()
message = ""
result = []
for line in res.splitlines():
if line is None or (len(line) < 1):
continue
if '--------' in line:
continue
i = i + 1
if line.count("|") >= 3:
log.setMessage(message)
message = ""
if len(log.getMessage()) > 0:
result.append(log)
log = baseLog()
tmpList = line.split("|")
log.setRevision(tmpList[0])
log.setAuthor(tmpList[1])
log.setTime(tmpList[2])
else:
message = message + line
log.setMessage(message)
result.append(log)
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet("log", cell_overwrite_ok=True)
j = 0
for i in result:
tmpStr = str(i)
sheet.write(j, 0, tmpStr)
j = j + 1
book.save(xlsx)
if __name__ == '__main__':
readSVNLog()