现在的位置: 首页 > 综合 > 正文

[原创]Python(pysvn)提取svn版本间改动文件列表

2013年04月21日 ⁄ 综合 ⁄ 共 2194字 ⁄ 字号 评论关闭

[原创]Python(pysvn)提取svn版本间改动文件列表
by AKara 2010-04-29 @ http://blog.csdn.net/akara @ akarachen(at)gmail.com @weibo.com/akaras

 
  希望实现一个提取两个svn revision间有变动(增/删/改)的文件的列表
的命令行工具;可以帮我们项目做一些流程中的自动化工作(time -80%!)。
其实这事情,GUI界面的TortoiseSVN就已经可以在Log Message Dialog中通过
点击任两个revision条目来右键Compare revisions完成并存盘;但可惜没有
commandline接口,而且我的想法中还有些特殊的过滤规则和输出格式要求。

  直觉上,希望直接pipe一下"svn log url -rR1:R2 -v"之类的输出来做。
但基于svn美化的文本输出还原它底层的数据结构会陷进(造轮子^2)的杯具中。

  Google了一下"python svn"发现pysvn这个3rd lib( Python的3rd lib真是
比Lua多一个数量级*_* ),用它便可独立完成普通svn client能实现的功能。
变动文件列表提取就是小菜一碟了。

---------------------------------------------------------------------

  动手了。
  首先,确定svn server的版本号:
  从WEB浏览器上打开要提取的svn仓库URL页面,最下方应该有类似:
   "Powered by Subversion version 1.5.5 (r34862). "
的信息。现在可以到http://pysvn.tigris.org找对应版本的PySvn库。
我用的是Python2.5。找到一个版本的PySvn刚好合适:

  ===========================================
  名称 py25-pysvn-svn155-1.6.3-1119.exe
  状态 稳定 
  描述 PySVN 1.6.3 for python 2.5 and svn 1.5.5 installation kit
  创建者 barryscott 于 2009年2月11日 星期三 
  上次修改者 barryscott 于 2009年4月18日 星期六 
  文件  py25-pysvn-svn155-1.6.3-1119.exe (文件大小: 3332.6) 
  ===========================================
 
  但,这官站访问起来那是异常的慢。-_-
  (我的FireFox上要将network.http.keep-alive.timeout改大几倍才能打开)
  而且下载也是非常的不稳定,忍不了,找了一个第三方的下载点(瞬间下完):
http://www.urbansim.org/opus/third-party/windows/py25-pysvn-svn155-1.6.3-1119.exe 

---------------------------------------------------------------------

  安装完成后可以从PySVN Documentation->pysvn Programmer's Reference中
查看相关module和API和对象集合说明,貌似详细,但其实看完还有点糊涂。
  还好最终用到的只有几个API:
  pysvn.Client()
  callback_get_login
  diff_summarize
 
  和几个内置对象:
  pysvn.diff_summarize_kind
  pysvn.node_kind
 
  期间遇到对象的细节,与其看它文档,for k, v ...: print k, v, type(v)
更方便;或dir一下。还有处理一下中文目录名和文件名的unicode格式化转换。

  Done。

---------------------------------------------------------------------
 
  最终完成并freeze成一个svndiff.exe,usage如下:
  svndiff.exe url -r RevFrom:RevTo [-u username] [-p password] [-v]
  > url: 可为网络URL,也可为本地仓库路径
         (作本地仓库路径时,注意svn client工具和pysvn版本的兼容性)
  > -r : 就像标准svn client的log -r
  > -u : [可选]用户;不提供将直接使用系统内的svn认证cache
  > -p : [可选]密码;不提供将直接使用系统内的svn认证cache
  > -v : [可选]详细改动信息打印
 
  它能将版本间的改动文件按照指定过滤规则导出lst列表文件另作特殊用途。

--------------------------------------------------------------------- 
 
  使用pysvn可以很方便地实现一些普通svn命令无法做到的自动化工具,
能大大提高项目开发和运营维护效率。值得尝试一下。

---------------------------------------------------------------------

抱歉!评论已关闭.