python svn库_python实现svn新老库迁移

1 #!/usr/bin/env python

2 #coding=utf-8

3

4 #启动环境:linux,安装了python,svn客户端,并且具备python部分依赖包,xlrd,shutil,如果没有网上搜索安装

5 #启动方式:将文件MvSvnLibToNew.py和MvSvnLibToNew.xls放到机器的某个目录

6 #然后nohup python MvSvnLibToNew.py type > 1.log& 启动,type=0-只检测配置,不上传,type=1-既检测配置,又上传

7 #配置文件MvSvnLibToNew.xls,有7列配置项,分别为

8

9 #配置文件参数说明如下

10 #old_url:老库的待迁移的svn地址

11 #old_local_path:下载到本地的目录

12 #old_username:老库的svn用户名

13 #old_password:老库的svn密码

14 #new_url:新库的上传路径

15 #new_username:新库的svn用户名

16 #new_password:新库的svn密码

17

18 #有如下检测功能

19 #检测old_url是否存在,用户名密码是否正确

20 #检测new_url是否存在,用户名密码是否正确

21 #检测new_url路径配置是否跟old_new的子目录一样

22

23 importos24 importxlrd25 importsys26 importshutil27

28 #python 3.8不需要

29 #reload(sys)

30 #sys.setdefaultencoding('utf-8')

31

32 defexecCmd(cmd):33 r =os.popen(cmd)34 text =r.read()35 r.close()36 returntext37

38 #checkout文件到本地

39 defcheckOutOldLib(old_url, old_local_path, old_username, old_password):40 command_str = "svn co" + old_url + " " + old_local_path + "--username" + old_username + "--password" + old_password + "--non-interactive"

41 print(command_str)42 text =execCmd(command_str)43 print(text)44

45 #判断远程目录是否存在

46 defjudgeRemoteDirExist(old_url, old_username, old_password, new_url, new_username, new_password):47 #判断老库是否存在

48 command_str = "svn ls" + old_url + "--username" + old_username + "--password" +old_password49 print(command_str)50 text =execCmd(command_str)51 #print(text)

52 if len(text) ==0 :53 print("ERROR:old_url[%s]不存在!" %(old_url))54 return(False)55

56 #首先判断新老连接配置最后的目录是否,比如old:xxxxx/develop,new:yyyyyy/develop,则会上传失败

57 listDataOld = old_url.split("/")58 listDataNew = new_url.split("/")59 #如果配置一样,则需要检测新库目录是否存在

60 if listDataOld[len(listDataOld)-1] == listDataNew[len(listDataNew)-1] :61 print("ERROR old_url[%s] 和 new_url[%s] 子目录配置一样,配置错误,请重新配置!" %(old_url, new_url))62 return(False)63 else:64 command_str = "svn ls" + new_url + "--username" + new_username + "--password" +new_password65 print(command_str)66 text =execCmd(command_str)67 #print(text)

68 if len(text) ==0 :69 return(True)70

71 #检查目录是否存在

72 #print(listDataOld[len(listDataOld)-1])

73 nPos = text.find(listDataOld[len(listDataOld)-1])74 #print(nPos)

75 #如果存在

76 if nPos >=0 :77 print("ERROR new_url: [%s] 已存在 [%s],导入失败,请确保新库导入为新的空目录!" % (new_url, listDataOld[len(listDataOld)-1]))78 return(False)79 else:80 return(True)81

82 #全量检测

83 defallCheckConfig(sheetobj):84 iSuccess =085 iFailed =086 iBool =True87 nrows =sheetobj.nrows88 ncols =sheetobj.ncols89 print("*********************************************************************************************")90 #先做一个全量检测

91 for i in range(1, nrows):92 for j inrange(ncols):93 if j ==0:94 old_url =sheetobj.row_values(i)[j]95 print("old_url: %s" %(sheetobj.row_values(i)[j]))96 elif j == 1:97 old_local_path =sheetobj.row_values(i)[j]98 print("old_local_path: %s" %(sheetobj.row_values(i)[j]))99 elif j == 2:100 old_username =sheetobj.row_values(i)[j]101 print("old_username: %s" %(sheetobj.row_values(i)[j]))102 elif j == 3:103 old_password =sheetobj.row_values(i)[j]104 print("old_password: %s" %(sheetobj.row_values(i)[j]))105 elif j == 4:106 new_url =sheetobj.row_values(i)[j]107 print("new_url: %s" %(sheetobj.row_values(i)[j]))108 elif j == 5:109 new_username =sheetobj.row_values(i)[j]110 print("new_username: %s" %(sheetobj.row_values(i)[j]))111 elif j == 6:112 new_password =sheetobj.row_values(i)[j]113 print("new_password: %s" %(sheetobj.row_values(i)[j]))114 print(" ")115 listData = old_url.split("/")116 old_local_path = old_local_path + "/" + listData[len(listData)-1]117

