`
rikugun
  • 浏览: 346459 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

2SVN目录间合并文件脚本

阅读更多
之前写了一个SVN提交的脚本, 现在做一个脚本,是把开发环境的代码,合并到要测试的SVN目录中

#!/usr/bin/env python
#coding:utf-8
"""
Author:	rikugun
Site: http://rikugun.iteye.com/

拷贝文件,发布到正式环境TEST_CRM

"""
import optparse
import os
import re
import subprocess
				
def main():
	"""主函数"""
	def getInput(msg):
		"""获取用户输入,默认是NO"""
		return opts.quite or raw_input(msg) not in ['n','no']

	def sysexec(cmd):
		"""执行命令幷返回结果"""
		msg = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE).communicate()
		#[0].decode('utf-8')
		if msg[1] is not None:
			print u'=============== 错误信息====================='
			print msg[1].decode('utf-8')
		if opts.debug:
			print u'================执行命令==================='
			print cmd
			print u'================我是分割线==================='
			print msg[0].decode('utf-8')
			print u'================命令完成==================='
		return msg
	opt = optparse.OptionParser("dsvn [-m comments] [-L listfile] filepath [other files]")
	opt.add_option("-m","--comments",help=u"提交的注释",default="commit to compile")
	opt.add_option("-L","--listfile",help=u"提交的文件列表")
	opt.add_option("-c","--usecopy",action="store_true",help=u"使用拷贝而不是合并")
	opt.add_option("-M","--mergetool",help=u"指定合并工具")
	opt.add_option("-q","--quite",action="store_true",help=u"安静模式,所有提示都选择Y")
	opt.add_option("-d","--debug",action="store_true",help=u"调试模式")
	opts,files = opt.parse_args()
	if len(files) == 0 and opts.listfile is None:
		print u'请输入要提交文件,或者文件列表'
		print opt.print_usage()
		print __doc__
		exit(2)
	if not files and opts.listfile:
		files = [line for line in open(opts.listfile,'r').readlines() if not line.startswith('#')]	
	#获取环境变量
	# 开发环境
	dev_dir =os.getenv('CRM')
	# 本地编译目录
	test_dir = os.getenv('TEST_CRM')+os.sep+"TEST_"
	#源文件路径
	src_file_list =[]
	#目标文件路径
	dst_file_list = []
	
	add_dst_file_list = []
	
	reg = re.compile(dev_dir+os.sep+'(.+)$')
	
	#设置合并工具
	if opts.usecopy:
		if os.name =='nt':
			merge_cmd = 'copy /Y'
		else:	
			merge_cmd='cp -arf'
	else:		
		if opts.mergetool is not None:
			merge_cmd = opts.mergetool
		else:
			mergetool = "opendiff"	
	#svn 提交命令
	svn_cmd = ['svn ci -m "%s"' % opts.comments,]
		
	#过滤文件名 如 CRM_TRANS/src/share/EssErrorTrans.txt	
	fileset = set([reg.match(os.path.realpath(os.getcwd()+os.sep+it)).group(1).strip() for it in files])	
	file_list = '\n'.join(fileset)
			
	# 传输文件,提交到TEST_CRM
	#if	opts.quite or raw_input('commit such files [\n%s\n] to TEST SVN ? (y)es/no :' % file_list) not in ['n','no'] :
	if	getInput('commit such files [\n%s\n] to TEST SVN ? (y)es/no :' % file_list):
		for	x in fileset:
			src_path = dev_dir+os.sep+x
			dst_path = test_dir+x
			src_file_list.append(src_path)
			dst_file_list.append(dst_path)
			sysexec(' '.join([merge_cmd,src_path,dst_path]))
			print dst_path
			#过滤新加的文件,需要额外执行svn add命令
			if not os.path.exists(dst_path):
				add_dst_file_list.append(dst_path)
				
		sysexec(' '.join(['svn up --force']+dst_file_list))
		if len(add_dst_file_list):
			sysexec(' '.join(['svn add']+add_dst_file_list))
		sysexec(' '.join(svn_cmd+dst_file_list))		

	print u'脚本执行成功'		
	
			
if __name__ == "__main__":
	main()
	
分享到:
评论

相关推荐

    SVN脚本手册

    SVN全备份或增量备份 客户端自动更新最新版本 版本库迁移(合并)的实现 自动生成每日提交统计文件 等等

    SVN使用手册中文版快速入门

    1. 介绍 Subversion是什么? Subversion的历史 Subversion的特性 Subversion的架构 安装Subversion Subversion的组件 快速入门 2. 基本概念 ...8.4. 典型的.svn/entries文件内容 8.5. 有效地池使用

    SVN使用手册中文版.chm

    目录 译者序 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书组织结构 Subversion 1.1的新特性 ...来自Brian W....来自C....2. 基本概念 ...文件共享的问题 ...8.4. 典型的.svn/entries文件内容 8.5. 有效地池使用

    SVN操作手册中文版网页格式

    目录 译者序 前言 序言 读者 怎样阅读本书 本书约定 排版习惯 图标 本书组织结构 Subversion 1.1的新特性,svn客户端和linux下命令行。 目录 1. 简介 1.1. 什么是 TortoiseSVN? 1.2. TortoiseSVN 的历史 1.3. ...

    Ubuntu自动编译Android版本并提交SVN版本

    H.) 自劢实现 SVN 上最新代码的下载不合并。 I.) 自劢编译 user 不 eng 版本。 J.) 自劢创建需要提交的版本文件夹(V*.*_eng(user))。 K.) 自劢拷贝编译生成的镜像文件到版本文件夹 L.) 自劢压缩版本文件夹并实现...

    TortoiseSVN和TortoiseMerge的中文帮助文档(chm格式)

    4.20.3. 合并两个不同的目录树 4.20.4. 合并选项 4.20.5. 预览合并结果 4.20.6. 合并跟踪 4.20.7. 子合并期间处理冲突 4.20.8. 合并已完成的分支 4.20.9. 特性分支维护 4.21. 锁 4.21.1. 锁定在Subverion中是如何...

    在Eclipse中使用SVN与CVS代码管理工具管理项目

    但是 SVN 通过 SVN ROOT 目录下的脚本,提供了相应功能扩充的接口,不但可以完成精细的权限控制,还能完成更加个性化的功能。总体成本:★★★★★SVN 是开发源码软件,无需支付购买费用。技术支持:★★★同样因为 ...

    GIT安装文件取代SVN和CVS

    但是随着开发的深入,Git 的正常使用都由一些友好的脚本命令来执行,使 Git 变得非常好 用,即使是用来管理我们自己的开发项目,Git 都是一个友好,有力的工具。现在,越来越多的著 名项目采用 Git 来管理项目开发,...

    puppet-svn-hooks:用于处理 puppet 代码库的 svn 钩子脚本

    傀儡-svn-钩子Subversion 钩子脚本处理木偶代码存储库。许可证:麻省理工学院版权所有 (c) 2012 杰森汉考克 特此授予任何人免费获得本软件副本和相关文档文件(“软件”)的许可,不受限制地处理本软件,包括但不...

    subversion-TortoiseSVN-使用手册(CHM+HTML,中英完整版)

    5.10. 添加新文件和目录 5.11. 忽略文件和目录 5.11.1. 忽略(Ignore)列表中的文件簇 5.12. 删除、重命名和移动 5.12.1. 仅在单一实例中重命名文件 5.12.2. 修复文件改名 5.13. 撤消更改 5.14. 清除 5.15. 项目设置 ...

    ubuntu JAVA开发环境安装 part2

    整个脚本加安装文件共113MB共分6部分(每次只能上传20MB)此为 part2 ubuntu下安装JAVA开发环境其实还是比较简单的,我们就以安装常用的jdk、eclipse、tomcat、svn client(找到一个可以和windows中的小乌龟类似的...

    oXygen XML Editor(XML脚本编辑软件)

    它提供了目录和文件比较,6档差异算法。oXygen通过包括Subversion客户端,使内容创作者之间更容易文档共享。svn客户端,您可以浏览库,检查变化,提交改变,更新你的工作副本并检查修订历史。oXygen支持导入数据库...

    ubuntu JAVA开发环境安装 part1

    整个脚本加安装文件共113MB共分6部分(每次只能上传20MB)此为 part1 ubuntu下安装JAVA开发环境其实还是比较简单的,我们就以安装常用的jdk、eclipse、tomcat、svn client(找到一个可以和windows中的小乌龟类似的...

    ubuntu JAVA开发环境安装 part5

    整个脚本加安装文件共113MB共分6部分(每次只能上传20MB)此为 part5 ubuntu下安装JAVA开发环境其实还是比较简单的,我们就以安装常用的jdk、eclipse、tomcat、svn client(找到一个可以和windows中的小乌龟类似的...

    ubuntu JAVA开发环境安装 part4

    整个脚本加安装文件共113MB共分6部分(每次只能上传20MB)此为 part4 ubuntu下安装JAVA开发环境其实还是比较简单的,我们就以安装常用的jdk、eclipse、tomcat、svn client(找到一个可以和windows中的小乌龟类似的...

    ubuntu JAVA开发环境安装 part6

    整个脚本加安装文件共113MB共分6部分(每次只能上传20MB)此为 part6 ubuntu下安装JAVA开发环境其实还是比较简单的,我们就以安装常用的jdk、eclipse、tomcat、svn client(找到一个可以和windows中的小乌龟类似的...

    ubuntu JAVA开发环境安装 part3

    整个脚本加安装文件共113MB共分6部分(每次只能上传20MB)此为 part3 ubuntu下安装JAVA开发环境其实还是比较简单的,我们就以安装常用的jdk、eclipse、tomcat、svn client(找到一个可以和windows中的小乌龟类似的...

    zsh-vcs-prompt:此脚本是用于 zsh 提示的可自定义 vcs (gitsvnhg) 信息

    zsh提示,显示有关当前 vcs(git/svn/hg) 存储库的信息。 特别是分支名称、与远程分支的区别、暂存、更改的文件数量等。 (来自这个的原始想法)。 截屏 特征 显示各种 vcs 状态。 显示 vcs 操作(merge、rebase、...

    Git Community Book(中文版)

    Git目录 与 工作目录 Git索引 2. 第一步 安装Git 安装与初始化 3. 基本用法 获得一个Git仓库 正常的工作流程 分支与合并@基础 查看历史 -Git日志 比较提交 - Git Diff 分布式的工作流程 Git标签 4. 中级技能 ...

    matlab代码替换-EASDIF_SDIF:SourceForgeSDIF项目的EASDIF_SDIF目录的git镜像https://sou

    合并是使用git根目录中的merge_subversion_changes.sh脚本执行的,该脚本在子版本库中包含外部的所有子目录中使用.revision条目来跟踪版本。 版权所有(C)Ircam 2002-2018 以下是Easdif项目的原始自述文件: 介绍 ...

Global site tag (gtag.js) - Google Analytics