svn 钩子( python版本 hook) commit后复制到webserver
来源:互联网 发布:cinema 4d r18 mac版 编辑:程序博客网 时间:2024/06/07 15:10
#!/usr/bin/python
#coding=utf-8
'''文件提交的时候如果注释里有一行是指定的ip 则复制到对应的远程服务器(只复制到单台) '''
import sys,os
serverip = ["228"]
serverConfig = {"traderii":{"path":"/usr/local/www/TraderII"},"crm":{"path":"/usr/local/www/crm"}}
serverFullIP = {"228":"192.168.1.228"}
REV = ''
PROJ = ''
PROJNAME = ''
def command_output(cmd):
" Capture a command's standard output. "
import commands
a,b = commands.getstatusoutput(cmd)
return b
def main():
"main job"
global REV,PROJ,PROJNAME
PROJ = sys.argv[1]
REV = sys.argv[2]
PROJNAME = PROJ[PROJ.rindex('/')+1:]
f.write("%s /n" % (REV))
f.write("%s /n" % (PROJ))
changed = command_output("svnlook changed -r %s %s" % (REV,PROJ))
loginfo = command_output("svnlook info -r %s %s" % (REV,PROJ))
chgfiles = getModifiedFiles(changed)
synFile(chgfiles,loginfo)
f.write("author: %s /n" % (loginfo))
f.write(changed)
def synFile(chgfiles,info):
'''上传文件'''
if (len(serverip) == 0):
return 0
if (PROJNAME not in serverConfig):
return 0
info = info.split("/n")
info = info[3:]
toupload = []
for i in info:
i = i.strip()
if (i in serverip):
toupload.append(i)
if (len(toupload) == 0):
return 0
uploadf = 0
for f in chgfiles:
act = chgfiles[f]
if ('U' == act or 'A' == act):
uploadf = folder = uploadFile(f)
if (uploadf):
uploadpath = serverConfig[PROJNAME]['path']
for server in toupload:
uploadip = serverFullIP[server]
cmd = "scp -r %s/* root@%s:%s" % (uploadf,uploadip,uploadpath)
command_output(cmd)
#print cmd
cmd = "rm -rf %s" % (uploadf)
command_output(cmd)
#print cmd
def uploadFile(file):
'''从svn导出 放置在临时文件夹'''
#print file
tmpfolder = "/root/svn/%s" % (REV)
tmpfile = file[file.rindex("/")+1:]
if (not os.path.isdir(tmpfolder)):
os.mkdir(tmpfolder)
tmpfile = "%s/%s" % (tmpfolder,tmpfile)
cmd = "svn export -r %s svn://127.0.0.1/%s/%s %s" % (REV,PROJNAME,file,tmpfile)
res = command_output(cmd)
datafolder = "/root/svnt/%s" % (REV)
desfolder = "%s/%s" % (datafolder,file[file.index("/")+1:file.rindex('/')])
desfile = "%s/%s" % (desfolder,file[file.rindex("/")+1:])
if (not os.path.isdir(desfolder)):
cmd = "mkdir -p %s" % (desfolder)
command_output(cmd)
cmd = "svn export -r %s svn://127.0.0.1/%s/%s %s" % (REV,PROJNAME,file,desfile)
command_output(cmd)
#cmd = "scp -r %s root@192.168.1.228:/root/tmp" % (tocopy_dir)
if (res):
return datafolder
else:
return false
def getModifiedFiles(logtxt):
'''修改被修改文件的动作'''
files = logtxt.split("/n")
ret = {}
for f in files:
act = f[0:1]
f = f[1:].strip()
ret[f] = act
return ret
if __name__ == "__main__":
#import sys
f=file('/usr/local/www/argv.txt','w')
r = main()
f.close()
sys.exit(r)
- svn 钩子( python版本 hook) commit后复制到webserver
- SVN Hook + Python实现commit后自动发送邮件
- SVN利用钩子中的post-commit同步版本库到网站目录
- SVN利用钩子中的post-commit同步版本库到网站目录
- SVN pre-commit hook
- SVN+HOOK -- 配置管理钩子
- subversion钩子svn hook
- svn添加钩子hook
- SVN钩子 之 pre-commit
- SVN configurable pre-commit hook
- 利用SVN的POST-COMMIT钩子自动更新
- Python 自动备份SVN版本库并复制到远程主机脚本
- Python 自动备份SVN版本库并复制到远程主机脚本
- VisualSVN开发SVN服务端的hook钩子
- python脚本实现git commit hooks钩子
- svn强制要求提交注释--pre-commit钩子
- 【转】svn强制要求提交注释--pre-commit钩子
- svn强制要求提交注释--pre-commit钩子
- std::auto_ptr 不能赋值 简析
- RPC与RMI的区别
- ZOJ 1914 Arctic Network (kruskal + prim )
- Varnish学习手札
- struts2.0+spring2.0+hibernate3.1多层模型整合完整过程 常见错误(转)
- svn 钩子( python版本 hook) commit后复制到webserver
- python 执行外部命令
- 韩语俗语
- CSS 学习简记(一)
- APACHE 搭配 SVN的安装手记
- 各浏览器的默认CSS
- 开发规范
- 常见的oracle保留字
- MIME 类型列表