64 lines
2.6 KiB
Python
64 lines
2.6 KiB
Python
import os.path
|
||
import shutil
|
||
|
||
from git import Repo
|
||
|
||
from scripts.task import Task
|
||
from utils import FileUtils
|
||
from utils.logger_utils import app_logger
|
||
|
||
|
||
def clean_workspace(repo):
|
||
# 1. 放弃工作区所有已跟踪文件的修改(包括恢复被删除的已跟踪文件)
|
||
# - checkout 命令会将工作区文件重置为当前 HEAD 版本的状态
|
||
repo.git.checkout('.')
|
||
|
||
# 2. 删除工作区所有未跟踪的文件和目录(包括空目录)
|
||
# - -f:强制删除(避免询问)
|
||
# - -d:同时删除未跟踪的目录
|
||
repo.git.clean('-fd')
|
||
|
||
print("工作空间已清空,恢复到当前分支最新提交状态")
|
||
|
||
|
||
class ProjectCopy(Task):
|
||
|
||
def execute(self):
|
||
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)
|
||
|
||
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
|
||
|
||
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))
|
||
pass
|