`
zhengdl126
  • 浏览: 2510130 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

svnchanged_export.py 导出svn版本之间的变更文件

 
阅读更多

 

 


======================= 1 基于red hat6.0上自带的python2.6.5安装pysvn1.7.6

查看os版本方法
# lsb_release -a

查看python版本方法
#  python
Python 2.6.5 (r265:79063, Jul 14 2010, 11:36:05)

#  whereis python
python: /usr/bin/python /usr/bin/python2.6-config /usr/bin/python2.6 /usr/lib/python2.6 /usr/lib64/python2.6 /usr/include/python2.6 /usr/share/man/man1/python.1.gz

pysvn官网:
http://pysvn.tigris.org/project_downloads.html





======================= 2 安装pysvn前的准备

 

 

 

-------------2.1 挂载nfs

 

其实和以前的centos5没啥区别,只不过centos的安装是选mini的还真够mini的,啥都要自己yum。这不连nfs都默认不装了。
mount -t nfs 192.168.1.1:/nfs1 /mnt/nfs
直接提示

mount: wrong fs type, bad option, bad superblock on 192.168.1.1:/nfs1,
       missing codepage or helper program, or other error
       (for several filesystems (e.g. nfs, cifs) you might
       need a /sbin/mount.<type> helper program)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

需要安装下相关的软件包
yum -y install nfs-utils nfs-utils-lib

这时再尝试依然会出错

mount.nfs: rpc.statd is not running but is required for remote locking.
mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
mount.nfs: an incorrect mount option was specified

原因是rpcbind没启动
chkconfig –list看见是默认启动的,应该是刚装后没启动,手工启动下。
/etc/rc.d/init.d/rpcbind start
然后再
mount -t nfs 192.168.1.1:/nfs1 /mnt/nfs 就正常了

 

 

 

-------------2.2 挂载nfs


#service portmap start
#mount 192.168.1.216:/mnt /mnt
#mount -l


# ll /mnt/



#vim /etc/yum.repos.d/local.repo

[Server]
name=Server Directory
baseurl=file:///mnt/rhel6_64/Server
enabled=1
gpgcheck=0

 

 

-------------2.2 准备安装pysvn其它包

#yum search apr
#yum install apr-devel.x86_64

#yum search apr-util
#yum install apr-util-devel.x86_64

清除自带的subversion
#yum remove subversion*

rpm下载安装subversion subversion-devel

#cd /usr/local/shell/automation/
#rpm -ivh subversion-1.6.11-2.el6_1.4.x86_64.rpm
#rpm -ivh subversion-devel-1.6.11-2.el6_1.4.x86_64.rpm

 

 


======================= 3 安装 pysvn

    wget http://pysvn.barrys-emacs.org/source_kits/pysvn-1.7.6.tar.gz

    tar zxvf  pysvn-1.7.6.tar.gz
    cd pysvn-1.7.6/Source
    python setup.py configure
    make

    \cp -a pysvn /usr/lib/python2.6
    \cp -a pysvn /usr/lib64/python2.6
    \cp -a pysvn /usr/include/python2.6

mkdir -p /usr/local/lib/python2.6/pysvn
cp -a pysvn/* /usr/local/lib/python2.6/pysvn



测试:
#!/usr/bin/python
import pysvn
client=pysvn.Client()
client.update('/data/website/')


# chmod +x test.py
# python test.py



======================= 4 测试svnchanged_export.py 

 

 

wget http://svn-script.googlecode.com/svn/trunk/tools/svnchanged_export.py 


执行
# python svnchanged_export.py -r 7490:7495 --username zheng.dl --password 111111 http://192.168./trunk/06-程序源码/01-源码 /tmp/test/

 

 

 

====================== 5 应用实践

 

----------5.1 两次版本的最终效果是文件没有变化则无法导出该文件:

 

1 对比:手动导出sc 9107:9557 的变更 和 使用py自动导出的变更

 

2 使用BCompare.exe工具对比目录和文件,汇总统计对比检查

发现两个异常文件:


ResultController.php(发生了两次svn变更版本号:9209,9442)
9209 变更 :null -> echo "1111";exit;
9442 变更:echo "1111";exit; -> null

 

BUserDiscount.php(发生了两次svn变更版本号:9271,9552)
9271 变更:klcwebsite -> pkwebsite
9552 变更:pkwebsite -> klcwebsite

 

3 以ResultController.php为例子演示:部分文件没有发布成功的现象

ResultController.php(两次svn变更版本号:9209,9442)
9209 变更 :null -> echo "1111";exit;
9442 变更:echo "1111";exit; -> null

 

例如sc发布脚本执行 9107:9440,那么dev环境ResultController.php文件内容就变更为echo "1111";exit;
当发布脚本执行9107:9557,那么就无法导出ResultController.php(因为文件内容都是null所以没有变更),那么dev环境ResultController.php文件内容依旧为echo "1111";exit;

 

4 结论:

部分文件发布不成功的问题不是由于一次发布文件太多时会漏文件,而是两次版本的最终效果是文件没有变化则无法导出该文件。

 

5 修复

 

5.1api资料
http://pysvn.tigris.org/docs/pysvn_prog_ref.html#pysvn_client_diff_summarize

 

summary = \
diff_summarize( url_or_path1,
revision1=pysvn.Revision( opt_revision_kind.base ),
url_or_path2=url_or_path,
revision2=pysvn.Revision( opt_revision_kind.working ),
recurse=True,
ignore_ancestry=False,
depth=depth )

 

The function may report false positives if ignore_ancestry is False, since a file might have been modified between two revisions, but still have the same contents.
如果的ignore_ancestry是假的,两个版本之间,因为文件可能已被修改,但仍然有相同的内容,该函数可能会报告误报。

 

5.2修改py脚本测试


summary = client.diff_summarize(url, revision_min, url, revision_max)
为:
summary = client.diff_summarize(url, revision_min, url, revision_max, True, True)

测试发现修改了参数,问题依然存在。

 

5.3暂时无法通过发布脚本来解决此类问题。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics