auto_build_launcher/scripts/project_copy.py

64 lines
2.6 KiB
Python
Raw Normal View History

2025-10-28 02:04:16 +00:00
import os.path
import shutil
from git import Repo
2025-07-07 03:27:26 +00:00
from scripts.task import Task
2025-10-10 12:53:00 +00:00
from utils import FileUtils
2025-07-07 03:27:26 +00:00
from utils.logger_utils import app_logger
2025-10-28 02:04:16 +00:00
def clean_workspace(repo):
# 1. 放弃工作区所有已跟踪文件的修改(包括恢复被删除的已跟踪文件)
# - checkout 命令会将工作区文件重置为当前 HEAD 版本的状态
repo.git.checkout('.')
# 2. 删除工作区所有未跟踪的文件和目录(包括空目录)
# - -f强制删除避免询问
# - -d同时删除未跟踪的目录
repo.git.clean('-fd')
print("工作空间已清空,恢复到当前分支最新提交状态")
2025-07-07 03:27:26 +00:00
class ProjectCopy(Task):
def execute(self):
2025-10-28 02:04:16 +00:00
if os.path.exists(self.context.temp_project_path):
temp_path = os.path.join(self.context.temp_project_path, "build", "outputs")
if os.path.exists(temp_path):
shutil.rmtree(temp_path)
temp_path = os.path.join(self.context.temp_project_path, "build", "generated")
if os.path.exists(temp_path):
shutil.rmtree(temp_path)
2025-07-07 03:27:26 +00:00
2025-10-28 02:04:16 +00:00
app_logger().debug("project '{}' to '{}'".format(self.context.temp_project_path, "项目已经存在了"))
repo = Repo(self.context.temp_project_path)
temp_repo_commit = repo.head.commit.hexsha[:10]
app_logger().debug(
f"project '{self.context.temp_project_path}' , local '{temp_repo_commit}' remote '{self.context.local_repo_commit}")
if temp_repo_commit != self.context.local_repo_commit:
app_logger().debug("本地代码有变动,需要更新临时的目录")
# 本地分支和远程的分支不一样
clean_workspace(repo)
origin = repo.remote("origin")
origin.fetch()
repo.git.checkout(self.context.local_repo_commit)
self.context.update_code = True
2025-07-07 03:27:26 +00:00
2025-10-28 02:04:16 +00:00
self.context.update_config = True
self.context.update_keystore = True
self.context.update_res_img = True
self.context.update_res_icon = True
self.context.update_res_unity = True
else:
self.context.update_code = False
app_logger().debug("本地的代码没有变动,无需更新")
return
self.context.update_code = True
result = FileUtils.copy(self.context.project_original_path, self.context.temp_project_path)
app_logger().debug("Copied project '{}' to '{}'".format(self.context.project_original_path, result))
2025-07-07 03:27:26 +00:00
pass