将Subversion日志导出为CSV

时间:2010-04-23 02:20:07

标签: svn logging

有没有一种简单的方法可以将subversion日志导出到CSV文件?

我想用它们来估算我在项目上花费的时间,在电子表格中这样做很容易。

感谢。

5 个答案:

答案 0 :(得分:9)

这个简短的Python脚本将提供带有SVN日志输出的CSV:

#!/usr/bin/env python

import csv
import subprocess
import sys
import xml.etree.cElementTree as etree

log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
                            stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)

csv_writer = csv.writer(sys.stdout)

for child in log_xml.getchildren():
        csv_writer.writerow([
                child.attrib['revision'],
                child.findtext('date'), 
                child.findtext('author').encode('utf-8'),
                child.findtext('msg').encode('utf-8'),
        ])

它通过命令行参数传递给基础SVN调用,因此如果您只想查看版本34及更高版本,可以按如下方式调用它:

$ svnlog2csv -r 34:HEAD >my_spreadsheet.csv 

答案 1 :(得分:2)

脚本的Thanx!我添加了这个稍微修改,因为我们的SVN存储库是UTF-8,带有重音字符(法语)和脚本borked:

#!/usr/bin/env python

import csv
import subprocess
import sys
import xml.etree.cElementTree as etree
import codecs

log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
                            stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)

csv_writer = csv.writer(sys.stdout)

for child in log_xml.getchildren():
        csv_writer.writerow([
                child.attrib['revision'],
                child.findtext('date'),
                child.findtext('author'),
                child.findtext('msg').encode("utf-8"),
        ])

干杯,

答案 2 :(得分:2)

谢谢大家,非常乐于助人。我发现在Windows计算机上python csv_writer需要二进制文件输出,否则会发出额外的回车符。以下脚本处理这种情况,并在提交消息中间删除换行符(替换为正斜杠)以确保单行输出。

#!/usr/bin/env python

import csv
import subprocess
import sys
import xml.etree.cElementTree as etree

log_text = subprocess.Popen(['svn', 'log', '--xml'] + sys.argv[1:],
                            stdout=subprocess.PIPE).communicate()[0]
log_xml = etree.XML(log_text)

if sys.platform == "win32":
    import os, msvcrt
    msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

csv_writer = csv.writer(sys.stdout)

for child in log_xml.getchildren():
        csv_writer.writerow([
                child.attrib['revision'],
                child.findtext('date'),
                child.findtext('author'),
                child.findtext('msg').encode("utf-8").replace('\n','/'),
        ])

(现在,还有谁希望svn log采用与git log相同的选项? - - )

答案 3 :(得分:1)

我取得巨大成功的另一个快速解决方案是here at Chris' blog。它是一个Java程序,可以快速将其转换为CSV文件。您还可以使用此处显示的在线版本。通常他会发布JavaScript文章,但我猜他也认识Java,因为它们应该非常相似。

答案 4 :(得分:0)

我找到了这个方便的小脚本

svn log -r {2015-05-01}:{2015-05-31} http://svn.company.co.id/dev/ |  tr -d '\n' | sed -r 's/-{2,}/\n/g' | sed -r 's/ \([^\)]+\)//g' | sed -r 's/^r//' | sed -r "s/[0-9]+ lines?//g" | sort -g | sed 's/ | /;/g' > list.csv

从2015年5月1日到2015年5月31日的日期导出svn日志list.csv ..这里我使用半冒号作为分隔符..因为我的开发人员在他们的笔记中使用逗号..

相关问题