优化代码防止出现代码错误

This commit is contained in:
wangsong 2021-11-29 10:52:22 +08:00
parent 59efb53774
commit 14ca155ed6
2 changed files with 25 additions and 16 deletions

View File

@ -316,10 +316,8 @@ class UpdateManager():
"message:\n") + str(e) "message:\n") + str(e)
_success = False _success = False
return _success,header,desc return _success,header,desc
self._check_cache_broken(self.cache)
#检查出现安装过程异常重启 出现的话 进行异常修复 #1、 检查出现安装过程异常重启 出现的话 进行异常修复
if self.configs.getWithDefault("SystemStatus", "isabnormalreboot", False) == True: if self.configs.getWithDefault("SystemStatus", "isabnormalreboot", False) == True:
header = self.INSTALL_ALONE_PROGRESS header = self.INSTALL_ALONE_PROGRESS
self.configs.setValue("SystemStatus","isabnormalreboot",str(False),True) self.configs.setValue("SystemStatus","isabnormalreboot",str(False),True)
@ -327,6 +325,9 @@ class UpdateManager():
self.start_fix_broken() self.start_fix_broken()
return False,header,desc return False,header,desc
#检查当前系统的状态 是否存在系统为破损状态 导致出现异常
self._check_cache_broken(self.cache)
self.update_list = UpdateList(self) self.update_list = UpdateList(self)
#检查自己是否需要升级更新 #检查自己是否需要升级更新

View File

