之前写了一个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目录清理脚本" 涉及到的知识点主要集中在版本控制系统Subversion(简称SVN)的管理和清理操作上。SVN是一种广泛使用的版本控制系统,它允许开发者跟踪和控制源代码的变化,便于团队协作。在开发过程中,每...
在压缩包中,文件名为 "删除svn目录的注册表脚本.reg" 的文件,应该是包含了执行上述功能的具体注册表脚本。在使用前,用户应该谨慎,因为直接编辑或导入注册表可能会影响系统的稳定性。在导入之前,最好先备份...
压缩包中的"svn抢文件锁定工具"可能是一个脚本或应用程序,用于自动化这个过程。这类工具通常会监控指定的文件或目录,当检测到用户开始编辑时,立即执行`svn lock`命令,结束编辑时执行`svn unlock`。这减少了人为...
描述中提到的“简单的删除.svn文件的小程序”是一种自动化工具,可能是用某种编程语言(如Python、批处理脚本等)编写,它的主要功能是遍历项目文件夹,查找并移除所有.svn子目录,从而简化项目文件结构,方便进行...
7. **比较与合并**:比较不同版本间的差异,并进行合并操作。 `kill-svn-folders.bat`这个文件名暗示了它可能是用来删除或清理SVN相关文件夹的。在SVN操作中,有时我们可能需要清理不再需要的工作副本,或者移除被...
10. **scripts**:脚本目录,包含自动化脚本,如构建脚本、部署脚本等,可以提高工作效率,确保构建和部署的一致性。 以上是一个标准SVN目录结构的概述,实际项目中可能根据团队习惯和项目需求进行调整。理解并遵循...
SVN的核心功能是追踪文件和目录的更改,它允许用户回滚到过去的版本,查看历史记录,并进行分支和合并操作。这对于团队协作和项目管理至关重要。 2. **自动备份的重要性** 自动备份SVN仓库可以防止数据丢失,尤其...
在日常的版本控制工作中,Subversion(简称SVN)是一个非常重要的工具,它帮助开发者管理项目文件的版本,实现团队间的协同开发。然而,在使用SVN的过程中,有时可能会遇到一些问题,比如错误的提交或者需要清理不再...
4. **协同开发**: 当多个开发者同时修改数据库脚本时,SVN的合并功能可以帮助解决冲突,确保团队的同步工作。 5. **备份与恢复**: SVN仓库可以视为一种备份机制。如果需要恢复数据库到某个特定版本,只需回退相应的...
SVN的主要功能包括:追踪文件和目录的修改历史,合并不同人的更改,解决冲突,以及回滚到之前的版本。 在Java和PHP这两种编程语言中,使用svn进行项目共享和部署同样重要。Java是一种广泛应用的面向对象的编程语言...
描述中提到的“解压后根目录运行即可,方便好用”,意味着这是一个简单的批处理脚本(kill_SVN.bat),用户只需将其解压缩到目标文件夹,然后在该文件夹的根目录下运行这个脚本,就能自动扫描并删除所有.svn子目录。...
- 文件目录修改:描述中提到的“只要改下里面的文件目录就可以用了”,意味着你需要根据自己的SVN仓库实际路径调整脚本中的相关路径。例如,可能需要修改源代码库的位置(`SVN_REPO_PATH`)和备份目标目录(`BACKUP...
2. **SVN忽略文件**:`.svnignore`文件用于指定不应该被版本控制的文件,比如编译生成的类文件、IDE的工作空间文件等。 3. **分支与标签**:SVN支持分支和标签功能,分支用于开发新特性或修复,标签则用于标记特定...
SVN提供了一种方式来跟踪文件和目录的更改,方便团队成员之间的协同工作。当我们需要了解项目中文件的状态时,可以使用`svn status`命令,它会列出所有未提交、冲突或被修改的文件。而有时,为了更方便地分析这些...
这个批处理脚本首先检查当前目录是否存在`.svn`目录(SVN工作副本的标志),如果存在则执行`svn update`更新代码,否则执行`svn checkout`检出代码。然后,它通过`svn status`命令找出所有已修改但未提交的文件,并...
cvs2svn通过解析CVS的存储库,提取出所有文件和目录的变更历史,然后将这些信息重新构造为SVN仓库。它能够处理复杂的CVS分支和合并,同时支持多种数据格式的输出,包括直接导入SVN的格式。 **二、cvs2svn的安装与...
这份实例可能包括了创建转换脚本,执行cvs2svn命令,以及验证转换结果的完整流程。 7. **问题解决**:笔记中可能还涵盖了在转换过程中遇到的常见问题和解决方案,例如权限问题,文件编码问题,或者是版本库结构复杂...
将脚本文件解压到适当位置,编辑脚本以设置正确的路径和参数,如SVN仓库地址、备份存储位置等。 2. 测试与调试:在正式使用前,运行脚本进行测试,检查是否有任何错误或警告。确保备份和更新过程按预期工作。 3. ...
SVN,全称为Subversion,是一种版本控制系统,用于管理和跟踪文件和目录的变更。这篇教程主要涵盖了SVN的配置、基本客户端操作以及一个实践案例,适用于初学者掌握SVN的基本用法。 首先,你需要下载SVN服务器程序和...
Merge(合并)处理多个人同时修改同一文件的情况。 此外,SVN还支持分支和标签功能。分支允许团队成员在不影响主开发线的情况下进行独立的工作,而标签则用于创建某个特定时间点的项目快照,通常用于发布里程碑或...