X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=tic%2Fdependency.py;h=ce3c3c9f0827693c240d883bbc2c12f0340a2b1b;hb=95e35418419d443b87102155fa2822e6c63220a5;hp=28a4f0ee45b1607db28433ebbd920fd423e16a91;hpb=1936539e7ea6190f0022af5891fba2f6a094f697;p=archive%2F20170607%2Ftools%2Ftic-core.git diff --git a/tic/dependency.py b/tic/dependency.py index 28a4f0e..ce3c3c9 100644 --- a/tic/dependency.py +++ b/tic/dependency.py @@ -18,7 +18,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 +90,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