From 88773cb52eec1ca47363b39dbe5b0367eb15aafb Mon Sep 17 00:00:00 2001 From: dingsheng Date: Thu, 24 Oct 2024 09:50:57 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BB=93=E5=BA=93=E8=BD=AF?= =?UTF-8?q?=E4=BB=B6=E5=8C=85=E4=BE=9D=E8=B5=96=E8=A7=A3=E6=9E=90=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/depparse.py | 53 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/src/utils/depparse.py b/src/utils/depparse.py index f32b29e..fafc4db 100755 --- a/src/utils/depparse.py +++ b/src/utils/depparse.py @@ -16,6 +16,7 @@ import copy import json from collections import defaultdict import hawkey +import dnf class DepParse(object): """ @@ -148,3 +149,55 @@ class RepoDepParse(DepParse): else: res_set = set() return res_set + + def _get_repo_pkg_deps(self): + """ + 获取repo仓库中所有软件包南向依赖 + Returns: + package_dep_d: 软件包南向依赖字典 + """ + repos = self._load_data() + package_dep_d = defaultdict(list) + with dnf.Base() as base: + conf = base.conf + for r in repos: + base.repos.add_new_repo( + r.get('repo_id'), + conf, + baseurl = [r.get('baseurl')], + sslverify=0, + ) + base.fill_sack(load_system_repo=False) + print("Enabled repositories:") + for repo in base.repos.iter_enabled(): + print("id: {}".format(repo.id)) + print("baseurl: {}".format(repo.baseurl)) + q = base.sack.query() + for p in q.available(): + package_dep_d[p.name] = list(set(map(lambda x : '{}'.format(x.name),q.filter(provides=p.requires)))) + return package_dep_d + + def _get_repo_pkg_deps_by(self): + """ + 获取repo仓库中所有软件包北向依赖 + Returns: + dict: 软件包北向依赖字典 + """ + deps_by_dict = defaultdict(list) + dep_pkgs_dict = copy.deepcopy(self.dep_dict) + for p in dep_pkgs_dict.keys(): + deps_by_dict[p] + for k,v in dep_pkgs_dict.items(): + if not v: + continue + else: + for dep_pkg in v: + tmp_k = dep_pkg + if tmp_k not in list(deps_by_dict.keys()): + deps_by_dict[tmp_k] = [k] + else: + tmp_v = deps_by_dict.get(tmp_k) + tmp_v.append(k) + tmp_v = list(set(tmp_v)) + deps_by_dict[tmp_k] = tmp_v + return deps_by_dict \ No newline at end of file -- Gitee