import logging
from operator import itemgetter
+from tic.utils.rpmmisc import meetRequireVersion
def make_view_data(pkg_group):
logger = logging.getLogger(__name__)
+ def _select_provide_rpm(capability, require):
+ provide_list = []
+ if require.get('ver') is not None:
+ for provide in capability:
+ ver_data = provide['data']
+ if not ver_data.get('ver'):
+ ver_data = pkg_dict.get(provide['name']).get('version')
+ if meetRequireVersion(require, ver_data):
+ provide_list.append(provide)
+ else:
+ provide_list = capability
+
+ result = []
+ for provide in provide_list:
+ result.append(pkg_dict[provide['name']])
+
+ return result
+
def set_meta_require(meta_info):
meta_nodes = meta_info.get('nodes')
for child_meta in meta_nodes:
refer_count[child_meta['id']] += 1
set_meta_require(child_meta)
- req_list = pkg_dict[meta_info['text']].get('requires')
- if req_list is not None:
- for req in req_list:
- if provides.get(req['name']):
- provide_info = provides[req['name']][0]
- pkg_name = provide_info['name']
- if 'meta' not in pkg_dict[pkg_name]:
- child_pkg = pkg_dict[pkg_name]
- meta_nodes.append(make_node(child_pkg))
- refer_count[child_pkg['id']] += 1
+ pkg_info = pkg_dict[meta_info['text']]
+ for dep_tag in ['requires', 'recommends']:
+ if pkg_info.get(dep_tag):
+ for req in pkg_info.get(dep_tag):
+ targets = []
+ if req['name'] in provides:
+ targets = _select_provide_rpm(provides[req['name']], req)
+ elif req['name'] in files:
+ targets.append(pkg_dict.get(files[req['name']][0]))
+ elif req['name'] in pkg_dict:
+ targets.append(pkg_dict.get(req['name']))
else:
- # The meta-pkg of the other group are excluded.
# the dependent package does not exist.
pass
+
+ for pkg in targets:
+ # The meta-pkg of the other group are excluded.
+ if not pkg.get('meta'):
+ refer_count[pkg['id']] += 1
+ meta_nodes.append(make_node(pkg))
def make_node(pkg_info):
return dict(id=pkg_info['id'], text=pkg_info['name'], nodes=[])
pkg_dict = pkg_group['pkg_dict']
provides = pkg_group['provides']
+ files = pkg_group['files']
refer_count = [0] * len(pkg_dict)
# sort by pkg_name ([0]:name, [1]:root, [2]:sub1)