1、xml文件格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<project name="项目名称">
<!-- module 1:apk_upload_path必须在第一个子节点,branch代码覆盖main代码 -->
<module name="模块名称">
<apk_upload_path name="关键字">该模块apk上传到svn服务器的路径</apk_upload_path>
<main name="主分支代码关键字">主分支代码svn路径</main>
<branch name="子分支代码关键字">(如果存在)子分支代码svn路径</branch>
</module>
<!-- module 2 :apk_upload_path必须在第一个子节点,branch代码覆盖main代码 -->
<module name="另一个模块名称">
<apk_upload_path name="关键字">该模块apk上传到svn服务器的路径</apk_upload_path>
<main name="主分支代码关键字">主分支代码svn路径</main>
<branch name="子分支代码关键字">(如果存在)子分支代码svn路径</branch>
</module>
</project>
2、直接上代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-import os
import sys
from xml.etree import ElementTree as ET
parent_path = "https://XX.XX.XX.XX:8443/svn/XXXX/JellyBean/BuildConfig/projects"
svn_username = "zhangm10129990"
svn_password = "zte.123456"
def print_node(node):
'''打印结点基本信息'''
print "=============================================="
print "node.attrib:%s" % node.attrib
print "node.tag:%s" % node.tag
print "node.text:%s" % node.text
def load_prj_file(prj_name) :
global project
prj_file = 'projects/' + prj_name + '.xml'
#prj_file = file_path + "/" + prj_name + '.xml'
if os.path.isfile(prj_file):
try:
project = ET.parse(prj_file)
return True
except:
print "error: cannot load project file %s.xml" %prj_name
return False
else:
return False
def generate_shell_file(lines, modulename):
file_operation = True
filename = "projects/" + sys.argv[1] + "_" + sys.argv[2] + ".sh"
#filename = sys.argv[3] + "/" + sys.argv[1] + "_" + sys.argv[2] + ".sh"
sh_script = open(filename, 'w') #打开文件并清空
try :
sh_script.write("#!/bin/bash\n")
sh_script.write("\n")
sh_script.writelines(lines)
sh_script.write("\n")
sh_script.write("chmod 777 -R " + sys.argv[2] + "\n")
#sh_script.write("cd " + modulename + "\n")
#sh_script.write("mm" + "\n")
except :
print 'Error to Write to file %s' % filename
file_operation = False
pass
finally :
sh_script.close()
return file_operation
# @@@@@@@@ start run @@@@@@@@@@@@@@
if __name__=='__main__':
if len(sys.argv) != 2:
if load_prj_file(sys.argv[1]):
rootval = project.getroot()
#print_node(rootval)
#待生成脚本的代码拷贝行
lines_to_write = []
is_param_right = False
is_xml_right = False
for child in rootval.getchildren():
module_name = child.get('name')
#print "#################### %s ###################" %module_name
if module_name == sys.argv[2]:
is_param_right = True
#代码包含几个目录覆盖关系,至少一个
number_of_code_layer = len(child.getchildren())
#print number_of_code_layer
if number_of_code_layer >= 2:
lines_to_write.append("rm -fr " + module_name + "\n")
lines_to_write.append("rm -fr " + module_name + "[1-9]" + "\n")
lines_to_write.append("mkdir -m 777 " + module_name + "\n")
index = 0
for code_branch in child.getchildren():
if index == 0 : # apk upload path
index += 1
continue
#print_node(code_branch)
layer_path = code_branch.text
#print "layer_path : %s" % layer_path
if not layer_path is None :
if index == 1 : #主分支路径为非空
is_xml_right = True
dest_path = module_name + str(index)
#lines_to_write.append("svn co --username " + svn_username + " --password " + " zte.123456 " +
# layer_path + " " + dest_path + "\n")
lines_to_write.append("svn co " + layer_path + " " + dest_path + "\n")
index += 1
lines_to_write.append("cp -fr " + dest_path + "/* " + module_name + "\n")
#lines_to_write.append("rm -fr " + dest_path + "\n")
#print lines_to_write
if is_param_right == False :
print 2 #2表示提供的模块名参数不正确
else :
if is_xml_right == False :
print 4 #表示代码提供的xml路径值有为空的可能
else :
if generate_shell_file(lines_to_write, sys.argv[2]) == False :
print 3 #表示生成shell文件失败
else :
print 0 #表示运行正常
else:
print 1 #表示解析xml文件失败
else:
print -1 #-1表示用户输入的参数个数不对