//版本库中最新的表格若未生成配置则生成临时配置 public static void ParseTemp(string exlPath, string branch) { SVNHelper.Update(FileUtil.PathCombine(GlobalCfg.SourcePath, "..")); SVNHelper.Update(FileUtil.PathCombine(GlobalCfg.SourcePath, target_client_table_path)); instance.MatchExcelFile(exlPath, null, null); GenTableImportFile(); }
void PackRes() { try { SVNHelper.UpdateAssets(); // 1.清理ab名 ClearABName(); // 2.设置ab名 SetAbName(); // 3.打包ab BuildAssetBundle(); // 4.建立ab映射文件 BuildBundleNameMapFile(); // 5.记录压缩前文件大小和md5码,以及资源类型(是否包含于整包,是否是补丁资源) RecordFileRealSize(); // 6.压缩资源 BuildLuaAndCopyResources(); // 7.分包处理 CopyPackableFiles(); Resources.UnloadUnusedAssets(); GC.Collect(); } catch (Exception e) { Debug.LogException(e); } }
private static void OnChanged(object source, FileSystemEventArgs e) { SVNHelper.htpasswdRead(); foreach (var item in ProgramSetting.APIConfig) { bool is_Success = false; int reTryCount = 3; if (is_Success == false && reTryCount > 0) { // 加密发送消息 JsonPostModel jpm = new JsonPostModel(); jpm.Agent = JsonPostModelAgent.Client.ToString(); jpm.DataType = JsonPostModelDataType.AllAuthInfo.ToString(); jpm.Data = htpasswdUserAndPassword.UsersTable; is_Success = WebFunctionHelper.PostToAPI(EncryptsAndDecryptsHelper.Encrypt(JsonConvert.SerializeObject(jpm), item.SecretKey, item.IV), item.APIurl, item.SecretKey, item.IV); if (is_Success) { is_Success = true; } else { LogHelper.WriteLog("发送Repo更新信息出现错误", LogHelper.Log4NetLevel.Error); reTryCount--; Thread.Sleep(3000); } } else { LogHelper.WriteLog("发送Repo更新信息重试3次之后依旧出错!", LogHelper.Log4NetLevel.Error); } } }
void OneKeyPack(OneKeyType type) { try { if (SetPlayerSavePath()) { // 0.svn更新打包资源 SVNHelper.UpdateAssets(); SVNHelper.UpdateTempAssets(); // 1.svn更新 SVNHelper.UpdateAll(); // 2. 清除AB名 ClearABName(); // 3. 设置AB名 SetAbName(); // 3.打包ab BuildAssetBundle(); // 4.建立ab映射文件 BuildBundleNameMapFile(); // 5.记录压缩前文件大小和md5码,以及资源类型(是否包含于整包,是否是补丁资源) RecordFileRealSize(); // 6.打包lua以及压缩资源 BuildLuaAndCopyResources(); // 7.svn提交打包资源 SVNHelper.CommitPackAssets(); // 8.复制分包资源到StreamingAssets目录下 if (type == OneKeyType.allpack_only) { CopyPackableFiles(); // 9.打包测试包 BuildPlayer(false, false); // 10.打包整包 CopyAllBundles(); BuildPlayer(true, type == OneKeyType.force_apk_change); // 11.重置config.txt ResetConfig(); } else if (type == OneKeyType.inside || type == OneKeyType.force_apk_change) { CopyAllBundles(); // 10.打包内网整包 BuildPlayer(true, type == OneKeyType.force_apk_change); // 11.重置config.txt ResetConfig(); } // 12.上传CDN UploadCheck(); Resources.UnloadUnusedAssets(); GC.Collect(); } } catch (Exception e) { Debug.LogException(e); } }
void Pack() { if (SetPlayerSavePath()) { SVNHelper.UpdateAssets(); ClearABName(); SetAbName(); // 开始打包 Build(); } }
protected override void OnClosing(System.ComponentModel.CancelEventArgs e) { //do my stuff before closing FileUtil.DeleteHiddenFile(new List <string> { GlobalCfg.SourcePath + "/.." }, _Ext); FileUtil.DeleteHiddenFile(new List <string> { GlobalCfg.SourcePath + "/.." }, ".txt"); SVNHelper.ReleaseAll(); base.OnClosing(e); }
private void CancelEdit_Click(object sender, RoutedEventArgs e) { System.Windows.Forms.MessageBoxButtons buttons = System.Windows.Forms.MessageBoxButtons.OKCancel; System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("是否放弃所有修改?", "确认", buttons); if (dr == System.Windows.Forms.DialogResult.OK) { GlobalCfg.Instance.ClearCurrent(); SVNHelper.ReleaseExcelRelative(_excelItemChoosed.FilePath); _excelItemChoosed.IsEditing = false; FileListView_SelectionChange(null, null); } }
private void MultiFuncBtn_Click(object sender, RoutedEventArgs e) { Button senderBtn = sender as Button; switch (senderBtn.Content) { case STATE_UPDATE: SVNHelper.Update(_Folders[0], _Folders[1]); GlobalCfg.Instance.ClearAll(); FileListView_SelectionChange(null, null); GetRevision(); break; case STATE_REVERT: SVNHelper.RevertAll(_excelItemChoosed.Paths); CheckStateBtn_Click(null, null); GlobalCfg.Instance.ClearCurrent(); FileListView_SelectionChange(null, null); break; case STATE_EDIT: //请求进入编辑状态 if (SVNHelper.RequestEdit(_excelItemChoosed.FilePath)) { _excelItemChoosed.IsEditing = true; } else { _excelItemChoosed.IsEditing = false; } JudgeMultiFuncBtnState(); EditingModeRender(); break; case STATE_FINISH_EDIT: System.Windows.Forms.MessageBoxButtons buttons = System.Windows.Forms.MessageBoxButtons.OKCancel; System.Windows.Forms.DialogResult dr = System.Windows.Forms.MessageBox.Show("是否提交对于" + _excelItemChoosed.Name + "的修改?", "确认", buttons); if (dr == System.Windows.Forms.DialogResult.OK) { for (int i = 0; i < GlobalCfg.BranchCount; i++) { GlobalCfg.Instance.ExcuteModified(i); } SVNHelper.ReleaseExcelRelative(_excelItemChoosed.FilePath); _excelItemChoosed.IsEditing = false; FileListView_SelectionChange(null, null); } break; default: break; } }
void UploadCheck() { if (sdkConfig.upload243 == 1) { SVNHelper.UpdateTo243(); } else if (sdkConfig.uploadCDN == 1) { foreach (var item in sdkConfig.uploadPathes) { SVNHelper.UpdateToCDN(item.path, gameVersion.ToString(), item.script); } } }
public static bool RequestEdit(string exlpath) { if (!File.Exists(exlpath)) { return(false); } List <string> paths = GetAllPaths(Path.GetFileNameWithoutExtension(exlpath)); paths.Add(exlpath); Stack <string> haslockPaths = new Stack <string>(); for (int i = 0; i < paths.Count; i++) { if (!IsLockedByMe(paths[i])) { if (Lock(paths[i], "请求锁定" + paths[i])) { haslockPaths.Push(paths[i]); } else { string message = SVNHelper.LockInfo(exlpath); string caption = "无法进入编辑状态"; MessageBoxButtons buttons = MessageBoxButtons.OK; MessageBox.Show(message, caption, buttons); break; } } else { haslockPaths.Push(paths[i]); } //成功进入编辑状态,继续持有锁 if (i == paths.Count - 1) { return(true); } } //未成功进入编辑状态,释放锁 for (int i = 0; i < haslockPaths.Count; i++) { Release(haslockPaths.Pop()); } return(false); }
private void MultiFuncBtn_Click(object sender, RoutedEventArgs e) { Button senderBtn = sender as Button; switch (senderBtn.Content) { case STATE_UPDATE: SVNHelper.Update(_Folders[0], _Folders[1]); GlobalCfg.Instance.Clear(); GetRevision(); break; case STATE_REVERT: RevertAll(_listItemChoosed.Paths); CheckStateBtn_Click(null, null); break; case STATE_EDIT: //请求进入编辑状态 if (SVNHelper.RequestEdit(_listItemChoosed.FilePath)) { _listItemChoosed.IsEditing = true; } else { _listItemChoosed.IsEditing = false; } JudgeMultiFuncBtnState(); ResetGenBtnEnable(); break; case STATE_FINISH_EDIT: for (int i = 0; i < GlobalCfg.BranchCount; i++) { GlobalCfg.Instance.ExcuteModified(i); } ReleaseExcelRelative(_listItemChoosed.FilePath); _listItemChoosed.IsEditing = false; JudgeMultiFuncBtnState(); break; default: break; } }
void CopyIOSCompressedData() { string to = ABPackHelper.TEMP_ASSET_PATH + "IOSCompress"; if (Directory.Exists(to)) { Directory.Delete(to, true); } Directory.CreateDirectory(to); string from = Application.streamingAssetsPath; string[] files = Directory.GetFiles(from, "*", SearchOption.AllDirectories); for (int i = 0; i < files.Length; ++i) { if (files[i].EndsWith(".meta")) { continue; } var dest = files[i].Replace("\\", "/").Replace(Application.streamingAssetsPath + "/", ""); var dirs = dest.Split('/'); string path = to; ABPackHelper.ShowProgress("compress for ios: " + dest, (float)i / (float)files.Length); foreach (var dir in dirs) { if (dir.Contains('.')) { continue; } path += "/" + dir; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } } File.Copy(files[i], to + "/" + dest, true); } ABPackHelper.ShowProgress("copy compressed data for ios...", 1); SVNHelper.CommitIOSCompressedData(); AssetDatabase.Refresh(); }
public static void ParseAll() { SVNHelper.Update(FileUtil.PathCombine(GlobalCfg.SourcePath, "..")); SVNHelper.Update(FileUtil.PathCombine(GlobalCfg.SourcePath, target_client_table_path)); _NeedImportClient.Clear(); _NeedImportServer.Clear(); List <string> files = FileUtil.CollectFolder(GlobalCfg.SourcePath, _ExcelExt, instance.MatchExcelFile); #region 生成Table.txt的Client和Server版本 GenTableImportFile(); #endregion //for (int i = 0; i < files.Count; i++) //{ //_ExcelFiles.Add(new ExcelFileListItem() //{ // Name = Path.GetFileNameWithoutExtension(files[i]), // Status = "C/S", // ClientServer = "C/S", // FilePath = files[i] //}); //} }
private void CheckStateBtn_Click(object sender, RoutedEventArgs e) { Dictionary <string, SVNHelper.FileStatusStr> statusDic = SVNHelper.AllStatus(); for (int i = 0; i < excelFiles.Count; i++) { if (statusDic.ContainsKey(excelFiles[i].Name)) { excelFiles[i].IsSame = statusDic[excelFiles[i].Name].isSame; excelFiles[i].Paths = statusDic[excelFiles[i].Name].paths; //TODO:检测已经加锁的文件 //_ExcelFiles[i].IsEditing = statusDic[_ExcelFiles[i].Name].isLock; } else { excelFiles[i].IsSame = true; excelFiles[i].IsEditing = false; excelFiles[i].Paths.Clear(); } } JudgeMultiFuncBtnState(); #region 插入deleted文件(已注释) //foreach (KeyValuePair<string, string[]> kv in statusDic) //{ // if (kv.Value[0] == SVNHelper.STATE_DELETED) // { // _ExcelFiles.Add(new ExcelFileListItem() // { // Name = Path.GetFileNameWithoutExtension(kv.Key), // Status = kv.Value[0], // LockByMe = kv.Value[1], // ClientServer = "C/S", // FilePath = kv.Key // }); // } //} #endregion }
// 文件/文件夹改变处理 private static void OnChanged(object source, FileSystemEventArgs e) { // e.FullPath 是FileInfo类型 直接使用可输出完整路径 var change = SVNHelper.ReadRepositoriesFile(e.FullPath); // 将变化写入 SVNHelper.MergeRepoDictionary(RepoDataSourcePermission.RepoPermissons, change); LogHelper.WriteLog(e.FullPath + "\n 文件发生变化", LogHelper.Log4NetLevel.Debug); foreach (var item in ProgramSetting.APIConfig) { bool is_Success = false; int reTryCount = 3; if (is_Success == false && reTryCount > 0) { // 加密发送消息 JsonPostModel jpm = new JsonPostModel(); jpm.Agent = JsonPostModelAgent.Client.ToString(); jpm.DataType = JsonPostModelDataType.ChangeRepo.ToString(); jpm.Data = change; is_Success = WebFunctionHelper.PostToAPI(EncryptsAndDecryptsHelper.Encrypt(JsonConvert.SerializeObject(jpm), item.SecretKey, item.IV), item.APIurl, item.SecretKey, item.IV); if (is_Success) { is_Success = true; } else { LogHelper.WriteLog("发送Repo更新信息出现错误", LogHelper.Log4NetLevel.Error); reTryCount--; Thread.Sleep(3000); } } else { LogHelper.WriteLog("发送Repo更新信息重试3次之后依旧出错!", LogHelper.Log4NetLevel.Error); } } }
private void GetRevision() { _localRev = SVNHelper.GetLastestReversion(_Folders[0]); _serverRev = SVNHelper.GetLastestReversion(_URL); JudgeMultiFuncBtnState(); }
void BuildPlayer(bool packAllRes, bool forceUpdate) { var option = BuildOptions.None; if (debug) { option |= BuildOptions.AllowDebugging; } if (development) { option |= BuildOptions.Development; } if (autoConnectProfile) { option |= BuildOptions.ConnectWithProfiler; } var temps = Apk_Save_Path.Replace("\\", "/").Split('/'); if ((ABPackHelper.GetBuildTarget() == BuildTarget.Android || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows64 || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows) && sdkConfig != null) { string lastChannel = string.Empty; for (int i = 0; i < sdkConfig.items.Count; ++i) { StringBuilder final_path = new StringBuilder(); for (int j = 0; j < temps.Length - 1; ++j) { final_path.Append(temps[j] + "/"); } var item = sdkConfig.items[i]; if (item.need_subpack == 0 && !packAllRes) { continue; } if (ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows64 || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows) { final_path.Append(DateTime.Now.ToString("yyyyMMdd") + "/"); if (!Directory.Exists(final_path.ToString())) { Directory.CreateDirectory(final_path.ToString()); } final_path.Append(item.game_name + "_v"); } else { if (packAllRes) { if (item.development == 1) { option |= BuildOptions.Development; final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_allpack_dev_v"); } else if (item.use_sdk == 1) { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_allpack_sdk_v"); } else { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_allpack_test_v"); } } else { if (item.development == 1) { option |= BuildOptions.Development; final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_subpack_dev_v"); } else if (item.use_sdk == 1) { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_subpack_sdk_v"); } else { final_path.Append(item.game_name + DateTime.Now.ToString("yyyyMMdd") + "_subpack_test_v"); } } } final_path.Append(gameVersion.ToString()); if (ABPackHelper.GetBuildTarget() == BuildTarget.Android) { final_path.Append(".apk"); if (File.Exists(final_path.ToString())) { File.Delete(final_path.ToString()); } // 写入并保存sdk启用配置 item.CopyConfig(); item.CopySDK(); item.SetPlayerSetting(sdkConfig.splash_image); item.SaveSDKConfig(); item.SplitAssets(sdkConfig.split_assets); IncreaseLEBIAN_VERCODE(forceUpdate, item.update_along); if (item.update_along == 0 && forceUpdate) { if (Directory.Exists(Application.streamingAssetsPath)) { Directory.Delete(Application.streamingAssetsPath, true); } } } else if (ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows64 || ABPackHelper.GetBuildTarget() == BuildTarget.StandaloneWindows) { final_path.Append(".exe"); if (Directory.Exists(final_path.ToString())) { Directory.Delete(final_path.ToString(), true); } item.CopyConfig(); } AssetDatabase.Refresh(); BuildPipeline.BuildPlayer(ABPackHelper.GetBuildScenes(), final_path.ToString(), ABPackHelper.GetBuildTarget(), option); AssetDatabase.Refresh(); item.ClearSDK(); SVNHelper.UpdateAll(); } } else if (ABPackHelper.GetBuildTarget() == BuildTarget.iOS) { // 在上传目录新建一个ios_check.txt文件用于判断当前包是否出于提审状态 string checkFile = ABPackHelper.ASSET_PATH + LuaConst.osDir + "/ios_check.txt"; if (File.Exists(checkFile)) { File.Delete(checkFile); } File.WriteAllText(checkFile, "1"); XCConfigItem configItem = XCConfigItem.ParseXCConfig(XCodePostProcess.config_path); if (configItem != null) { PlayerSettings.applicationIdentifier = configItem.bundleIdentifier; PlayerSettings.productName = configItem.product_name; configItem.CopyConfig(); } IOSGenerateHelper.IOSConfusing(); AssetDatabase.Refresh(); BuildPipeline.BuildPlayer(ABPackHelper.GetBuildScenes(), Apk_Save_Path, ABPackHelper.GetBuildTarget(), option); AssetDatabase.Refresh(); } Resources.UnloadUnusedAssets(); GC.Collect(); Debug.Log("<color=green>Build success!</color>"); }
public static void MainRunFunction() { string encryptsJson = ""; // 初始化 读取所有仓库的信息 try { SVNHelper.ReadRepositoriesAll(); LogHelper.WriteLog("仓库信息初始化完成", LogHelper.Log4NetLevel.Info); } catch (Exception ex) { LogHelper.WriteLog("初始化仓库出现错误\n" + ex, LogHelper.Log4NetLevel.Error); } foreach (var item in ProgramSetting.APIConfig) { JsonPostModel jpm = new JsonPostModel(); jpm.Agent = JsonPostModelAgent.Client.ToString(); jpm.DataType = JsonPostModelDataType.AllUserTable.ToString(); jpm.Data = RepoDataSourcePermission.RepoPermissons; encryptsJson = EncryptsAndDecryptsHelper.Encrypt(JsonConvert.SerializeObject(jpm), item.SecretKey, item.IV); if (!WebFunctionHelper.PostToAPI(encryptsJson, item.APIurl, item.SecretKey, item.IV)) { LogHelper.WriteLog("初始化时发送所有仓库信息出现错误", LogHelper.Log4NetLevel.Error); } // 初始化 读取用户组信息 try { groupList.userGroup = SVNHelper.GetAllUserAndGroup(); LogHelper.WriteLog("用户与用户组信息初始化完成", LogHelper.Log4NetLevel.Info); } catch (Exception ex) { LogHelper.WriteLog("初始化用户信息出现错误\n" + ex, LogHelper.Log4NetLevel.Error); } // 初始化 读取所有用户的密码表 try { SVNHelper.htpasswdRead(); LogHelper.WriteLog("用户密码表信息初始化完成", LogHelper.Log4NetLevel.Info); } catch (Exception ex) { LogHelper.WriteLog("初始化用户密码表信息出现错误\n" + ex, LogHelper.Log4NetLevel.Error); } jpm.Agent = JsonPostModelAgent.Client.ToString(); jpm.DataType = JsonPostModelDataType.AllAuthInfo.ToString(); jpm.Data = htpasswdUserAndPassword.UsersTable; encryptsJson = EncryptsAndDecryptsHelper.Encrypt(JsonConvert.SerializeObject(jpm), item.SecretKey, item.IV); if (!WebFunctionHelper.PostToAPI(encryptsJson, item.APIurl, item.SecretKey, item.IV)) { LogHelper.WriteLog("初始化时发送用户密码信息出现错误", LogHelper.Log4NetLevel.Error); } } LogHelper.WriteLog("启动文件监控", LogHelper.Log4NetLevel.Info); // 启动仓库权限文件监控 try { SVNFileWatcherHelper fwh = new SVNFileWatcherHelper(); fwh.WatcherStrat(ProgramSetting.Repositoriespath, "VisualSVN-SvnAuthz.ini"); } catch (Exception ex) { LogHelper.WriteLog("启动 VisualSVN-SvnAuthz.ini 监控出现错误: " + ex.ToString(), LogHelper.Log4NetLevel.Error); throw; } // 启动htpasswd文件监控 try { htpasswdWatcher hw = new htpasswdWatcher(); hw.WatcherStrat(ProgramSetting.Repositoriespath, "htpasswd"); } catch (Exception ex) { LogHelper.WriteLog("启动 htpasswd 监控出现错误: " + ex.ToString(), LogHelper.Log4NetLevel.Error); throw; } // 启动用户组文件监控 try { groupFileWatcher gfw = new groupFileWatcher(); gfw.WatcherStrat(ProgramSetting.Repositoriespath, "groups.conf"); } catch (Exception ex) { LogHelper.WriteLog("启动 groups.conf 监控出现错误: " + ex.ToString(), LogHelper.Log4NetLevel.Error); throw; } RemoteCommandMonitoring.CheckRemoteCommand(); Console.WriteLine("程序启动"); LogHelper.WriteLog("程序启动完成.", LogHelper.Log4NetLevel.Info); }
void IncreaseLEBIAN_VERCODE(bool forceUpdate, int update_along) { var manifestPath = Application.dataPath + "/Plugins/Android/AndroidManifest.xml"; var lines = File.ReadAllLines(manifestPath); StringBuilder sb = new StringBuilder(); foreach (var line in lines) { if (line.Contains("\"LEBIAN_VERCODE\"")) { var ver_temps = line.Split('='); for (int j = 0; j < ver_temps.Length; ++j) { if (j != ver_temps.Length - 1) { sb.Append(ver_temps[j]); sb.Append('='); } else { // 读取apk版本号 string apkVersionPath = ABPackHelper.VERSION_PATH + "apk_version.txt"; if (forceUpdate) { apkVersion++; if (File.Exists(apkVersionPath)) { File.Delete(apkVersionPath); } File.WriteAllText(apkVersionPath, apkVersion.ToString()); SVNHelper.CommitVersion(); } sb.Append('"').Append(apkVersion).Append("\"/>\n"); } } } else if (line.Contains("\"ClientChId\"") && update_along == 0) { var ver_temps = line.Split('='); for (int j = 0; j < ver_temps.Length; ++j) { if (j != ver_temps.Length - 1) { sb.Append(ver_temps[j]); sb.Append('='); } else { sb.Append("\"PATCH_V3\"/>\n"); } } } else { sb.AppendLine(line); } } File.Delete(manifestPath); sb.Replace("$bundleidentifier$", PlayerSettings.applicationIdentifier); File.WriteAllText(manifestPath, sb.ToString()); }