Merge branch 'backend_dev' into 'dev'
Backend dev See merge request kylin-desktop/update-manager-group/kylin-system-updater!88
This commit is contained in:
commit
987078f6c7
|
@ -11,21 +11,11 @@ import datetime
|
|||
from gettext import gettext as _
|
||||
|
||||
import apt_pkg
|
||||
|
||||
from ..backend import InstallBackend
|
||||
DB_FILE = os.path.join("/var/cache/kylin-system-updater/kylin-system-updater.db")
|
||||
INSTALLED_LIST = [{"item": "errorcode", "type": "int", "default": "0"}]
|
||||
DISPALY_LIST = []
|
||||
|
||||
MODE_DEFAULT_STATUS = -1
|
||||
#部分升级
|
||||
MODE_UPGRADE_PARTIAL = 0
|
||||
#全部升级
|
||||
MODE_UPGRADE_ALL = 1
|
||||
#系统全盘升级
|
||||
MODE_UPGRADE_SYSTEM = 2
|
||||
#后端内部安装包使用
|
||||
MODE_UPGRADE_SINGLE = 3
|
||||
|
||||
class Sqlite3Server(object):
|
||||
def __init__(self, window_main):
|
||||
self.connect = None
|
||||
|
@ -158,7 +148,7 @@ class Sqlite3Server(object):
|
|||
status = 'failed'
|
||||
|
||||
# 判断更新方式
|
||||
if mode == MODE_UPGRADE_PARTIAL: # 部分更新
|
||||
if mode == InstallBackend.MODE_UPGRADE_PARTIAL: # 部分更新
|
||||
pkg_adj = ""
|
||||
# 判断更新包为单包或更新组
|
||||
if pkg_group:
|
||||
|
@ -205,7 +195,7 @@ class Sqlite3Server(object):
|
|||
self.insert_into_updateinfo(pkgname, pkgversion, pkgdescription, timestr, status, "1", errstr)
|
||||
# FIXME: 这里也需要, 发送插入数据库成功的信号
|
||||
self.window_main.dbusController.UpdateSqlitSingle(pkgname, timestr)
|
||||
elif mode == MODE_UPGRADE_ALL: # 系统升级
|
||||
elif mode == InstallBackend.MODE_UPGRADE_ALL: # 系统升级
|
||||
# # insert signal deb first
|
||||
for i in pkg_list:
|
||||
try:
|
||||
|
@ -239,7 +229,7 @@ class Sqlite3Server(object):
|
|||
self.init_sqlit()
|
||||
self.insert_into_updateinfo(str(i), pkgversion, pkgdescription, timestr, status, "1", errstr)
|
||||
self.window_main.dbusController.UpdateSqlitSingle(str(i), timestr)
|
||||
elif mode == MODE_UPGRADE_SYSTEM: # 全盘升级
|
||||
elif mode == InstallBackend.MODE_UPGRADE_SYSTEM: # 全盘升级
|
||||
pkgs_install,pkgs_upgrade,pkgs_remove = self.refreshpkglist()
|
||||
pkg_list = list(set(pkgs_upgrade).union(set(pkgs_install)))
|
||||
for i in pkg_list:
|
||||
|
|
|
@ -22,7 +22,6 @@ from .Core.loop import mainloop
|
|||
import time
|
||||
from gettext import gettext as _
|
||||
from SystemUpdater.backend import DownloadBackend as downb
|
||||
from SystemUpdater.Core.Database import MODE_UPGRADE_SINGLE
|
||||
import apt_pkg
|
||||
from SystemUpdater.Core.UpdaterConfigParser import UpgradeConfig
|
||||
|
||||
|
@ -208,7 +207,7 @@ class UpdateManager():
|
|||
logging.info("Self-Updater(%s) start upgrading...",self.SELF_PKG_NAME)
|
||||
pkg_json.mark_upgrade()
|
||||
|
||||
self.start_install(MODE_UPGRADE_SINGLE,True)
|
||||
self.start_install(InstallBackend.MODE_UPGRADE_SINGLE,True)
|
||||
#直接退出 进行安装程序
|
||||
_success = False
|
||||
header = self.INSTALL_ALONE_PROGRESS
|
||||
|
@ -246,7 +245,7 @@ class UpdateManager():
|
|||
logging.info("groups JSON ConfigPkgs(%s) start upgrading...",self.GROUPS_PKG_NAME)
|
||||
pkg_json.mark_upgrade()
|
||||
|
||||
self.start_install(MODE_UPGRADE_SINGLE,True)
|
||||
self.start_install(InstallBackend.MODE_UPGRADE_SINGLE,True)
|
||||
#直接退出
|
||||
_success = False
|
||||
header = self.INSTALL_ALONE_PROGRESS
|
||||
|
@ -256,7 +255,7 @@ class UpdateManager():
|
|||
else:
|
||||
logging.info("groups JSON ConfigPkgs(%s) start new installing...",self.GROUPS_PKG_NAME)
|
||||
pkg_json.mark_install()
|
||||
self.start_install(MODE_UPGRADE_SINGLE,True)
|
||||
self.start_install(InstallBackend.MODE_UPGRADE_SINGLE,True)
|
||||
#直接退出
|
||||
_success = False
|
||||
header = self.INSTALL_ALONE_PROGRESS
|
||||
|
|
|
@ -11,7 +11,6 @@ from .Core.utils import humanize_size
|
|||
from SystemUpdater.Core.utils import (
|
||||
unLockedEnableShutdown,
|
||||
)
|
||||
from SystemUpdater.Core.Database import MODE_UPGRADE_PARTIAL,MODE_UPGRADE_ALL,MODE_UPGRADE_SYSTEM
|
||||
|
||||
UPDATER_DBUS_INTERFACE = 'com.kylin.systemupgrade.interface'
|
||||
UPDATER_DBUS_PATH = '/com/kylin/systemupgrade'
|
||||
|
@ -211,7 +210,7 @@ class UpdateManagerDbusController(dbus.service.Object):
|
|||
return False,'In the process of updating or Upgrading...'
|
||||
else:
|
||||
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' DistUpgradeAll and is_install:%r...',is_install)
|
||||
self.parent.start_install(MODE_UPGRADE_ALL,is_install)
|
||||
self.parent.start_install(InstallBackend.MODE_UPGRADE_ALL,is_install)
|
||||
return True,'success'
|
||||
except Exception as e:
|
||||
return False,str(e)
|
||||
|
@ -237,7 +236,7 @@ class UpdateManagerDbusController(dbus.service.Object):
|
|||
new_upgrade_list = list(set(partial_upgrade_list) & set(local_upgrade_groups + local_single_pkgs))
|
||||
|
||||
if new_upgrade_list:
|
||||
self.parent.start_install(MODE_UPGRADE_PARTIAL,is_install,partial_upgrade_list)
|
||||
self.parent.start_install(InstallBackend.MODE_UPGRADE_PARTIAL,is_install,partial_upgrade_list)
|
||||
return True,'dbus upgrading'
|
||||
else:
|
||||
logging.warning('input upgrade list(%s) not in local upgrade_list(%s)',partial_upgrade_list,local_upgrade_groups+local_single_pkgs)
|
||||
|
@ -290,7 +289,7 @@ class UpdateManagerDbusController(dbus.service.Object):
|
|||
return False,'In the process of updating or Upgrading...'
|
||||
else:
|
||||
logging.info(COLORMETHOR_PREFIX+'method'+COLORLOG_SUFFIX+' DistUpgradeSystem and is_install:%r...',is_install)
|
||||
self.parent.start_install(MODE_UPGRADE_SYSTEM,is_install)
|
||||
self.parent.start_install(InstallBackend.MODE_UPGRADE_SYSTEM,is_install)
|
||||
return True,'success'
|
||||
except Exception as e:
|
||||
logging.error(False, str(e))
|
||||
|
@ -421,9 +420,10 @@ class UpdateManagerDbusController(dbus.service.Object):
|
|||
success,upgrade_group, error_string,error_desc)
|
||||
|
||||
#发送下载包信息 fix bug 字节大小改成u 无符号32位
|
||||
@dbus.service.signal(UPDATER_DBUS_INTERFACE, signature='iiuui')
|
||||
def UpdateDownloadInfo(self, current_items, total_items, currenty_bytes, total_bytes, current_cps):
|
||||
logging.info(COLORLOG_PREFIX + "emit" + COLORLOG_SUFFIX +" UpdateDownloadInfo current_items = %d, total_items = %d, currenty_bytes = %s, total_bytes = %s, current_cps = %s/s",\
|
||||
@dbus.service.signal(UPDATER_DBUS_INTERFACE, signature='asiiuui')
|
||||
def UpdateDownloadInfo(self,upgrade_group,current_items, total_items, currenty_bytes, total_bytes, current_cps):
|
||||
logging.info(COLORLOG_PREFIX + "emit" + COLORLOG_SUFFIX +" UpdateDownloadInfo upgrade_group = %a,current_items = %d, total_items = %d, currenty_bytes = %s, total_bytes = %s, current_cps = %s/s",\
|
||||
upgrade_group,\
|
||||
current_items, total_items, \
|
||||
humanize_size(currenty_bytes), humanize_size(total_bytes),\
|
||||
humanize_size(current_cps))
|
||||
|
@ -443,8 +443,8 @@ class UpdateManagerDbusController(dbus.service.Object):
|
|||
# 信号是否可取消
|
||||
@dbus.service.signal(UPDATER_DBUS_INTERFACE, signature='b')
|
||||
def Cancelable(self, Cancelable):
|
||||
logging.info(COLORLOG_PREFIX + "emit" + COLORLOG_SUFFIX +" Cancelable: %r",\
|
||||
Cancelable)
|
||||
pass
|
||||
# logging.info(COLORLOG_PREFIX + "emit" + COLORLOG_SUFFIX +" Cancelable: %r",Cancelable)
|
||||
|
||||
# 插入数据库完成后发送
|
||||
@dbus.service.signal(UPDATER_DBUS_INTERFACE, signature='ss')
|
||||
|
|
|
@ -37,8 +37,8 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
self.static_progress = 0
|
||||
self.trans_status = ''
|
||||
self.details = ''
|
||||
self.is_enter_install = False
|
||||
|
||||
self.on_install_stage = False
|
||||
self.trans_cancelable = False
|
||||
self.last_action_timestamp = time.time()
|
||||
|
||||
if self.action == self.ACTION_INSTALL:
|
||||
|
@ -259,13 +259,15 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
if self.trans_progress != 100:
|
||||
self.window_main.dbusController.UpdateDetectStatusChanged(progress,status)
|
||||
elif action == self.ACTION_INSTALL:
|
||||
if progress >= 50 and self.is_enter_install == False:
|
||||
self.is_enter_install = True
|
||||
#50%时候 属于下载状态切换到安装状态的过程
|
||||
if progress >= 51 and self.on_install_stage == False:
|
||||
self.on_install_stage = True
|
||||
#进度安装阶段标志位,使用鉴别是否出现安装过程中强制关闭 之后进行修复使用得
|
||||
self.window_main.configs.setValue("SystemStatus","isabnormalreboot",str(True),True)
|
||||
pass #LockedPreventShutdown()
|
||||
|
||||
#此处发不发信号一样 频率很低
|
||||
#在下载阶段发送取消信号
|
||||
if self.on_install_stage == False:
|
||||
self.window_main.dbusController.Cancelable(self.trans_cancelable)
|
||||
self.window_main.dbusController.UpdateDloadAndInstStaChanged(upgrade_content,progress,status,details)
|
||||
# elif action == self.ACTION_FIX_BROKEN:
|
||||
# self.window_main.dbusController.FixBrokenStatusChanged(progress,status)
|
||||
|
@ -282,6 +284,7 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
def _on_progress_download_changed(self,trans,current_items, total_items, currenty_bytes, total_bytes, current_cps, eta):
|
||||
if self.action == self.ACTION_INSTALL:
|
||||
self.window_main.dbusController.UpdateDownloadInfo(\
|
||||
self.now_upgrade.upgrade_groups+self.now_upgrade.single_pkgs,\
|
||||
current_items, total_items, \
|
||||
currenty_bytes, total_bytes, \
|
||||
current_cps)
|
||||
|
@ -294,7 +297,10 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
humanize_size(current_cps))
|
||||
|
||||
def _on_cancellable_changed(self, trans, Cancelable):
|
||||
logging.info("\033[43;1m" + "emit" + "\033[0m" +" Cancelable: %r",Cancelable)
|
||||
self.window_main.dbusController.Cancelable(Cancelable)
|
||||
#增加取消信号的频发机制
|
||||
self.trans_cancelable = Cancelable
|
||||
|
||||
#增加记录当产生错误的时候 详细信息
|
||||
def _on_error_changed(self, trans,error_code, error_details):
|
||||
|
@ -322,7 +328,7 @@ class InstallBackendAptdaemon(InstallBackend):
|
|||
error_desc = ''
|
||||
|
||||
#退出
|
||||
self.is_enter_install = False
|
||||
self.on_install_stage = False
|
||||
if status == EXIT_FAILED:
|
||||
error_string = get_error_string_from_enum(trans.error.code)
|
||||
error_desc = get_error_description_from_enum(trans.error.code)
|
||||
|
|
|
@ -15,7 +15,6 @@ from SystemUpdater.Core.utils import (
|
|||
check_free_space
|
||||
)
|
||||
import time
|
||||
from ..Core.Database import MODE_DEFAULT_STATUS,MODE_UPGRADE_PARTIAL,MODE_UPGRADE_ALL,MODE_UPGRADE_SYSTEM,MODE_UPGRADE_SINGLE
|
||||
|
||||
class NowUpgradePara:
|
||||
"""
|
||||
|
@ -23,9 +22,9 @@ class NowUpgradePara:
|
|||
run
|
||||
"""
|
||||
def __init__(self,
|
||||
upgrade_groups=[],
|
||||
upgrade_mode=MODE_DEFAULT_STATUS,
|
||||
single_pkgs=[],
|
||||
upgrade_groups,
|
||||
upgrade_mode,
|
||||
single_pkgs,
|
||||
):
|
||||
#组列表中包含的包
|
||||
self.upgrade_groups = upgrade_groups
|
||||
|
@ -47,27 +46,39 @@ class InstallBackend():
|
|||
ACTION_FIX_INCOMPLETE = 7
|
||||
ACTION_CLEAN = 8
|
||||
|
||||
#ACTION_INSTALL 的子类
|
||||
MODE_DEFAULT_STATUS = -1
|
||||
#部分升级
|
||||
MODE_UPGRADE_PARTIAL = 0
|
||||
#全部升级
|
||||
MODE_UPGRADE_ALL = 1
|
||||
#系统全盘升级
|
||||
MODE_UPGRADE_SYSTEM = 2
|
||||
#后端内部安装包使用
|
||||
MODE_UPGRADE_SINGLE = 3
|
||||
|
||||
def __init__(self, window_main, action):
|
||||
self.window_main = window_main
|
||||
self.cache = window_main.cache
|
||||
self.action = action
|
||||
|
||||
#对所有的操作进行枷锁 当执行完毕后返回到_action_done 进行解锁,除了计算依赖模式 不进入_action_done 单独解锁
|
||||
self.window_main.is_working = action
|
||||
|
||||
#更新的时候此对象还未生成
|
||||
if self.window_main.update_list != None:
|
||||
#本地维护的升级列表和需要升级的包
|
||||
self.upgrade_data = window_main.update_list.local_upgrade_data
|
||||
#要拿到升级列表必须调用_make_upgrade_list
|
||||
self.now_upgrade = NowUpgradePara([],MODE_DEFAULT_STATUS,[])
|
||||
self.now_upgrade = NowUpgradePara([],self.MODE_DEFAULT_STATUS,[])
|
||||
|
||||
def start(self,_upgrade_mode = MODE_DEFAULT_STATUS,partial_upgrade_list = []):
|
||||
#对所有的操作进行枷锁 当执行完毕后返回到_action_done 进行解锁,除了计算依赖模式 不进入_action_done 单独解锁
|
||||
self.window_main.is_working = self.action
|
||||
|
||||
#安装升级包 首先必须调用ACTION_CHECK_RESOLVER 计算依赖解决方便 标记cache 进行升级
|
||||
if self.action == self.ACTION_INSTALL:
|
||||
self.now_upgrade.upgrade_mode = _upgrade_mode
|
||||
|
||||
if _upgrade_mode != MODE_UPGRADE_SINGLE:
|
||||
if _upgrade_mode != self.MODE_UPGRADE_SINGLE:
|
||||
#拿到升级列表
|
||||
self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs = self._make_groups_list(self.upgrade_data,_upgrade_mode,partial_upgrade_list)
|
||||
|
||||
|
@ -87,7 +98,7 @@ class InstallBackend():
|
|||
if _success == False:
|
||||
header = _("Disk space is insufficient, please clean the disk and then upgrade")
|
||||
#当单包安装检查内存不够的时候,报错到控制面板 单包安装属于更新才使用的所以直接赋值为更新 再进行之后的报错处理
|
||||
if self.now_upgrade.upgrade_mode == MODE_UPGRADE_SINGLE:
|
||||
if self.now_upgrade.upgrade_mode == self.MODE_UPGRADE_SINGLE:
|
||||
self.action = self.ACTION_UPDATE
|
||||
|
||||
self._action_done(self.action,True,False,header,desc)
|
||||
|
@ -105,7 +116,7 @@ class InstallBackend():
|
|||
#检查依赖之前 判断是否需要重启aptdeamon
|
||||
self.window_main.restart_aptdeamon()
|
||||
time.sleep(0.5)
|
||||
if _upgrade_mode != MODE_UPGRADE_SYSTEM:
|
||||
if _upgrade_mode != self.MODE_UPGRADE_SYSTEM:
|
||||
#获取要升级的组列表
|
||||
self.now_upgrade.upgrade_groups,self.now_upgrade.single_pkgs = self._make_groups_list(self.upgrade_data,_upgrade_mode,partial_upgrade_list)
|
||||
#获取要升级和安装的包列表
|
||||
|
@ -141,7 +152,7 @@ class InstallBackend():
|
|||
raw_description.append(getattr(pkg_obj.candidate, "summary", ''))
|
||||
#解锁忙碌
|
||||
self.window_main.is_working = self.ACTION_DEFUALT_STATUS
|
||||
if _upgrade_mode != MODE_UPGRADE_SYSTEM:
|
||||
if _upgrade_mode != self.MODE_UPGRADE_SYSTEM:
|
||||
self.window_main.dbusController.UpdateDependResloveStatus(_success,is_remove_pkgs,pkgs_remove,raw_description,delete_desc,header,desc)
|
||||
else:
|
||||
self.window_main.dbusController.DistupgradeDependResloveStatus(_success,is_remove_pkgs,pkgs_remove,raw_description,header,desc)
|
||||
|
@ -210,7 +221,7 @@ class InstallBackend():
|
|||
pkgs_remove = []
|
||||
|
||||
#全盘升级不做任何的调整 修复bug,出现调整版本,报错不需要更新升级退出
|
||||
if upgrade_mode == MODE_UPGRADE_SYSTEM:
|
||||
if upgrade_mode == self.MODE_UPGRADE_SYSTEM:
|
||||
adjust_pkgs = []
|
||||
else:
|
||||
#获取调整包列表 去掉版本号
|
||||
|
@ -243,7 +254,7 @@ class InstallBackend():
|
|||
pkg_list = []
|
||||
|
||||
#可选升级
|
||||
if _upgrade_mode == MODE_UPGRADE_PARTIAL:
|
||||
if _upgrade_mode == self.MODE_UPGRADE_PARTIAL:
|
||||
for i in partial_upgrade_list:
|
||||
#组升级方式
|
||||
if i in upgrade_data.upgrade_groups:
|
||||
|
@ -255,7 +266,7 @@ class InstallBackend():
|
|||
logging.warning("this package(%s) not in selected list",i)
|
||||
|
||||
#全部升级列表
|
||||
elif _upgrade_mode == MODE_UPGRADE_ALL:
|
||||
elif _upgrade_mode == self.MODE_UPGRADE_ALL:
|
||||
groups_list = upgrade_data.upgrade_groups
|
||||
pkg_list = upgrade_data.single_pkgs
|
||||
|
||||
|
@ -459,7 +470,7 @@ class InstallBackend():
|
|||
error_string, error_desc)
|
||||
if success:
|
||||
#当组列表为空时 表示现在的单独进行安装某些包或卸载,不发信号到控制面板
|
||||
if self.now_upgrade.upgrade_mode != MODE_UPGRADE_SINGLE:
|
||||
if self.now_upgrade.upgrade_mode != self.MODE_UPGRADE_SINGLE:
|
||||
#升级完成后从升级列表删除
|
||||
for groups in self.now_upgrade.upgrade_groups:
|
||||
self.upgrade_data.upgrade_groups.remove(groups)
|
||||
|
@ -476,7 +487,7 @@ class InstallBackend():
|
|||
self.window_main.start_available()
|
||||
return
|
||||
#当更新过程中安装配置包时 失败时发送错误信号
|
||||
elif success == False and self.now_upgrade.upgrade_mode == MODE_UPGRADE_SINGLE:
|
||||
elif success == False and self.now_upgrade.upgrade_mode == self.MODE_UPGRADE_SINGLE:
|
||||
self.window_main.dbusController.UpdateDetectFinished(success,upgrade_content,error_string+','+error_desc,error_desc)
|
||||
|
||||
if error_string != '' or error_desc != '':
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
kylin-system-updater (1.2.12kord) v101; urgency=medium
|
||||
|
||||
* BUG: #89818:【系统更新】将系统字体调整为最大,控制面板-更新界面"您的系统已是最新未跟随改变";且界面显示不全
|
||||
* #89554:【系统更新】控制面板-更新界面没有兼容ukui3.1
|
||||
* #89817:【系统更新】控制面板-更新界面未进行汉化
|
||||
* #89810:【系统更新】全部更新缺少错误原因提示,且取消全部下载建议提示下载取消。将依赖冲突的包以虚包形式进行全部更新,提示部分更新失败;空间少于备份空间或者安装包的空间,全部更新后提示部分更新失败。都未展示实际原因
|
||||
* 需求号: 无
|
||||
* 其他改动说明:增加自主升级功能,优化进度显示保持功能
|
||||
* 其他改动影响域: 影响更新检测功能,在更新检测时将更新系统升级包本身
|
||||
|
||||
-- luoxueyi <luoxueyi@kylinos.cn> Wed, 24 Nov 2021 17:41:34 +0800
|
||||
|
||||
kylin-system-updater (1.2.9kord) v101; urgency=medium
|
||||
|
||||
* BUG: bug#91191,bug#90533,bug#91103,bug#90454,bug#89871
|
||||
|
|
Loading…
Reference in New Issue