python抓取svn log

需求来源:组队经理想做代码评审,需要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()
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值