最近由于单位上一个工程,由于参与者来源众多,且软件经验都不足,而且由于硬件也在不断修改,结果弄得版本极度混乱,已经到不能忍受的地步了。于是只得寻找一个版本管理工具。经过一番搜索,图方便随大流的选择了VisualSVN Server和TortoiseSVN。经过几天的学习和熟悉操作后,我觉得我再也离不开版本控制了^o^。
下一步当然是把它装到单位里推广了,理所当然的我也要先负起管理员的责任,于是就要好好研究一下服务器端的设置。第一步当然是学习钩子函数了,不过文档和帮助里的钩子函数例子都是在Unix和Linux下的,在Windows下面就没介绍了。经过几天的搜索,发现其实原来Windows下面的钩子脚本就是一个可执行的文件,可以是.bat,.cmd或.exe,.com,只要按照SVN的钩子函数的命名规范命名就可以了。
- d:/pre-lock.py %1 %2 %3
- exit errorlevel
- #coding=gbk
- import sys
- count=0
- f=file(r'd:/argv.txt','w')
- for argument in sys.argv:
- print "Argument %d is %s"%(count,argument)
- f.write("Argument %d is: %s/n"%(count,argument))
- count+=1
- f.close()
- sys.stderr.write('就不让你锁!') #前面的都可以不看,关键是后面两行
- exit(1) #返回1,表明阻止
这个脚本把参数打印了出来,并存到了d:/argv.txt文件里,懒得查资料的话,你可以用这个脚本去看每个钩子的调用参数。好了,测试一下,找个文件获取一下锁定,服务器返回了如下的信息:
命令 锁定
错误 Lock blocked by pre-lock hook (exit code 1) with output:
错误 就不让你锁!
完成!
锁定失败了。
好了,将最后的exit(1)改成exit(0),再试试,成功锁定了。不过也没有返回'就不让你锁!'这个提示。
用Python写SVN的钩子脚本就这么简单,接下来的工作就是充分发挥你的编程技巧和想象力了。当然,还要用好SVN提供的强大的管理软件,比如 svnlook , svnadmin 等。
最后略加说明一下任何在Python里面调用控制台程序并获得输出,这在使用Python进行操作的时候很重要。一种是使用os.popen,如:
import os
p=os.popen('dir d://*.*') #以dir指令来测试
print p.read()
另外一种方式是使用subprocess.Popen,比如:
import subprocess as sub
p=sub.Popen(['dir','d://*.*'],shell=True,stdout=sub.PIPE,stderr=sub.PIPE)
out=p.communicate()[0]
print out
第二种方法看起来要麻烦些,不过我觉得功能要灵活些。