using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; using System.Linq; using GameEditor.Core; using GameEditor.GameEditor.PlayerBuilder; using GameEditor.Util; using GameLogic; using System.Diagnostics; using ResUpdate; using System.Threading; using System.Net; using System; namespace GameEditor.FrameTool { public static class HotFixTool { //重新下载外部.unity3d文件 public static void RegetExternalFile(string resUrl, string outPath, string fileName) { //获取下载文件链接 string url = resUrl + "/" + fileName; string dlPath = outPath + "/" + fileName; // 文件夹没有就创建 if (!Directory.Exists(outPath)) { Directory.CreateDirectory(outPath); } //获取文件存放路径 if (File.Exists(dlPath)) { File.Delete(dlPath); } // 设置参数 UnityEngine.Debug.Log(url); ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; //发送请求并获取相应回应数据 HttpWebResponse response = request.GetResponse() as HttpWebResponse; //直到request.GetResponse()程序才开始向目标网页发送Post请求 Stream responseStream = response.GetResponseStream(); //创建本地文件写入流 Stream stream = new FileStream(dlPath, FileMode.Create, FileAccess.Write); byte[] bArr = new byte[1024]; int size = responseStream.Read(bArr, 0, (int)bArr.Length); while (size > 0) { stream.Write(bArr, 0, size); size = responseStream.Read(bArr, 0, (int)bArr.Length); } stream.Close(); responseStream.Close(); } //遍历内部unity3d数据 public static List GetFilesList(string filesPath) { UnityEngine.AssetBundle bundle = UnityEngine.AssetBundle.LoadFromFile(filesPath + UpdateConfigs.FILES); ResourceFiles files = bundle.LoadAsset("game"); bundle.Unload(true); return files.files; } // 获取差异文件list public static List GetDiffList(List inDataList, List exDataList) { List diffList = new List(); Dictionary exDataDic = new Dictionary(); for (int i = 0; i < exDataList.Count; i++) { if (!exDataDic.ContainsKey(exDataList[i].fileName)) { exDataDic.Add(exDataList[i].fileName, exDataList[i]); } else { exDataDic[exDataList[i].fileName] = exDataList[i]; } } for (int i = 0; i < inDataList.Count; i++) { if (!exDataDic.ContainsKey(inDataList[i].fileName)) { diffList.Add(inDataList[i]); } else { if (!inDataList[i].crc.Equals(exDataDic[inDataList[i].fileName].crc)) { diffList.Add(inDataList[i]); } } } return diffList; } // 计算大小 public static decimal GetDiffSize(List diffList) { decimal size = 0; foreach (ResourceFile rf in diffList) { size += rf.size; } return size / 1048576; } public static void WriteLog(string path, string name, string[] contents) { UnityEngine.Debug.Log("创建log文件"); UnityEngine.Debug.Log(path); UnityEngine.Debug.Log(name); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string filePath = Path.Combine(path, name) + ".log"; //if (!File.Exists(filePath)) //{ // File.Create(filePath).Close(); //} File.WriteAllLines(filePath, contents); } } class HotFixConfig { public string desc; public string dir_name; public bool isCalSize = false; public bool isChoose = false; public List hotFixSettings; public string project_files_path; public string local_files_path; public decimal project_local_size = 0; public List project_local_list; public HotFixConfig(string _dir_name) { desc = _dir_name; dir_name = _dir_name; hotFixSettings = new List(); // isCalSize = false; } // 添加配置文件夹 public void AddSetting(string _desc, string _dir_name, string _dir_cdn_setting) { hotFixSettings.Add(new HotFixSetting(_desc, _dir_name, _dir_cdn_setting)); } // 计算本地到工程的大小 public void CalHotFixSize() { if (HotfixWindow._HotFixProjectPath.Equals("")) { UnityEngine.Debug.LogError("热更工程路径为空!"); return; } // 工程中的位置 project_files_path = Application.dataPath + "/../BuildABs/" + AppConst.PlatformPath + "/"; // GIT位置 local_files_path = HotfixWindow._HotFixProjectPath + "/Root/" + dir_name + "/" + AppConst.PlatformPath + "/"; // 计算差异文件 project_local_list = HotFixTool.GetDiffList(HotFixTool.GetFilesList(project_files_path), HotFixTool.GetFilesList(local_files_path)); // 计算大小 project_local_size = HotFixTool.GetDiffSize(project_local_list); // isCalSize = true; } } class HotFixSetting { public string desc; // 设置描述 public string dir_name; // 热更分支文件夹 public string dir_cdn_setting; // cdn设置文件夹 public string path_cdn_setting;// cdn设置文件夹全路径 public bool isCalSize = false; // 判断是否计算过大小了 public bool isChoose = false; // 是否被选中 public string cdn_files_path = ""; public string project_files_path = ""; public string local_files_path = ""; public decimal local_cdn_size = 0; // git与cdn比较 热更文件的文件大小 public List local_cdn_list; // git与cdn比较 热更文件列表 public VersionTxt local_version; public VersionTxt cdn_version; public Hashtable cdn_setting; public HotFixSetting(string _desc, string _dir_name, string _dir_cdn_setting) { desc = _desc; dir_name = _dir_name; dir_cdn_setting = _dir_cdn_setting; path_cdn_setting = HotfixWindow._HotFixProjectPath + "/Root/" + dir_name + "/" + dir_cdn_setting + "/"; isCalSize = false; } public void CalHotFixSize() { if (HotfixWindow._HotFixProjectPath.Equals("")) { UnityEngine.Debug.LogError("热更工程路径为空!"); return; } // cdn上files文件保存的位置 cdn_files_path = path_cdn_setting + "__Download/"; // 工程中的位置 project_files_path = Application.dataPath + "/../BuildABs/" + AppConst.PlatformPath + "/"; // GIT位置 local_files_path = HotfixWindow._HotFixProjectPath + "/Root/" + dir_name + "/" + AppConst.PlatformPath + "/"; LoadSetting(); LoadLocalVersion(); LoadCDN(); // 计算差异文件 local_cdn_list = HotFixTool.GetDiffList(HotFixTool.GetFilesList(local_files_path), HotFixTool.GetFilesList(cdn_files_path)); // 计算大小 local_cdn_size = HotFixTool.GetDiffSize(local_cdn_list); // isCalSize = true; } public void LoadSetting() { string setting = File.ReadAllText(path_cdn_setting + "Setting.txt", System.Text.Encoding.UTF8); cdn_setting = MiniJSON.jsonDecode(setting) as Hashtable; } public string GetSettingConfig(string key) { if (cdn_setting == null || !cdn_setting.ContainsKey(key)) { return null; } return cdn_setting[key] as string; } public void LoadLocalVersion() { // 读取version文件 string json = File.ReadAllText(path_cdn_setting + AppConst.GameVersionFile); local_version = JsonUtility.FromJson(json); } public void LoadCDN() { if(local_version == null) { UnityEngine.Debug.LogError("请先加载本地version文件"); return; } // 下载cdn上的files文件 HotFixTool.RegetExternalFile(local_version.resUrl + AppConst.PlatformPath, cdn_files_path, "files.unity3d"); // 下载version文件 HotFixTool.RegetExternalFile(local_version.resUrl + AppConst.PlatformPath, cdn_files_path, AppConst.GameVersionFile); // 读取version string json = File.ReadAllText(cdn_files_path + AppConst.GameVersionFile); cdn_version = JsonUtility.FromJson(json); } public void DOUpload() { string logName; string updateName; string changeFileName; string logPath = path_cdn_setting + "/__HotFixLog/"; string tagName; List log = new List(); //if (local_cdn_list.Count <= 0) //{ // UnityEngine.Debug.Log("未检测到文件改动"); // return; //} // 初始化数据 updateName = dir_name + "_" + dir_cdn_setting + "_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss"); changeFileName = updateName.Replace("/", "_"); logName = changeFileName + "_UpLoad"; tagName = "hotfix/" + dir_name + "/" + dir_cdn_setting + "/" + local_version.version; EditorUtility.DisplayProgressBar("正在获取数据:", updateName, 0f); log.Add("热更文件版本:" + updateName); log.Add("热更版本号:" + local_version.version); log.Add("热更大小:" + local_cdn_size); // copy unity3d log.Add("热更文件:"); List changeFile = new List(); foreach (ResourceFile rf in local_cdn_list) { changeFile.Add(rf.fileName); log.Add(rf.fileName); } changeFile.Add(UpdateConfigs.FILES); log.Add(UpdateConfigs.FILES); // write ChangeList EditorUtility.DisplayProgressBar("正在生成文件变化列表", changeFileName, 1f); HotFixTool.WriteLog(logPath, changeFileName, changeFile.ToArray()); // upload to cdn EditorUtility.DisplayProgressBar("正在上传热更文件", changeFileName, 1f); string cdnType = GetSettingConfig("cdn_type"); if (cdnType == null) { UnityEngine.Debug.LogError("CDN配置错误"); EditorUtility.ClearProgressBar(); return; } log.Add("CDN TYPE: " + cdnType); string toolsDir = HotfixWindow._HotFixProjectPath + "/Tools/" + cdnType; log.Add("TOOLS DIR: " + toolsDir); // MAC机器上pathon脚本中使用多线程会导致unity卡死 int isThread = 1; #if UNITY_IOS isThread = 0; #endif string command = string.Format("python UpLoad.py {0} {1} {2} {3} >>{4}", HotfixWindow._HotFixProjectPath + "/Root/" + dir_name, dir_cdn_setting, changeFileName, isThread, logPath + logName + ".log"); log.Add("UPLOAD COMMAND: " + command); ProcessUtil.ProcessCommand(toolsDir, command); string flushCommand = string.Format("python Flush.py {0} >>{1}", cdn_version.resUrl, logPath + logName + ".log"); log.Add("Flush COMMAND: " + flushCommand); ProcessUtil.ProcessCommand(toolsDir, flushCommand); // write log string unityLog = changeFileName + "_Unity"; EditorUtility.DisplayProgressBar("正在生成Log文件:", unityLog, 1f); HotFixTool.WriteLog(logPath, unityLog, log.ToArray()); // git commit string commitName = desc + "更新:" + updateName; EditorUtility.DisplayProgressBar("正在提交到GIT:", commitName, 1f); ProcessUtil.ProcessCommand(path_cdn_setting, "git add ."); ProcessUtil.ProcessCommand(path_cdn_setting, "git commit -m " + commitName); ProcessUtil.ProcessCommand(path_cdn_setting, "git push"); // git tag string dir = Application.dataPath.Replace("/Assets", ""); ProcessUtil.ProcessCommand(dir, string.Format("git tag -a {0} -m {1}", tagName, commitName)); ProcessUtil.ProcessCommand(dir, "git push origin --tags"); UnityEngine.Debug.Log("更新完成,游戏工程标签为:" + tagName + ",热更工程提交:" + commitName); EditorUtility.ClearProgressBar(); } } //看热更大小 public class HotfixWindow : EditorWindow { static string[][] _SettingConfig = new string[][]{ new string[]{ "C轮测试v2", "mht_china/local", "cdn_v2", "china/dev-c" }, new string[]{ "C轮测试v3", "mht_china/local", "cdn_v3", "china/dev-c" }, new string[]{ "灵动-专服-测试", "mht_china/zf", "cdn_mht_zf_test", "china/zf_test" }, new string[]{ "灵动-专服", "mht_china/zf", "cdn_mht_zf_release", "china/zf_test" }, new string[]{ "灵动-Quick", "mht_china/zf", "cdn_mht_zf_quick", "china/zf_test" }, new string[]{ "草花", "mht_china/zf", "cdn_caohua", "china/zf_test" }, new string[]{ "喜扑", "mht_china/zf", "cdn_xipu", "china/zf_test" }, new string[]{ "Quick", "mht_china/zf", "cdn_quick", "china/zf_test" }, new string[]{ "游心", "mht_china/zf", "cdn_youxin", "china/zf_test" }, new string[]{ "动游", "mht_china/zf", "cdn_dongyou", "china/zf_test" }, new string[]{ "灵动-IOS", "mht_china/zf", "cdn_ios", "china/ios" }, new string[]{ "灵动-商务", "mht_china/sw", "cdn_mht_sw", "china/mht_sw" }, new string[]{ "先遣-内网", "mht_china/local", "local12_cn_local", "china/local" }, new string[]{ "先遣-测试跨服", "mht_china/kf", "cdn_xq_kf", "china/test" }, new string[]{ "先遣-测试", "mht_china/xq", "cdn_xq_test", "china/test" }, new string[]{ "先遣-正式", "mht_china/xq", "cdn_xq_release", "china/test" }, }; static Dictionary _HotFixConfigDic = new Dictionary(); static string benchName = ""; public static string _HotFixProjectPath; static string _Password = ""; static bool _IsUpdateCDN = false; static bool _IsGitPull = false; [MenuItem("Build/Hotfix")] static void Init() { benchName = GitUtil.GetCurBenchName(); UnityEngine.Debug.Log("当前分支:" + benchName); _HotFixProjectPath = EditorPrefs.GetString("_HotFixProjectPath", ""); if (!_IsGitPull && _HotFixProjectPath != "") { ABGitPull(); } InitData(); InitStyle(); // Get existing open window or if none, make a new one: HotfixWindow window = (HotfixWindow)EditorWindow.GetWindow(typeof(HotfixWindow)); window.titleContent = new GUIContent("热更新"); window.Show(); } static void InitData() { _IsGitPull = false; _HotFixConfigDic.Clear(); foreach (string[] sc in _SettingConfig) { string desc = sc[0]; string folder = sc[1]; string setting = sc[2]; string bench = sc[3]; if (bench.Equals(benchName)) { HotFixConfig hfc; _HotFixConfigDic.TryGetValue(folder, out hfc); if (hfc == null) { hfc = new HotFixConfig(folder); _HotFixConfigDic.Add(folder, hfc); } hfc.AddSetting(desc, folder, setting); } } } // 自定义style static GUIStyle F_B_30 = new GUIStyle(); static GUIStyle F_25 = new GUIStyle(); static GUIStyle L_PL_50 = new GUIStyle(); static void InitStyle() { F_B_30.fontSize = 30; F_B_30.fontStyle = FontStyle.Bold; F_25.fontSize = 25; L_PL_50.padding.left = 50; } void OnGUI() { if (AppConst.PlatformPath != "Android" && AppConst.PlatformPath != "IOS") { EditorGUILayout.LabelField("请先切换到Android或者IOS平台", F_B_30); return; } _Password = EditorGUILayout.PasswordField("请输入密码:", _Password); if (_Password != "tcx123") { return; } EditorGUILayout.BeginVertical(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.LabelField("当前工程GIT分支:" + benchName); EditorGUILayout.BeginHorizontal(); _HotFixProjectPath = EditorGUILayout.TextField("热更GIT工程地址:", _HotFixProjectPath); if (GUILayout.Button("Browse", GUILayout.ExpandWidth(false))) { _HotFixProjectPath = EditorUtility.OpenFolderPanel("Resource path", _HotFixProjectPath, _HotFixProjectPath); EditorPrefs.SetString("_HotFixProjectPath", _HotFixProjectPath); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.Space(); _IsUpdateCDN = EditorGUILayout.ToggleLeft("是否显示CDN更新选项", _IsUpdateCDN); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.LabelField("请选择要更新的GIT路径:"); foreach (string k in _HotFixConfigDic.Keys)// i = 0; i < _CurConfig.Length; i++) { HotFixConfig _CurConfig = _HotFixConfigDic[k]; _CurConfig.isChoose = EditorGUILayout.ToggleLeft("" + _CurConfig.desc + "", _CurConfig.isChoose, F_B_30, GUILayout.Height(40)); if (_CurConfig.isChoose) { EditorGUILayout.BeginHorizontal(); EditorGUILayout.LabelField("工程到Git:" + _CurConfig.project_local_size.ToString("0.00") + "M"); if (!_CurConfig.isCalSize) { _CurConfig.CalHotFixSize(); } if (GUILayout.Button("刷新", GUILayout.Height(20f))) { _CurConfig.CalHotFixSize(); } if (GUILayout.Button("更新到GIT", GUILayout.Height(20f))) { string title = "是否要将工程热更文件同步到GIT: " + _CurConfig.desc; string content = string.Format("更新大小:{0}", HotFixTool.GetDiffSize(_CurConfig.project_local_list).ToString("0.00") + "M"); HotfixConfimWindow.Create(title, content, _CurConfig.project_local_list, () => { UpdateUnity3dToGit(_CurConfig); }); } EditorGUILayout.EndHorizontal(); if (_IsUpdateCDN) { foreach (HotFixSetting hfs in _CurConfig.hotFixSettings)// i = 0; i < _CurConfig.Length; i++) { EditorGUILayout.BeginVertical(L_PL_50); hfs.isChoose = EditorGUILayout.ToggleLeft("" + hfs.desc + "", hfs.isChoose, F_25, GUILayout.Height(30)); if (hfs.isChoose) { // 自动计算一遍大小 if (!hfs.isCalSize) { hfs.CalHotFixSize(); } EditorGUILayout.BeginHorizontal(); EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField("CDN当前版本号:" + (hfs.cdn_version == null ? "" : hfs.cdn_version.version)); EditorGUILayout.LabelField("GIT到CDN:" + hfs.local_cdn_size.ToString("0.00") + "M"); EditorGUILayout.EndVertical(); if (GUILayout.Button("编辑Setting", GUILayout.Height(30f), GUILayout.Width(100f))) { string tpath = hfs.path_cdn_setting + "setting.txt"; ProcessUtil.OpenText(tpath); } if (GUILayout.Button("编辑Config", GUILayout.Height(30f), GUILayout.Width(100f))) { string tpath = hfs.path_cdn_setting + AppConst.GameConfigFile; ProcessUtil.OpenText(tpath); } if (GUILayout.Button("编辑Version", GUILayout.Height(30f), GUILayout.Width(100f))) { string tpath = hfs.path_cdn_setting + AppConst.GameVersionFile; ProcessUtil.OpenText(tpath); } if (GUILayout.Button("刷新", GUILayout.Height(30f), GUILayout.Width(100f))) { hfs.CalHotFixSize(); } if (GUILayout.Button("更新", GUILayout.Height(30f), GUILayout.Width(100f))) { //重新加载本地version hfs.LoadLocalVersion(); string title = "是否要热更: " + hfs.desc; string content = string.Format("更新大小:{0},CDN当前版本:{1},更新后版本{2}", HotFixTool.GetDiffSize(hfs.local_cdn_list).ToString("0.00") + "M", hfs.cdn_version.version, hfs.local_version.version); HotfixConfimWindow.Create(title, content, hfs.local_cdn_list, () => { hfs.DOUpload(); }); } EditorGUILayout.EndHorizontal(); } EditorGUILayout.EndVertical(); } } EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); EditorGUILayout.Space(); } } EditorGUILayout.EndVertical(); } // 拉取git工程 private static void ABGitPull() { if(!_IsGitPull) { ProcessUtil.ProcessCommand(_HotFixProjectPath, "git pull", true); _IsGitPull = true; } } //同步工程中的热更文件到git private static void UpdateUnity3dToGit(HotFixConfig hfc) { string updateName; List updateList; List log = new List(); updateList = hfc.project_local_list; if (updateList.Count <= 0) { UnityEngine.Debug.Log("未检测到文件改动"); return; } // 初始化数据 updateName = benchName + "_" + GitUtil.GetCurCommitHash() + "_"+DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss"); EditorUtility.DisplayProgressBar("正在获取数据:", updateName, 0f); log.Add("热更文件版本:" + updateName); log.Add("热更文件的工程对应的提交信息:" ); string[] infos = GitUtil.GetCurCommitSimpleInfo(); foreach(string info in infos) { log.Add(info); } log.Add("热更大小:"+hfc.project_local_size); // copy unity3d log.Add("热更文件:"); string fromPath = hfc.project_files_path; string toPath = hfc.local_files_path; int i = 0; foreach (ResourceFile rf in updateList) { EditorUtility.DisplayProgressBar("正在复制文件:" + toPath, rf.fileName, (float)i/updateList.Count); string dirName = Path.GetDirectoryName(toPath + rf.fileName); if (!Directory.Exists(dirName)) { Directory.CreateDirectory(dirName); } File.Copy(fromPath + rf.fileName, toPath + rf.fileName, true); log.Add(rf.fileName); } File.Copy(fromPath + UpdateConfigs.FILES, toPath + UpdateConfigs.FILES, true); log.Add(UpdateConfigs.FILES); // write logf string logName = updateName.Replace("/", "_"); EditorUtility.DisplayProgressBar("正在生成Log文件:", logName, 1f); WriteLog(toPath+"/_log", logName, log.ToArray()); // git commit string commitName = hfc.dir_name + "热更文件更新:" + updateName; EditorUtility.DisplayProgressBar("正在提交到GIT:", commitName, 1f); ProcessUtil.ProcessCommand(toPath, "git add ."); ProcessUtil.ProcessCommand(toPath, "git commit -m " + commitName); ProcessUtil.ProcessCommand(toPath, "git push"); EditorUtility.ClearProgressBar(); } //同步工程中的热更文件到git private static void UpdateUnity3dToCDN(HotFixSetting hfs) { string logName; string updateName; string changeFileName; List updateList; List log = new List(); updateList = hfs.local_cdn_list; if (updateList.Count <= 0) { UnityEngine.Debug.Log("未检测到文件改动"); return; } // 初始化数据 updateName = hfs.dir_name + "_" + hfs.dir_cdn_setting + "_" + DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss"); changeFileName = updateName.Replace("/", "_"); logName = changeFileName + "_UpLoad"; EditorUtility.DisplayProgressBar("正在获取数据:", updateName, 0f); log.Add("热更文件版本:" + updateName); log.Add("热更大小:" + hfs.local_cdn_size); // copy unity3d log.Add("热更文件:"); List changeFile = new List(); foreach (ResourceFile rf in updateList) { changeFile.Add(rf.fileName); log.Add(rf.fileName); } changeFile.Add(UpdateConfigs.FILES); log.Add(UpdateConfigs.FILES); // write ChangeList EditorUtility.DisplayProgressBar("正在生成文件变化列表", changeFileName, 1f); WriteLog(hfs.path_cdn_setting + "/__HotFixLog", changeFileName, changeFile.ToArray()); // upload to cdn EditorUtility.DisplayProgressBar("正在上传热更文件", changeFileName, 1f); string setting = File.ReadAllText(hfs.path_cdn_setting + "Setting.txt", System.Text.Encoding.UTF8); Hashtable info = MiniJSON.jsonDecode(setting) as Hashtable; if (!info.ContainsKey("cdn_type")) { UnityEngine.Debug.LogError("CDN配置错误"); EditorUtility.ClearProgressBar(); return; } log.Add("CDN TYPE: "+ info["cdn_type"]); string toolsDir = _HotFixProjectPath + "/Tools/" + info["cdn_type"]; log.Add("TOOLS DIR: " + toolsDir); // MAC机器上pathon脚本中使用多线程会导致unity卡死 int isThread = 1; #if UNITY_IOS isThread = 0; #endif string command = string.Format("python UpLoad.py {0} {1} {2} {3} >>{4}", _HotFixProjectPath + "/Root/" + hfs.dir_name, hfs.dir_cdn_setting, changeFileName, isThread, hfs.path_cdn_setting + "__HotFixLog/" + logName + ".log"); log.Add("UPLOAD COMMAND: " + command); ProcessUtil.ProcessCommand(toolsDir, command); string flushCommand = string.Format("python Flush.py {0} >>{1}", hfs.cdn_version.resUrl, hfs.path_cdn_setting + "__HotFixLog/" + logName + ".log"); log.Add("Flush COMMAND: " + flushCommand); ProcessUtil.ProcessCommand(toolsDir, flushCommand); // write log EditorUtility.DisplayProgressBar("正在生成Log文件:", logName, 1f); WriteLog(hfs.path_cdn_setting + "__HotFixLog", logName, log.ToArray()); // git commit string commitName = hfs.desc + "更新:" + updateName; UnityEngine.Debug.LogError("git commit -m " + commitName); EditorUtility.DisplayProgressBar("正在提交到GIT:", commitName, 1f); ProcessUtil.ProcessCommand(hfs.path_cdn_setting, "git add ."); ProcessUtil.ProcessCommand(hfs.path_cdn_setting, "git commit -m " + commitName); ProcessUtil.ProcessCommand(hfs.path_cdn_setting, "git push"); EditorUtility.ClearProgressBar(); } private static void WriteLog(string path, string name, string[] contents) { UnityEngine.Debug.Log("创建log文件"); UnityEngine.Debug.Log(path); UnityEngine.Debug.Log(name); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string filePath = Path.Combine(path, name) + ".log"; //if (!File.Exists(filePath)) //{ // File.Create(filePath).Close(); //} File.WriteAllLines(filePath, contents); } } //看热更大小 public class HotfixConfimWindow : EditorWindow { string title; string content; List diffList; Action a; Vector2 _scp = Vector2.zero; public static void Create(string title, string content, List diffList, Action a) { HotfixConfimWindow window = (HotfixConfimWindow)EditorWindow.GetWindow(typeof(HotfixConfimWindow), true, "提示", true); window.SetContent(title, content, diffList, a); window.ShowAuxWindow(); } public void SetContent(string _title, string _content, List _diffList, Action _a) { title = _title; content = _content; diffList = _diffList; a = _a; } private void OnGUI() { EditorGUILayout.BeginVertical(); EditorGUILayout.LabelField(title); _scp = EditorGUILayout.BeginScrollView(_scp); foreach(ResourceFile rf in diffList) { EditorGUILayout.LabelField(rf.fileName+"|"+(rf.size / 1048576f).ToString("0.00") + "M"); } EditorGUILayout.LabelField("files.unity3d"); EditorGUILayout.LabelField(AppConst.GameConfigFile); EditorGUILayout.LabelField(AppConst.GameVersionFile); EditorGUILayout.EndScrollView(); EditorGUILayout.LabelField(content);//"更新大小:" + HotFixTool.GetDiffSize(diffList).ToString("0.00") + "M"); EditorGUILayout.BeginHorizontal(); if (GUILayout.Button("取消")){ Close(); } if (GUILayout.Button("确定")) { if (a!= null) a(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); } } }