工具更新
This commit is contained in:
parent
ba90768b2d
commit
2093ae6885
@ -168,7 +168,7 @@ class IntegratedPipeline:
|
||||
row += 1
|
||||
|
||||
# 开始按钮
|
||||
ttk.Button(main_frame, text="🚀 开始执行完整流程", command=self.run_pipeline).grid(row=row, column=0, columnspan=3, pady=20, ipadx=80, ipady=15)
|
||||
ttk.Button(main_frame, text="开始执行完整流程", command=self.run_pipeline).grid(row=row, column=0, columnspan=3, pady=20, ipadx=80, ipady=15)
|
||||
row += 1
|
||||
|
||||
# 版本号显示
|
||||
@ -192,7 +192,7 @@ class IntegratedPipeline:
|
||||
setattr(self, attr_name + '_path', file_path)
|
||||
getattr(self, attr_name + '_var').set(file_path)
|
||||
self.save_config()
|
||||
self.log(f"✓ 已选择 {title}: {file_path}\n")
|
||||
self.log(f"[OK] 已选择 {title}: {file_path}\n")
|
||||
|
||||
def select_directory(self, attr_name: str, title: str):
|
||||
"""选择目录"""
|
||||
@ -203,7 +203,7 @@ class IntegratedPipeline:
|
||||
setattr(self, attr_name, dir_path)
|
||||
getattr(self, attr_name + '_var').set(dir_path)
|
||||
self.save_config()
|
||||
self.log(f"✓ 已选择 {title}: {dir_path}\n")
|
||||
self.log(f"[OK] 已选择 {title}: {dir_path}\n")
|
||||
|
||||
def log(self, message: str):
|
||||
"""输出日志"""
|
||||
@ -244,7 +244,7 @@ class IntegratedPipeline:
|
||||
step_summary = []
|
||||
|
||||
for idx, step in enumerate(self.report['steps'], 1):
|
||||
status_icon = "✓" if step['status'] == 'success' else "✗"
|
||||
status_icon = "[OK]" if step['status'] == 'success' else "[FAIL]"
|
||||
status_text = "成功" if step['status'] == 'success' else "失败"
|
||||
|
||||
# 提取关键数字
|
||||
@ -279,9 +279,9 @@ class IntegratedPipeline:
|
||||
|
||||
report_lines.append("")
|
||||
if total_errors == 0:
|
||||
report_lines.append("【总体状态】✓ 所有步骤成功完成,无错误")
|
||||
report_lines.append("【总体状态】[OK] 所有步骤成功完成,无错误")
|
||||
else:
|
||||
report_lines.append(f"【总体状态】⚠ 发现 {total_errors} 个问题,详见下方详细报告")
|
||||
report_lines.append(f"【总体状态】[WARNING] 发现 {total_errors} 个问题,详见下方详细报告")
|
||||
|
||||
report_lines.append("")
|
||||
report_lines.append("="*100)
|
||||
@ -291,7 +291,7 @@ class IntegratedPipeline:
|
||||
|
||||
# =============== 详细报告部分 ===============
|
||||
for idx, step in enumerate(self.report['steps'], 1):
|
||||
status_icon = "✓" if step['status'] == 'success' else "✗"
|
||||
status_icon = "[OK]" if step['status'] == 'success' else "[FAIL]"
|
||||
report_lines.append(f"【步骤 {idx}】{step['name']}")
|
||||
report_lines.append(f"状态: [{status_icon}] {'成功' if step['status'] == 'success' else '失败'}")
|
||||
report_lines.append(f"耗时: {step['time']}")
|
||||
@ -307,7 +307,7 @@ class IntegratedPipeline:
|
||||
report_lines.append(f"失败文件: {details['failed']}")
|
||||
# 显示AllConfigs状态
|
||||
if 'allconfigs' in details:
|
||||
allconfigs_status = "✓ 已生成" if details['allconfigs'] else "✗ 未生成"
|
||||
allconfigs_status = "[OK] 已生成" if details['allconfigs'] else "[FAIL] 未生成"
|
||||
report_lines.append(f"AllConfigs.bytes: {allconfigs_status}")
|
||||
elif 'count' in details:
|
||||
report_lines.append(f"处理文件: {details['count']}")
|
||||
@ -336,7 +336,7 @@ class IntegratedPipeline:
|
||||
|
||||
# 成功的文件列表
|
||||
elif key in ['success_files', 'files']:
|
||||
report_lines.append(f"✓ 成功文件 ({len(value)} 项):")
|
||||
report_lines.append(f"[OK] 成功文件 ({len(value)} 项):")
|
||||
for item in value:
|
||||
report_lines.append(f" • {item}")
|
||||
|
||||
@ -493,7 +493,7 @@ class IntegratedPipeline:
|
||||
messagebox.showerror("失败", f"所有步骤都失败了\n\n详细报告请查看日志。")
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"\n✗ 执行失败: {str(e)}\n")
|
||||
self.log(f"\n[FAIL] 执行失败: {str(e)}\n")
|
||||
import traceback
|
||||
self.log(traceback.format_exc())
|
||||
messagebox.showerror("错误", f"执行失败:\n{str(e)}")
|
||||
@ -587,10 +587,10 @@ class IntegratedPipeline:
|
||||
|
||||
generated_count += 1
|
||||
struct_names.append(struct_name)
|
||||
self.log(f" ✓ 生成: {struct_name}.thrift\n")
|
||||
self.log(f" [OK] 生成: {struct_name}.thrift\n")
|
||||
|
||||
except Exception as e:
|
||||
self.log(f" ✗ 失败 {struct_name}: {str(e)}\n")
|
||||
self.log(f" [FAIL] 失败 {struct_name}: {str(e)}\n")
|
||||
|
||||
# 生成 AllConfigs.thrift(合并配置文件)
|
||||
try:
|
||||
@ -600,9 +600,9 @@ class IntegratedPipeline:
|
||||
with open(allconfigs_path, 'w', encoding='utf-8') as f:
|
||||
f.write(allconfigs_content)
|
||||
generated_count += 1
|
||||
self.log(f" ✓ AllConfigs.thrift 生成成功\n")
|
||||
self.log(f" [OK] AllConfigs.thrift 生成成功\n")
|
||||
except Exception as e:
|
||||
self.log(f" ✗ AllConfigs.thrift 生成失败: {str(e)}\n")
|
||||
self.log(f" [FAIL] AllConfigs.thrift 生成失败: {str(e)}\n")
|
||||
|
||||
# 保存配置文件列表供后续步骤使用
|
||||
self.config_struct_names = struct_names
|
||||
@ -615,7 +615,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤1失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤1失败: {str(e)}\n")
|
||||
self.add_step_report("生成Thrift文件", "failed", {"error": str(e)})
|
||||
return False
|
||||
|
||||
@ -734,10 +734,10 @@ class IntegratedPipeline:
|
||||
success_count += 1
|
||||
# 原始:改进进度显示
|
||||
if idx % 10 == 0 or idx == 1 or idx == len(thrift_files):
|
||||
self.log(f" ✓ [{idx}/{len(thrift_files)}] {thrift_file}\n")
|
||||
self.log(f" [OK] [{idx}/{len(thrift_files)}] {thrift_file}\n")
|
||||
self.root.update() # 原始:刷新UI
|
||||
else:
|
||||
self.log(f" ✗ 编译失败: {thrift_file}\n")
|
||||
self.log(f" [FAIL] 编译失败: {thrift_file}\n")
|
||||
error_msg = result.stderr if result.stderr else result.stdout
|
||||
if error_msg:
|
||||
self.log(f" 错误详情:\n{error_msg}\n")
|
||||
@ -762,7 +762,7 @@ class IntegratedPipeline:
|
||||
allconfigs_ext = os.path.join(csharp_actual_dir, 'AllConfigs.Extensions.cs')
|
||||
if os.path.exists(allconfigs_ext):
|
||||
os.remove(allconfigs_ext)
|
||||
self.log(f" ✓ 删除 AllConfigs.Extensions.cs(避免二义性冲突)\n")
|
||||
self.log(f" [OK] 删除 AllConfigs.Extensions.cs(避免二义性冲突)\n")
|
||||
# 更新文件计数
|
||||
cs_files = [f for f in os.listdir(csharp_actual_dir) if f.endswith('.cs')]
|
||||
self.log(f" 最终保留 {len(cs_files)} 个 C# 文件\n")
|
||||
@ -778,7 +778,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤2失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤2失败: {str(e)}\n")
|
||||
self.add_step_report("编译到C#", "failed", {"error": str(e)})
|
||||
return False
|
||||
|
||||
@ -799,7 +799,7 @@ class IntegratedPipeline:
|
||||
cmd = [self.compiler_path, '--gen', 'py', '-out', str(self.gen_py_dir), thrift_path]
|
||||
subprocess.run(cmd, capture_output=True)
|
||||
|
||||
self.log(f" ✓ 生成 gen-py 完成\n")
|
||||
self.log(f" [OK] 生成 gen-py 完成\n")
|
||||
|
||||
# 导入 thrift 库并生成 bytes
|
||||
from thrift.protocol import TBinaryProtocol
|
||||
@ -975,7 +975,7 @@ class IntegratedPipeline:
|
||||
with open(bytes_path, 'wb') as f:
|
||||
f.write(binary_data)
|
||||
|
||||
self.log(f" ✓ {struct_name}.bytes ({len(binary_data)} bytes)\n")
|
||||
self.log(f" [OK] {struct_name}.bytes ({len(binary_data)} bytes)\n")
|
||||
success_count += 1
|
||||
success_list.append(struct_name)
|
||||
|
||||
@ -988,7 +988,7 @@ class IntegratedPipeline:
|
||||
except Exception as e:
|
||||
import traceback
|
||||
error_detail = traceback.format_exc()
|
||||
self.log(f" ✗ {struct_name}: {str(e)}\n")
|
||||
self.log(f" [FAIL] {struct_name}: {str(e)}\n")
|
||||
self.log(f" 详细错误:\n{error_detail}\n")
|
||||
failed_list.append({
|
||||
"name": struct_name,
|
||||
@ -1005,7 +1005,7 @@ class IntegratedPipeline:
|
||||
self.log(f"\n生成 AllConfigs.bytes(合并所有配置)...\n")
|
||||
allconfigs_generated = False
|
||||
if self.generate_all_configs_bytes(success_list):
|
||||
self.log(f" ✓ AllConfigs.bytes 生成成功\n")
|
||||
self.log(f" [OK] AllConfigs.bytes 生成成功\n")
|
||||
success_list.append('AllConfigs') # 添加到成功列表
|
||||
success_count += 1 # 计数+1
|
||||
allconfigs_generated = True
|
||||
@ -1029,7 +1029,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤3失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤3失败: {str(e)}\n")
|
||||
import traceback
|
||||
self.log(traceback.format_exc())
|
||||
self.add_step_report("生成Bytes文件", "failed", {"error": str(e)})
|
||||
@ -1054,9 +1054,9 @@ class IntegratedPipeline:
|
||||
os.remove(allconfigs_ext)
|
||||
deleted_count += 1
|
||||
deleted_files.append('AllConfigs.Extensions.cs')
|
||||
self.log(f" ✓ 删除残留的 AllConfigs.Extensions.cs\n")
|
||||
self.log(f" [OK] 删除残留的 AllConfigs.Extensions.cs\n")
|
||||
else:
|
||||
self.log(f" ✓ 确认 AllConfigs.Extensions.cs 已不存在\n")
|
||||
self.log(f" [OK] 确认 AllConfigs.Extensions.cs 已不存在\n")
|
||||
|
||||
# 统计保留的 Extensions 文件
|
||||
extension_files = [f for f in os.listdir(csharp_actual_dir) if f.endswith('.Extensions.cs')]
|
||||
@ -1070,7 +1070,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤4失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤4失败: {str(e)}\n")
|
||||
self.add_step_report("清理Extensions", "failed", {"error": str(e)})
|
||||
return False
|
||||
|
||||
@ -1088,7 +1088,7 @@ class IntegratedPipeline:
|
||||
unity_allconfigs_ext = os.path.join(unity_target_dir, 'AllConfigs.Extensions.cs')
|
||||
if os.path.exists(unity_allconfigs_ext):
|
||||
os.remove(unity_allconfigs_ext)
|
||||
self.log(f" ✓ 清理Unity目录中的旧 AllConfigs.Extensions.cs\n")
|
||||
self.log(f" [OK] 清理Unity目录中的旧 AllConfigs.Extensions.cs\n")
|
||||
|
||||
copied_count = 0
|
||||
copied_files = []
|
||||
@ -1120,7 +1120,7 @@ class IntegratedPipeline:
|
||||
self.log(f" ✓ {file}\n")
|
||||
|
||||
else:
|
||||
self.log(f" ✗ 未找到C#文件: {csharp_actual_dir}\n")
|
||||
self.log(f" [FAIL] 未找到C#文件: {csharp_actual_dir}\n")
|
||||
|
||||
self.log(f"\n复制完成: {copied_count} 个 C# 文件\n")
|
||||
|
||||
@ -1131,7 +1131,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤5失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤5失败: {str(e)}\n")
|
||||
self.add_step_report("复制C#到Unity", "failed", {"error": str(e)})
|
||||
return False
|
||||
|
||||
@ -1164,7 +1164,7 @@ class IntegratedPipeline:
|
||||
copied_count += 1
|
||||
# 标记 AllConfigs
|
||||
if file == 'AllConfigs.bytes':
|
||||
self.log(f" ✓ {file} 🚀 (合并文件-主力)\n")
|
||||
self.log(f" [OK] {file} [合并文件-主力]\n")
|
||||
else:
|
||||
self.log(f" ✓ {file}\n")
|
||||
else:
|
||||
@ -1186,7 +1186,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤6失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤6失败: {str(e)}\n")
|
||||
self.add_step_report("复制Bytes到Unity", "failed", {"error": str(e)})
|
||||
return False
|
||||
|
||||
@ -1219,7 +1219,7 @@ class IntegratedPipeline:
|
||||
csharp_actual_dir = os.path.join(self.csharp_output_dir, 'Byway', 'Thrift', 'Data')
|
||||
|
||||
if not os.path.exists(csharp_actual_dir):
|
||||
self.log(f" ✗ C# 文件目录不存在: {csharp_actual_dir}\n")
|
||||
self.log(f" [FAIL] C# 文件目录不存在: {csharp_actual_dir}\n")
|
||||
self.add_step_report("生成DataRow文件", "failed", {"error": "C# 文件目录不存在"})
|
||||
return False
|
||||
|
||||
@ -1266,7 +1266,7 @@ class IntegratedPipeline:
|
||||
self.root.update()
|
||||
|
||||
except Exception as e:
|
||||
self.log(f" ✗ 生成失败: {str(e)}\n")
|
||||
self.log(f" [FAIL] 生成失败: {str(e)}\n")
|
||||
failed_list.append({"name": cs_file, "error": str(e)})
|
||||
|
||||
self.log(f"\n生成完成: {success_count} 个 DR 文件\n")
|
||||
@ -1282,7 +1282,7 @@ class IntegratedPipeline:
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
self.log(f"✗ 步骤8失败: {str(e)}\n")
|
||||
self.log(f"[FAIL] 步骤8失败: {str(e)}\n")
|
||||
import traceback
|
||||
self.log(traceback.format_exc())
|
||||
self.add_step_report("生成DataRow文件", "failed", {"error": str(e)})
|
||||
@ -1421,7 +1421,7 @@ class IntegratedPipeline:
|
||||
self.log(f" ✓ 添加 {struct_name}\n")
|
||||
|
||||
except Exception as e:
|
||||
self.log(f" ✗ {struct_name} 添加失败: {str(e)}\n")
|
||||
self.log(f" [FAIL] {struct_name} 添加失败: {str(e)}\n")
|
||||
continue
|
||||
|
||||
# 序列化 AllConfigs
|
||||
|
||||
@ -1,3 +1,8 @@
|
||||
# Thrift 完整流程工具依赖
|
||||
# Python 3.6+ 兼容
|
||||
|
||||
# Excel 文件处理
|
||||
openpyxl>=3.0.0
|
||||
|
||||
# Thrift 序列化
|
||||
thrift>=0.16.0
|
||||
pyinstaller>=5.0.0
|
||||
|
||||
Loading…
Reference in New Issue
Block a user