本站首页    管理页面    写新日志    退出


«July 2020»
1234
567891011
12131415161718
19202122232425
262728293031


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7228484
建立时间:2006年5月29日




[Subversion]StatSVN的使用(续)
软件技术

lhwork 发表于 2008-3-14 15:43:29

前面一篇我们讲到了StatSVN的简单使用,但是如果每次都要手工去做那些工作,实在麻烦得很。所以这里我们需要写一个脚本,让它定时执行那些操作,这样可以保持报表信息最新的。关于脚本的语言,我选择用了python,哦,又是python,请原谅我,因为最近在学习python,所以什么都想通过python来做。 讲一下主要思路:读取配置文件,取得所需的信息;查看版本库是否存在,不存在则checkout,存在则update;执行svn log生成日期文件;调用java -jar statsvn.jar生成版本库的报表。 开始实现: 1.配置文件两个respository.cfg.xml,statsvn.cfg.xml: respository.cfg.xml样式 <?xml version="1.0"?><respositoryconfig><respository httpurl = "http://localhost:8080/svn/test" fileurl = "file:///F:/AMP/SVNRespository/test" >     <checkoutdir dir = "F:/Test" />     <outputdir dir = "F:/TestReport" /></respository></respositoryconfig> statsvn.cfg.xml样式 <?xml version="1.0"?><statsvnconfig><svnhome dir = "F:/AMP/Subversion/bin" /><statsvnjar dir = "F:/statsvn.jar" /></statsvnconfig> 2.pytho脚本: from xml.dom.minidom import parse, parseStringimport os, sys class respconfig:       def __setattr__(self, attr, value):           if attr == 'reposhttpurl':               self.__dict__[attr] = value           elif attr == 'reposfileurl':               self.__dict__[attr] = value           elif attr == 'checkoutdir':               self.__dict__[attr] = value           elif attr == 'outputdir':               self.__dict__[attr] = value           else:               raise AttributeError, attr + ' not allowed'               def __getattr__(self, attr):           if attr == "reposhttpurl":               return self.__dict__[attr]           elif attr == "reposfileurl":               return self.__dict__[attr]           elif attr == 'checkoutdir':               return self.__dict__[attr]           elif attr == 'outputdir':               return self.__dict__[attr]           else:               raise AttributeError, attr class statsvnconfig:       def __setattr__(self, attr, value):           if attr == 'svnhome':               self.__dict__[attr] = value           elif attr == 'statsvnjar':               self.__dict__[attr] = value           else:               raise AttributeError, attr + ' not allowed'               def __getattr__(self, attr):           if attr == "svnhome":               return self.__dict__[attr]           elif attr == 'statsvnjar':               return self.__dict__[attr]           else:               raise AttributeError, attr        def loadRespConfig(xmlfile):       dom1 = parse(xmlfile)       config_element = dom1.getElementsByTagName("respositoryconfig")[0]       resps = config_element.getElementsByTagName("respository")       respconfigs = []       for resp in resps:           respcfg = respconfig()           respcfg.reposhttpurl = resp.attributes["httpurl"].value           respcfg.reposfileurl = resp.attributes["fileurl"].value           respcfg.checkoutdir = resp.getElementsByTagName("checkoutdir")[0].attributes["dir"].value           respcfg.outputdir = resp.getElementsByTagName("outputdir")[0].attributes["dir"].value           respconfigs.append(respcfg)       return respconfigs def loadStatSvnConfig(xmlfile):       dom1 = parse(xmlfile)       config_element = dom1.getElementsByTagName("statsvnconfig")[0]       statsvncfg = statsvnconfig()       statsvncfg.svnhome = config_element.getElementsByTagName("svnhome")[0].attributes["dir"].value       statsvncfg.statsvnjar = config_element.getElementsByTagName("statsvnjar")[0].attributes["dir"].value       return statsvncfg def createSvnLog(svnhome, reposhttpurl, checkouturl):       cmd = '%s/svn log %s -v --xml > %s/logfile.log'% (svnhome, reposhttpurl, checkouturl)       os.popen(cmd, 'r') def updateRepos(svnhome, checkouturl):       cmd = '%s/svn update %s'% (svnhome, checkouturl)       os.popen(cmd, 'r') def checkoutRepos(svnhome, reposfileurl, checkouturl):       cmd = '%s/svn checkout %s %s'% (svnhome, reposfileurl, checkouturl)       os.popen(cmd, 'r') def createStatSvnReport(statsvnjar, outputdir, checkoutdir):       cmd = 'java -jar %s -output-dir %s -threads 10 %s/logfile.log %s'% (statsvnjar, outputdir, checkoutdir, checkoutdir)       os.popen(cmd, 'r') def checkoutRequired(checkoutdir):       if os.path.exists(checkoutdir):           return False       else:           return True        if __name__ == '__main__':       respconfigs = loadRespConfig(os.getcwd() + "respository.cfg.xml")       statsvncfg = loadStatSvnConfig(os.getcwd() + "statsvn.cfg.xml")       i = 0       length = len(respconfigs)       while 1:           if i >= length:               break           if checkoutRequired(respconfigs[i].checkoutdir):               checkoutRepos(statsvncfg.svnhome, respconfigs[i].reposfileurl, respconfigs[i].checkoutdir)           else:               updateRepos(statsvncfg.svnhome, respconfigs[i].checkoutdir)           createSvnLog(statsvncfg.svnhome, respconfigs[i].reposhttpurl, respconfigs[i].checkoutdir)           createStatSvnReport(statsvncfg.statsvnjar, respconfigs[i].outputdir, respconfigs[i].checkoutdir)           i = i + 1       sys.exit() 剩下的就是通过py2exe把py脚本生成exe或者写个bat文件调用改py脚本,把exe或者bat文件放到windows计划任务中去就可以了。


阅读全文(11162) | 回复(-1) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.047 second(s), page refreshed 144421455 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号