From 959ccf24270ab509c2e57653cc9eeb9cf104c0fc Mon Sep 17 00:00:00 2001 From: panzhe0328 Date: Fri, 6 Dec 2024 17:00:01 +0800 Subject: [PATCH] Add conflicts packages check --- src/utils/config.py | 3 ++- src/utils/localcheck.py | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/src/utils/config.py b/src/utils/config.py index 3526485..f3b4ae0 100644 --- a/src/utils/config.py +++ b/src/utils/config.py @@ -42,7 +42,8 @@ class BaseConfig(): # localcheck LOCAL_CHECK_ERROR_INFO = { - 1001:'The current system has dependency missing packages. Please verify the packages requires' + 1001:'The current system has dependency missing packages. Please verify the packages requires', + 1002:'The current system has conflicts packages. Please verify the packages' } # util diff --git a/src/utils/localcheck.py b/src/utils/localcheck.py index 9cc20c0..cff1a51 100644 --- a/src/utils/localcheck.py +++ b/src/utils/localcheck.py @@ -44,14 +44,49 @@ class LocalCheck(object): pkgs_missreq_dict[p_name] = missreq_l return pkgs_missreq_dict + + @classmethod + def check_pkgsconflicts(cls): + """ + 获取本地已安装软件包中,依赖冲突的软件包 + Returns: + pkgs_conflicts_dict: 软件包冲突字典 + """ + all_pkgs_dict = dict() + pkgs_conflicts_dict = dict() + + sack = hawkey.Sack() + sack.load_system_repo(build_cache=False) + q = hawkey.Query(sack) + + for p in q: + p_name = p.name + all_pkgs_dict[p_name] = [] + for conflict in p.conflicts: + provider_query = hawkey.Query(sack).filter(provides=str(conflict)) + if provider_query: + for c in provider_query: + all_pkgs_dict[p_name].append(c.name) + + for k, v in all_pkgs_dict.items(): + if v: + pkgs_conflicts_dict[k] = v + return pkgs_conflicts_dict @classmethod def check(cls): """ 本地检查入口函数 """ + + # 本地软件包依赖缺失检查 pkgs_missreq_dict = cls.check_pkgsmissreq() if pkgs_missreq_dict: print("{} : {}".format(BaseConfig.LOCAL_CHECK_ERROR_INFO.get(1001,''), str(pkgs_missreq_dict))) + + # 本地软件包依赖冲突检查 + pkgs_conflicts_dict = cls.check_pkgsconflicts() + if pkgs_conflicts_dict: + print("{} : {}".format(BaseConfig.LOCAL_CHECK_ERROR_INFO.get(1002,''), str(pkgs_conflicts_dict))) return True \ No newline at end of file -- Gitee