X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tic%2Fdependency.py;h=32b89945d0052d017212e2b2dcc82e014f8cf3b4;hb=refs%2Fchanges%2F94%2F104694%2F3;hp=28a4f0ee45b1607db28433ebbd920fd423e16a91;hpb=1936539e7ea6190f0022af5891fba2f6a094f697;p=archive%2F20170607%2Ftools%2Ftic-core.git diff --git a/tic/dependency.py b/tic/dependency.py index 28a4f0e..32b8994 100644 --- a/tic/dependency.py +++ b/tic/dependency.py @@ -19,6 +19,8 @@ # Contributors: # - S-Core Co., Ltd +from lxml import etree +from tic.utils.error import TICError import logging def analyze_dependency(pkg_group): @@ -89,4 +91,51 @@ def analyze_dependency(pkg_group): return analyze() +def get_installed_packages(recipe, repoinfo, pkg_group): + logger = logging.getLogger(__name__) + if not recipe or not repoinfo: + return [] + + default = recipe.get('Default') + config = recipe.get('Configurations')[0] + platform_name = config.get('Platform') + platform = recipe.get(platform_name) + + # check groups/extraPackages + group_set = set([]) + extrapkg_set = set([]) + for g in [default, platform, config]: + if g.has_key('Groups'): + group_set.update(g.get('Groups')) + if g.has_key('ExtraPackages'): + extrapkg_set.update(g.get('ExtraPackages')) + group_dict = dict.fromkeys(group_set) + + # parsing group.xml + try: + tree = etree.parse(repoinfo[0].get('comps')) + root = tree.getroot() + except etree.XMLSyntaxError as e: + raise TICError('primary.xml syntax error. %s', e) + + # Convert groups to packages + pkg_set = set([]) + for elm in root.findall('group'): + group_name = elm.find('name').text + if group_dict.has_key(group_name): + pkglist = elm.find('packagelist') + plist = [] + for pkgreq in pkglist.findall('packagereq'): + plist.append(pkgreq.text) + pkg_set.update(set(plist)) + + # set up required package from group packages + pkg2id = pkg_group.get('pkg2id') + pkg_list = pkg_group.get('pkg_list') + for pkg in pkg_set: + pkg_id = pkg2id.get(pkg) + if pkg_id and pkg_list[pkg_id].get('dependency'): + extrapkg_set.update(set(pkg_list[pkg_id].get('dependency'))) + + return list(extrapkg_set) \ No newline at end of file