[TIC-CORE] provides default-recipe for 1st-release
[archive/20170607/tools/tic-core.git] / tic / dependency.py
index 28a4f0e..ce3c3c9 100644 (file)
@@ -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