`
rikugun
  • 浏览: 351015 次
  • 性别: 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目录清理脚本" 涉及到的知识点主要集中在版本控制系统Subversion(简称SVN)的管理和清理操作上。SVN是一种广泛使用的版本控制系统,它允许开发者跟踪和控制源代码的变化,便于团队协作。在开发过程中,每...

    删除svn目录的注册表脚本

    在压缩包中,文件名为 "删除svn目录的注册表脚本.reg" 的文件,应该是包含了执行上述功能的具体注册表脚本。在使用前,用户应该谨慎,因为直接编辑或导入注册表可能会影响系统的稳定性。在导入之前,最好先备份...

    svn 自动 lock 自动锁

    压缩包中的"svn抢文件锁定工具"可能是一个脚本或应用程序,用于自动化这个过程。这类工具通常会监控指定的文件或目录,当检测到用户开始编辑时,立即执行`svn lock`命令,结束编辑时执行`svn unlock`。这减少了人为...

    删除项目中的SVN目录

    描述中提到的“简单的删除.svn文件的小程序”是一种自动化工具,可能是用某种编程语言(如Python、批处理脚本等)编写,它的主要功能是遍历项目文件夹,查找并移除所有.svn子目录,从而简化项目文件结构,方便进行...

    一个很好用的SVN脚本

    7. **比较与合并**:比较不同版本间的差异,并进行合并操作。 `kill-svn-folders.bat`这个文件名暗示了它可能是用来删除或清理SVN相关文件夹的。在SVN操作中,有时我们可能需要清理不再需要的工作副本,或者移除被...

    常用项目SVN目录结构

    10. **scripts**:脚本目录,包含自动化脚本,如构建脚本、部署脚本等,可以提高工作效率,确保构建和部署的一致性。 以上是一个标准SVN目录结构的概述,实际项目中可能根据团队习惯和项目需求进行调整。理解并遵循...

    SVN(windows平台)自动备份脚本

    SVN的核心功能是追踪文件和目录的更改,它允许用户回滚到过去的版本,查看历史记录,并进行分支和合并操作。这对于团队协作和项目管理至关重要。 2. **自动备份的重要性** 自动备份SVN仓库可以防止数据丢失,尤其...

    清除文件中的SVN文件

    在日常的版本控制工作中,Subversion(简称SVN)是一个非常重要的工具,它帮助开发者管理项目文件的版本,实现团队间的协同开发。然而,在使用SVN的过程中,有时可能会遇到一些问题,比如错误的提交或者需要清理不再...

    svn安装文件及步骤

    4. **协同开发**: 当多个开发者同时修改数据库脚本时,SVN的合并功能可以帮助解决冲突,确保团队的同步工作。 5. **备份与恢复**: SVN仓库可以视为一种备份机制。如果需要恢复数据库到某个特定版本,只需回退相应的...

    svn项目共享部署文件

    SVN的主要功能包括:追踪文件和目录的修改历史,合并不同人的更改,解决冲突,以及回滚到之前的版本。 在Java和PHP这两种编程语言中,使用svn进行项目共享和部署同样重要。Java是一种广泛应用的面向对象的编程语言...

    清除.svn残余文件工具

    描述中提到的“解压后根目录运行即可,方便好用”,意味着这是一个简单的批处理脚本(kill_SVN.bat),用户只需将其解压缩到目标文件夹,然后在该文件夹的根目录下运行这个脚本,就能自动扫描并删除所有.svn子目录。...

    SVN备份脚本.rar

    - 文件目录修改:描述中提到的“只要改下里面的文件目录就可以用了”,意味着你需要根据自己的SVN仓库实际路径调整脚本中的相关路径。例如,可能需要修改源代码库的位置(`SVN_REPO_PATH`)和备份目标目录(`BACKUP...

    svn-doc文件夹结构.rar

    2. **SVN忽略文件**:`.svnignore`文件用于指定不应该被版本控制的文件,比如编译生成的类文件、IDE的工作空间文件等。 3. **分支与标签**:SVN支持分支和标签功能,分支用于开发新特性或修复,标签则用于标记特定...

    用脚本解析一个SVN STATUS日志全解

    SVN提供了一种方式来跟踪文件和目录的更改,方便团队成员之间的协同工作。当我们需要了解项目中文件的状态时,可以使用`svn status`命令,它会列出所有未提交、冲突或被修改的文件。而有时,为了更方便地分析这些...

    批处理SVN文件

    这个批处理脚本首先检查当前目录是否存在`.svn`目录(SVN工作副本的标志),如果存在则执行`svn update`更新代码,否则执行`svn checkout`检出代码。然后,它通过`svn status`命令找出所有已修改但未提交的文件,并...

    将cvs转换为svn库的工具cvs2svn

    cvs2svn通过解析CVS的存储库,提取出所有文件和目录的变更历史,然后将这些信息重新构造为SVN仓库。它能够处理复杂的CVS分支和合并,同时支持多种数据格式的输出,包括直接导入SVN的格式。 **二、cvs2svn的安装与...

    我的cvs2svn笔记

    这份实例可能包括了创建转换脚本,执行cvs2svn命令,以及验证转换结果的完整流程。 7. **问题解决**:笔记中可能还涵盖了在转换过程中遇到的常见问题和解决方案,例如权限问题,文件编码问题,或者是版本库结构复杂...

    svn自动备份与自动更新脚本附说明书一份

    将脚本文件解压到适当位置,编辑脚本以设置正确的路径和参数,如SVN仓库地址、备份存储位置等。 2. 测试与调试:在正式使用前,运行脚本进行测试,检查是否有任何错误或警告。确保备份和更新过程按预期工作。 3. ...

    svn教程 文件类型:.Doc

    SVN,全称为Subversion,是一种版本控制系统,用于管理和跟踪文件和目录的变更。这篇教程主要涵盖了SVN的配置、基本客户端操作以及一个实践案例,适用于初学者掌握SVN的基本用法。 首先,你需要下载SVN服务器程序和...

    SVN安装文件及SVN中文补丁

    Merge(合并)处理多个人同时修改同一文件的情况。 此外,SVN还支持分支和标签功能。分支允许团队成员在不影响主开发线的情况下进行独立的工作,而标签则用于创建某个特定时间点的项目快照,通常用于发布里程碑或...

Global site tag (gtag.js) - Google Analytics