自动打包之自动版本记录与打历史版本包

        接着上一次的 自动更新/打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,就找到了对应的版本号啦~

 

本来说要再写socket学习心得来着,一是最近没空,二是自己感觉还没学到位,先写个这个水一篇~  下次一定 2333333 

 

你可能感兴趣的:(自动打包之自动版本记录与打历史版本包)