接着上一次的 自动更新/打bundle上传/打包,这一次继续给工具升个级~ 加一个自动记录历史版本,以后可以直接打以前的包的功能。(上一篇博客传送门:https://blog.csdn.net/Patrick_Boom/article/details/106167382 )
因为项目比较大,内容比较杂,项目里会有很多的外链,资源代码来自不同的负责人,然后统一打包。
整体思路流程图如下:
import os
import json
import platform
import config_autoPackage
config_path = os.path.abspath('.') + '/version_config_json.txt'
def write_json_versionConfig(current_version, versions):
global config_path
v_lobby = versions[0]
v_lobby3D = versions[1]
v_share_assets = versions[2]
v_variety_store = versions[3]
v_streaming_channel = versions[4]
v_streaming_lobby = versions[5]
v_streaming_rainbow = versions[6]
v_streaming_sharedAssets = versions[7]
v_streaming_sharedStreamingAssets = versions[8]
if not os.path.exists(config_path) or os.path.getsize(config_path) == 0:
print("没有找到配置文件或者配置文件为空 重新生成一个吧 ... ")
f = open(config_path, mode='w')
dic = {current_version: [v_lobby, v_lobby3D, v_share_assets, v_variety_store, v_streaming_channel,
v_streaming_lobby, v_streaming_rainbow,
v_streaming_sharedAssets, v_streaming_sharedStreamingAssets]}
json_txt = json.dumps(dic)
f.write(json_txt)
f.close()
return
with open(config_path, mode='r') as f:
s = f.read()
json_obj = json.loads(s)
print("更改 %s 为: %s " % (current_version, [v_lobby, v_lobby3D, v_share_assets, v_variety_store,
v_streaming_channel, v_streaming_lobby, v_streaming_rainbow,
v_streaming_sharedAssets, v_streaming_sharedStreamingAssets]))
json_obj[current_version] = [v_lobby, v_lobby3D, v_share_assets, v_variety_store, v_streaming_channel,
v_streaming_lobby, v_streaming_rainbow,
v_streaming_sharedAssets, v_streaming_sharedStreamingAssets]
with open(config_path, mode='w') as ff:
content = json.dumps(json_obj)
ff.write(str(content))
def read_json_versionConfig(current_version):
if not os.path.exists(config_path) or os.path.getsize(config_path) == 0:
return -2
with open(config_path, mode='r') as f:
s = f.read()
json_obj = json.loads(s)
if current_version in dict(json_obj).keys():
return json_obj[current_version]
else:
return -1
def get_svn_last_version(p):
cmd = "cd / && cd %s && svn info " % p
r = __get_cmd_result(cmd)
for i in r:
if "Revision: " in i:
return int(i.replace('Revision: ', '').replace("\n", ''))
return -1
def get_version_list():
m_platform = platform.system()
if m_platform == 'Darwin':
pre_path = config_autoPackage.project_path_mac + "/Assets/"
else:
pre_path = config_autoPackage.project_path + "/Assets/"
v1 = get_svn_last_version(pre_path + "不告诉你")
v2 = get_svn_last_version(pre_path + "不告诉你")
v3 = get_svn_last_version(pre_path + "不告诉你")
v4 = get_svn_last_version(pre_path + "不告诉你")
v5 = get_svn_last_version(pre_path + "不告诉你")
v6 = get_svn_last_version(pre_path + "不告诉你")
v7 = get_svn_last_version(pre_path + "不告诉你")
v8 = get_svn_last_version(pre_path + "不告诉你")
v9 = get_svn_last_version(pre_path + "不告诉你")
if not config_autoPackage.version_lobby == -1:
v1 = config_autoPackage.version_lobby
if not config_autoPackage.version_lobby3D == -1:
v2 = config_autoPackage.version_lobby3D
if not config_autoPackage.version_share_assets == -1:
v3 = config_autoPackage.version_share_assets
if not config_autoPackage.version_variety_store == -1:
v4 = config_autoPackage.version_variety_store
if not config_autoPackage.version_streaming_channel == -1:
v5 = config_autoPackage.version_streaming_channel
if not config_autoPackage.version_streaming_lobby == -1:
v6 = config_autoPackage.version_streaming_lobby
if not config_autoPackage.version_streaming_rainbow == -1:
v7 = config_autoPackage.version_streaming_rainbow
if not config_autoPackage.version_streaming_sharedAssets == -1:
v8 = config_autoPackage.version_streaming_sharedAssets
if not config_autoPackage.version_streaming_sharedStreamingAssets == -1:
v9 = config_autoPackage.version_streaming_sharedStreamingAssets
print('获取版本号 :' + str([v1, v2, v3, v4, v5, v6, v7, v8, v9]))
return [v1, v2, v3, v4, v5, v6, v7, v8, v9]
def __get_cmd_result(cmd):
r = os.popen(cmd)
text = r.readlines()
r.close()
return text
if __name__ == '__main__':
# write_json_versionConfig('29.0.0', [101, 322, 3, 4, 5, 1, 5, 6, 1, 3])
# read_json_versionConfig('29.0.0')
# print(get_version_list())
print('真牛逼')
1. python的文件读写,open的使用:
mode = 'r' 为读 mode = 'w'为写,然后实际操作中呢,我需要先读再写,这个时候要一步一步来,不要用 'r+' 或者 'w+' 这种所谓的可读写的mode!!!
'r+'可读写会把新的json接在原来的后面,这样你两个json拼在一起肯定不对~
'w+'就更扯了,在open的这一瞬间就会把你的文件先清空喽!那我还读个瓜皮了?这个地方卡我好一会,一解析就报错,也不知道咋回事,最后在open后马上 getsize了一下这个文件,发现文件大小变成了0..... 这才恍然大悟.... 好坑!
2. 获取svn外链的最新版本号:
通过命令行操作svn并不能直接返回给你的Reversion,想通过命令行查看必须 “ svn info ”,但是会返回给你好多的信息!这时候就需要用python来解析文本来获取版本号了(刚才吐槽py,现在又吹,唉... 男人)
python执行命令行有两种方式:第一种 os.system(cmd),这样返回的是 0 或者 1 , 0代表执行成功没报错,否则代表命令行执行过程中出问题了; 第二种 os.popen(cmd),这样会把cmd执行过程中的所有的东西都返回给你。
这里我们当然就用第二种执行方式~ 然后再通过 readlines 读出每一行,再遍历是否有 reversion,就找到了对应的版本号啦~