Salome HOME
ajout option d'impression des graphes de dépendance
[tools/sat.git] / commands / prepare.py
index cb630e5f904385f7a88f506a79fd802baac35168..66f77e0606c7a09372af5295fe17f6a5deef33b2 100644 (file)
@@ -27,15 +27,17 @@ import src.debug as DBG
 # Define all possible option for prepare command :  sat prepare <options>
 parser = src.options.Options()
 parser.add_option('p', 'products', 'list2', 'products',
-    _('Optional: products to prepare. This option can be'
-    ' passed several time to prepare several products.'))
+    _('Optional: products to prepare. This option accepts a comma separated list.'))
 parser.add_option('f', 'force', 'boolean', 'force',
     _("Optional: force to prepare the products in development mode."))
 parser.add_option('', 'force_patch', 'boolean', 'force_patch', 
     _("Optional: force to apply patch to the products in development mode."))
+parser.add_option('c', 'complete', 'boolean', 'complete',
+    _("Optional: completion mode, only prepare products not present in SOURCES dir."),
+    False)
 
 
-def find_products_already_getted(l_products):
+def find_products_already_prepared(l_products):
     '''function that returns the list of products that have an existing source 
        directory.
     
@@ -47,7 +49,7 @@ def find_products_already_getted(l_products):
     l_res = []
     for p_name_p_cfg in l_products:
         __, prod_cfg = p_name_p_cfg
-        if os.path.exists(prod_cfg.source_dir):
+        if "source_dir" in prod_cfg and os.path.exists(prod_cfg.source_dir):
             l_res.append(p_name_p_cfg)
     return l_res
 
@@ -95,7 +97,21 @@ def run(args, runner, logger):
     else: # no product interpeted as all products
         listProd = [name for name, tmp in products_infos]
 
-    DBG.write("prepare products", sorted(listProd))
+    if options.complete:
+        # remove products that are already prepared 'completion mode)
+        pi_already_prepared=find_products_already_prepared(products_infos)
+        l_already_prepared = [i for i, tmp in pi_already_prepared]
+        newList, removedList = removeInList(listProd, l_already_prepared)
+        listProd = newList
+        if len(newList) == 0 and len(removedList) > 0 :
+            msg = "\nAll the products are already installed, do nothing!\n"
+            logger.write(src.printcolors.printcWarning(msg), 1)
+            return 0
+        if len(removedList) > 0 :
+            msg = "\nList of already prepared products that are skipped : %s\n" % ",".join(removedList)
+            logger.write(msg, 3)
+        
+
     args_product_opt = '--products ' + ",".join(listProd)
     do_source = (len(listProd) > 0)
 
@@ -103,7 +119,7 @@ def run(args, runner, logger):
     ldev_products = [p for p in products_infos if src.product.product_is_dev(p[1])]
     newList = listProd # default
     if not options.force and len(ldev_products) > 0:
-        l_products_not_getted = find_products_already_getted(ldev_products)
+        l_products_not_getted = find_products_already_prepared(ldev_products)
         listNot = [i for i, tmp in l_products_not_getted]
         newList, removedList = removeInList(listProd, listNot)
         if len(removedList) > 0:
@@ -138,10 +154,10 @@ Use the --force_patch option to overwrite it.
     args_source = args_appli + args_product_opt  
     args_patch = args_appli + args_product_opt_patch
       
-    # Initialize the results to a failing status
-    res_clean = 1
-    res_source = 1
-    res_patch = 1
+    # Initialize the results to a running status
+    res_clean = 0
+    res_source = 0
+    res_patch = 0
     
     # Call the commands using the API
     if do_clean: