提问的智慧SVN版 - 提问者必读
发新话题
打印

[原创] 安装配置svnLogBrowser(2008-7-28已更新可以放入Hooks中py脚本)

本主题由 Admin 于 2008-7-24 14:57 加入精华

安装配置svnLogBrowser(2008-7-28已更新可以放入Hooks中py脚本)

svnLogBrowser,一个浏览svn提交日志的工具,主页:http://svnlogbrowser.org/download.htm,程序语言:php+python

假设已经安装好apache、php、python、mysql、python的

1.下载最新版本1.0.0
2.看了下readme,需要有php4.3以上的,mysql4.1以上,python,python的mysql访问模块和svn访问模块。除了python的两个模块之外,其他我都已经安装了的,根据它提供的网址,下载两个模块即可。svn访问模块,请注意要下载适合你的svn版本的。
3.在mysql中新建一个数据库,如:svnlog
4.把文件夹frontend改名成svnLogBrowser,复制其中的config.php.dist,更名为config.php,修改其中的数据库连接信息
5.在apache中添加svnLogBrowser对应的虚拟目录
6.浏览器中输入http://主机:端口/svnLogBrowser/setup.php,配置需要浏览日志的版本库信息(可以配置多个)
7.打开slb-update.py,修改其中的数据库连接信息
8.运行slb-update.py,先把你先前配置好的版本库日志信息全部更新到数据库中去,以后再运行该脚本就是从上个版本到最新版本的日志新增了。

上面说的基本上也就是readme里面的内容,安装可以说还是比较简单的,下面主要说说我在安装配置中碰到的问题

1.提交日志信息(包括中文目录路径和中文日志信息)是乱码:
这个我查了数据库,数据库里面的数据也是乱码,但是mysql肯定是utf8编码的,建数据库时也是默认utf8编码。一开始以为是那个py脚本编码有问题,所以insert的数据是乱么,于是就update一条记录的信息,但是更新后数据还是乱码。于是怀疑表和字段的编码问题,果然一查是字段的编码问题。这些表是svnLogBrowser建立,找到建表的sql:authors.sql,changelogs.sql,changes.sql,commits.sql,修改其中编码即可。这样浏览时就不会有信息就不会是乱码了。

想省点力朋友可以下载我改好sql: sql.rar (1.24 KB)

2.py脚本执行错误:
这个错误主要怪我,但是从另一方面说明这个py脚本考虑得还不够好。
错误是,我用了本机的一个版本库做测试,运行py脚本出错,说提交日志log对象中无key“author”。跑了很多次都是有问题,我竟然怀疑pysvn这个python的svn访问模块是不是有问题(汗啊,想想实在不该这么怀疑),去了它主页看了api,确实是有提交人这个key值的。
但是修改脚本,添加 print log.has_key('author') 确实输出False。咦,怎么还有等于True的输出。想了想,原来最早几个版本,我是佚名登录,所以提交人不存在,这样它的log就不含author这个key了,知道怎么回事就好办了。在for log in messages:中加上以下两句就好了:
if not log.has_key('author'):
    log['author'] = 'anonymous'

改好的脚本: slb-update.rar (2.42 KB)

再次运行脚本,OK了。
浏览器中输入http://主机:端口/svnLogBrowser,可以看到日志了。来张图


想把py脚本放入post-commit的hooks中,那就可以每次提交就新增新的日志了。
但是还有修改日志怎么办呢,当然是更新对应的日志信息了,那就得把脚本放入post-revprop-change的hooks中。

当然程序中py脚本并没有提供更新日志的方法,可惜python我不是很懂,于是用C#写了个程序,使用了sharpsvn来取得svn的日志信息,实现了py原有的功能和更新日志的功能。

SvnLogBuilder.exe.config的配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    ......log4net配置部分......
    <appSettings>
        <add key="DBConnString" value="Server=localhost;Database=svnlog;Uid=rootwd=root;" />
         <add key="AuthUser" value="username" />
         <add key="AuthPasswd" value="password" />
    </appSettings>
</configuration>

把数据库连接字符串和登录svn的用户名、密码修改正确即可。

post-commit.bat脚本内容:

@echo on
set REPOS=%1
set REV=%2
SvnLogBuilder.exe --root %REPOS%
exit 0

post-revprop-change.bat脚本内容:

@echo on
set REPOS=%1
set REV=%2
set USER=%3
set PROPNAME=%4
set ACTION=%5
SvnLogBuilder.exe --root %REPOS% --r %REV%
exit 0

当然还得把svnLogBrowser的setup.php修改下,增加svn_root的文本框,把svn_root值insert到数据库表changelog的svn_root字段。svn_root即%REPOS%值。

SvnLogBuilder程序:
Release.part01.rar (214.84 KB)
Release.part02.rar (214.84 KB)
Release.part03.rar (214.84 KB)
Release.part04.rar (214.84 KB)
Release.part05.rar (214.84 KB)
Release.part06.rar (214.84 KB)
Release.part07.rar (214.84 KB)
Release.part08.rar (195.55 KB)

修改后的setup.php:
[attach]633[/attac

看了下python,修改了slb-update.py这个脚本,实现了上面的.net的程序的功能,感觉写这种小东西还是py更合适。

post-commit.bat的hooks文件内容:
@echo on
set REPOS=%1
set REV=%2
python c:\slb-update_v2.py %REPOS%
exit 0

post-revprop-change.bat的hooks文件内容:
@echo on
set REPOS=%1
set REV=%2
set USER=%3
set PROPNAME=%4
set ACTION=%5
python c:\slb-update_v2.py %REPOS% %REV%
exit 0

python脚本下载:
slb-update_v2.rar (2.79 KB)

另:py是看着电子书,边学边写的,代码难免丑陋,请大家见谅。
如果写得有问题或不好之处,请高手们指出,谢谢!

[ 本帖最后由 vb1980 于 2008-7-28 17:29 编辑 ]

附件

setup.rar (3.21 KB)

2008-7-26 20:44, 下载次数: 27

本帖最近评分记录
  • Admin 威望 +6 精品文章 2008-7-24 14:08
  • Admin 金币 +6 精品文章 2008-7-24 14:08

TOP

你好

SVN中如何比较word和excel文档呀?
能教教我吗?

TOP

发新话题
订阅 我用Subversion - SVN中文论坛 邮件列表:iUseSVN@googlegroups.com
电子邮件:
网站重要事项将会在这个列表进行通知,点击这里浏览存于列表中的所有邮件