diff --git a/pkg/utils/updater.py b/pkg/utils/updater.py index f169f9ca..caf59eeb 100644 --- a/pkg/utils/updater.py +++ b/pkg/utils/updater.py @@ -1,5 +1,7 @@ import datetime +import pkg.utils.context + def update_all(): """使用dulwich更新源码""" @@ -8,9 +10,22 @@ def update_all(): except ModuleNotFoundError: raise Exception("dulwich模块未安装,请查看 https://github.com/RockChinQ/QChatGPT/issues/77") try: + before_commit_id = get_current_commit_id() from dulwich import porcelain repo = porcelain.open_repo('.') porcelain.pull(repo) + after_commit_id = get_current_commit_id() + + change_log = "" + + for entry in repo.get_walker(): + if str(entry.commit.id)[2:-1] == before_commit_id: + break + tz = datetime.timezone(datetime.timedelta(hours=entry.commit.commit_timezone // 3600)) + dt = datetime.datetime.fromtimestamp(entry.commit.commit_time, tz) + change_log += dt.strftime('%Y-%m-%d %H:%M:%S') + " [" + str(entry.commit.message, encoding="utf-8").strip()+"]\n" + + pkg.utils.context.get_qqbot_manager().notify_admin("更新完成,更新内容如下:\n"+change_log) except ModuleNotFoundError: raise Exception("dulwich模块未安装,请查看 https://github.com/RockChinQ/QChatGPT/issues/77") except dulwich.porcelain.DivergedBranches: @@ -59,6 +74,24 @@ def get_commit_id_and_time_and_msg() -> str: return str(entry.commit.id)[2:9] + " " + dt.strftime('%Y-%m-%d %H:%M:%S') + " [" + str(entry.commit.message, encoding="utf-8").strip()+"]" +def get_current_commit_id() -> str: + """检查是否有新版本""" + try: + import dulwich + except ModuleNotFoundError: + raise Exception("dulwich模块未安装,请查看 https://github.com/RockChinQ/QChatGPT/issues/77") + + from dulwich import porcelain + + repo = porcelain.open_repo('.') + current_commit_id = "" + for entry in repo.get_walker(): + current_commit_id = str(entry.commit.id)[2:-1] + break + + return current_commit_id + + def is_new_version_available() -> bool: """检查是否有新版本""" try: @@ -71,11 +104,8 @@ def is_new_version_available() -> bool: repo = porcelain.open_repo('.') fetch_res = porcelain.ls_remote(porcelain.get_remote_repo(repo, "origin")[1]) - current_commit_id = "" - for entry in repo.get_walker(): - current_commit_id = str(entry.commit.id)[2:9] - break + current_commit_id = get_current_commit_id() - latest_commit_id = str(fetch_res[b'HEAD'])[2:9] + latest_commit_id = str(fetch_res[b'HEAD'])[2:-1] return current_commit_id != latest_commit_id