118 if judgeRemoteDirExist(old_url, old_username, old_password, new_url, new_username, new_password) ==False :119 print("配置异常!")120 iFailed += 1

121 iBool =False122 else:123 print("配置正常!")124 iSuccess += 1

125 print("*********************************************************************************************")126

127 print("总共检测%s个,其中配置正常%s个,配置异常%s个" % (nrows-1, iSuccess, iFailed))128 print("*********************************************************************************************")129

130 return(iBool)131

132 #全量导入新库

133 defallImportSvn(sheetobj):134 nrows =sheetobj.nrows135 ncols =sheetobj.ncols136

137 #全量导入

138 for i in range(1, nrows):139 for j inrange(ncols):140 if j ==0:141 old_url =sheetobj.row_values(i)[j]142 print("old_url: %s" %(sheetobj.row_values(i)[j]))143 elif j == 1:144 old_local_path =sheetobj.row_values(i)[j]145 print("old_local_path: %s" %(sheetobj.row_values(i)[j]))146 elif j == 2:147 old_username =sheetobj.row_values(i)[j]148 print("old_username: %s" %(sheetobj.row_values(i)[j]))149 elif j == 3:150 old_password =sheetobj.row_values(i)[j]151 print("old_password: %s" %(sheetobj.row_values(i)[j]))152 elif j == 4:153 new_url =sheetobj.row_values(i)[j]154 print("new_url: %s" %(sheetobj.row_values(i)[j]))155 elif j == 5:156 new_username =sheetobj.row_values(i)[j]157 print("new_username: %s" %(sheetobj.row_values(i)[j]))158 elif j == 6:159 new_password =sheetobj.row_values(i)[j]160 print("new_password: %s" %(sheetobj.row_values(i)[j]))161 listData = old_url.split("/")162 old_local_path = old_local_path + "/" + listData[len(listData)-1]163

164 if judgeRemoteDirExist(old_url, old_username, old_password, new_url, new_username, new_password) ==True :165 new_url = new_url + "/" + listData[len(listData)-1]166 checkOutOldLib(old_url, old_local_path, old_username, old_password)167 importNewLib(new_url, old_local_path, new_username, new_password)168 shutil.rmtree(old_local_path, ignore_errors=True)169 print("*********************************************************************************************")170

171

172 #上传本地文件到新库

173 defimportNewLib(new_url, old_local_path, new_username, new_password):174 command_str = "svn import" + old_local_path + " " + new_url + "-m 老库迁移至新库 --username" + new_username + "--password" +new_password175 print(command_str)176 text =execCmd(command_str)177 print(text)178

179 #读取配置的xls配置文件

180 defreadExcelData(excel_path):181 bookobj = xlrd.open_workbook(excel_path,encoding_override="utf-8")182 sheetobj =bookobj.sheet_by_index(0)183 returnsheetobj184

185

186 if __name__ == "__main__":187 excel_path = "./MvSvnLibToNew.xls"

188 sheetobj =readExcelData(excel_path)189

190 if len(sys.argv) != 2:191 print("start: \tpython MvSvnLibToNew.py type")192 print("param:")193 print("\ttype:")194 print("\t0-只检测配置,不上传")195 print("\t1-既检测配置,又上传")196 exit(1)197

198

199 #如果带了参数,type=0,只检测,不上传,type为其他,既检测又上传

200 #如果不带参数,既检测又上传

201 if len(sys.argv) == 2:202 type = sys.argv[1]203 #只检测,不上传

204 if type == '0':205 if allCheckConfig(sheetobj) ==False :206 exit(1)207 exit(1)208 elif type == '1':209 if allCheckConfig(sheetobj) ==False :210 exit(1)211 allImportSvn(sheetobj)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值