======================= 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暂时无法通过发布脚本来解决此类问题。