@ -15,6 +15,7 @@ from SystemUpdater.Core.utils import (
) )
import time import time
from apt import Cache from apt import Cache
from SystemUpdater.Core.UpdateList import LocalUpgradeDataList
class NowUpgradePara: class NowUpgradePara:
""" """
@ -69,6 +70,10 @@ class InstallBackend():
if self.window_main.update_list != None: if self.window_main.update_list != None:
#本地维护的升级列表和需要升级的包 #本地维护的升级列表和需要升级的包
self.upgrade_data = window_main.update_list.local_upgrade_data self.upgrade_data = window_main.update_list.local_upgrade_data
else:
#生成一个空的列表 防止出现错误 在更新和安装单包的时候这个对象还没生成
self.upgrade_data = LocalUpgradeDataList({},[],[],[])
#要拿到升级列表必须调用_make_upgrade_list #要拿到升级列表必须调用_make_upgrade_list
self.now_upgrade = NowUpgradePara([],self.MODE_DEFAULT_STATUS,[]) self.now_upgrade = NowUpgradePara([],self.MODE_DEFAULT_STATUS,[])
@ -84,7 +89,7 @@ class InstallBackend():
#拿到升级列表 #拿到升级列表
self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs = self._make_groups_list(self.upgrade_data,_upgrade_mode,partial_upgrade_list) self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs = self._make_groups_list(self.upgrade_data,_upgrade_mode,partial_upgrade_list)
pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache,_upgrade_mode) pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache,self.upgrade_data.adjust_pkgs,_upgrade_mode)
logging.info("INSTALL install:%d , upgrade:%d remove:%d",len(pkgs_install),len(pkgs_upgrade),len(pkgs_remove)) logging.info("INSTALL install:%d , upgrade:%d remove:%d",len(pkgs_install),len(pkgs_upgrade),len(pkgs_remove))
@ -125,7 +130,7 @@ class InstallBackend():
pkgs_install,pkgs_upgrade = self._make_pkgs_list(self.cache,self.upgrade_data.upgrade_groups_pkgs,self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs) pkgs_install,pkgs_upgrade = self._make_pkgs_list(self.cache,self.upgrade_data.upgrade_groups_pkgs,self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs)
#计算解决依赖关系 #计算解决依赖关系
_success,delete_pkgs,delete_desc,header,desc = self._make_problem_resolver(pkgs_install,pkgs_upgrade) _success,delete_pkgs,delete_desc,header,desc = self._make_problem_resolver(pkgs_install,pkgs_upgrade)
pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache,_upgrade_mode) pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache,self.upgrade_data.adjust_pkgs,_upgrade_mode)
pkgs_remove = delete_pkgs pkgs_remove = delete_pkgs
else: else:
# 使用全盘升级 全盘使用dist-upgrade # 使用全盘升级 全盘使用dist-upgrade
@ -133,7 +138,7 @@ class InstallBackend():
if self.cache.get_changes(): if self.cache.get_changes():
self.cache.clear() self.cache.clear()
_success = self.cache._depcache.upgrade(True) _success = self.cache._depcache.upgrade(True)
pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache,_upgrade_mode) pkgs_install,pkgs_upgrade,pkgs_remove = self._get_mark_from_cache(self.cache,self.upgrade_data.adjust_pkgs,_upgrade_mode)
except Exception as e: except Exception as e:
_success = False _success = False
desc = str(e) desc = str(e)
@ -217,17 +222,17 @@ class InstallBackend():
raise NotImplementedError raise NotImplementedError
#从cache中拿到标记的列表 #从cache中拿到标记的列表
def _get_mark_from_cache(self,cache,upgrade_mode): def _get_mark_from_cache(self,cache,_adjust_pkgs,upgrade_mode):
pkgs_install = [] pkgs_install = []
pkgs_upgrade = [] pkgs_upgrade = []
pkgs_remove = [] pkgs_remove = []
#全盘升级不做任何的调整 修复bug出现调整版本报错不需要更新升级退出 #全盘升级不做任何的调整
if upgrade_mode == self.MODE_UPGRADE_SYSTEM: if upgrade_mode == self.MODE_UPGRADE_SYSTEM:
adjust_pkgs = [] adjust_pkgs = []
else: else:
#获取调整包列表 去掉版本号 #获取调整包列表 去掉版本号
adjust_pkgs = [i.split("=")[0] for i in self.upgrade_data.adjust_pkgs] adjust_pkgs = [i.split("=")[0] for i in _adjust_pkgs]
for pkg in cache: for pkg in cache:
try: try:
@ -236,12 +241,12 @@ class InstallBackend():
if pkg.is_auto_installed: if pkg.is_auto_installed:
pkgname += "#auto" pkgname += "#auto"
if pkg.name in adjust_pkgs: if pkg.name in adjust_pkgs:
pkgs_install.append(self.upgrade_data.adjust_pkgs[adjust_pkgs.index(pkg.name)]) pkgs_install.append(_adjust_pkgs[adjust_pkgs.index(pkg.name)])
else: else:
pkgs_install.append(pkgname) pkgs_install.append(pkgname)
elif pkg.marked_upgrade: elif pkg.marked_upgrade:
if pkg.name in adjust_pkgs: if pkg.name in adjust_pkgs:
pkgs_upgrade.append(self.upgrade_data.adjust_pkgs[adjust_pkgs.index(pkg.name)]) pkgs_upgrade.append(_adjust_pkgs[adjust_pkgs.index(pkg.name)])
else: else:
pkgs_upgrade.append(pkg.name) pkgs_upgrade.append(pkg.name)
elif pkg.marked_delete: elif pkg.marked_delete:
@ -387,7 +392,7 @@ class InstallBackend():
else: else:
#当单包升级的时候 升级本身时,让程序退出,再重新启动 #当单包升级的时候 升级本身时,让程序退出,再重新启动
if self.window_main.SELF_PKG_NAME in self.cache and self.cache[self.window_main.SELF_PKG_NAME] in self.cache.get_changes(): if self.window_main.SELF_PKG_NAME in self.cache and self.cache[self.window_main.SELF_PKG_NAME] in self.cache.get_changes():
self.window_main.dbusController.DistUpdateDetectFinished(False,[self.window_main.SELF_PKG_NAME],"更新管理器升级完成,请重启控制面板进行系统更新",error_desc) self.window_main.dbusController.DistUpdateDetectFinished(False,[self.window_main.SELF_PKG_NAME],"更新管理器升级完成,请重启控制面板后再进行系统更新",error_desc)
self.window_main.dbusController.Quit(None) self.window_main.dbusController.Quit(None)
else: else:
#只有安装配置文件包 才会走到此处 #只有安装配置文件包 才会走到此处
@ -395,8 +400,12 @@ class InstallBackend():
return return
#当更新过程中安装配置包时 失败时发送错误信号 #当更新过程中安装配置包时 失败时发送错误信号
elif success == False and self.now_upgrade.upgrade_mode == self.MODE_UPGRADE_SINGLE: elif success == False and self.now_upgrade.upgrade_mode == self.MODE_UPGRADE_SINGLE:
self.window_main.dbusController.DistUpdateDetectFinished(success,upgrade_content,error_string+''+error_desc,error_desc) # 防止错误结果太长导致出现控制面板显示太多 目前最多20字符
if len(error_string + error_desc) > 20:
self.window_main.dbusController.DistUpdateDetectFinished(success,upgrade_content,error_string,error_desc)
else:
self.window_main.dbusController.DistUpdateDetectFinished(success,upgrade_content,error_string+''+error_desc,error_desc)
if error_string != '' or error_desc != '': if error_string != '' or error_desc != '':
logging.info(error_string + error_desc) logging.info(error_string + error_desc)
@ -429,7 +438,6 @@ class InstallBackend():
try: try:
error_desc = error_desc +'\n\n'+self.trans_error_details error_desc = error_desc +'\n\n'+self.trans_error_details
# is_single_groups = success == False and upgrade_mode == self.MODE_UPGRADE_PARTIAL and self.now_upgrade.upgrade_groups != [] and self.upgrade_data.single_pkgs == []
if (upgrade_mode == self.MODE_UPGRADE_ALL and success == False) or (upgrade_mode == self.MODE_UPGRADE_PARTIAL and self.now_upgrade.upgrade_groups != []): if (upgrade_mode == self.MODE_UPGRADE_ALL and success == False) or (upgrade_mode == self.MODE_UPGRADE_PARTIAL and self.now_upgrade.upgrade_groups != []):
#获取当前系统中最新的cache #获取当前系统中最新的cache