X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=commands%2Fclean.py;h=07239bc4a8a384f9dec1944e6ab61395ddf45f1a;hb=1d77008157d909e80fe6ed9871446542bdbb0af2;hp=eb3ccfa8ab2ecbf8017fee36b05b81550379dd4b;hpb=747e97f705b1477bb5600dfc796bb29b00a15b1f;p=tools%2Fsat.git diff --git a/commands/clean.py b/commands/clean.py index eb3ccfa..07239bc 100644 --- a/commands/clean.py +++ b/commands/clean.py @@ -16,9 +16,9 @@ # License along with this library; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -import src +import re -import prepare +import src # Compatibility python 2/3 for input function # input stays input for python 3 and input = raw_input for python 2 @@ -27,21 +27,66 @@ try: except NameError: pass +PROPERTY_EXPRESSION = "^.+:.+$" + # Define all possible option for the clean command : sat clean parser = src.options.Options() parser.add_option('p', 'products', 'list2', 'products', - _('products to clean. This option can be' + _('Optional: Products to clean. This option can be' ' passed several time to clean several products.')) +parser.add_option('', 'properties', 'string', 'properties', + _('Optional: Filter the products by their properties.\n\tSyntax: ' + '--properties :')) parser.add_option('s', 'sources', 'boolean', 'sources', - _("Clean the product source directories.")) + _("Optional: Clean the product source directories.")) parser.add_option('b', 'build', 'boolean', 'build', - _("Clean the product build directories.")) + _("Optional: Clean the product build directories.")) parser.add_option('i', 'install', 'boolean', 'install', - _("Clean the product install directories.")) + _("Optional: Clean the product install directories.")) parser.add_option('a', 'all', 'boolean', 'all', - _("Clean the product source, build and install directories.")) + _("Optional: Clean the product source, build and install directories.")) parser.add_option('', 'sources_without_dev', 'boolean', 'sources_without_dev', - _("do not clean the products in development mode.")) + _("Optional: do not clean the products in development mode.")) + +def get_products_list(options, cfg, logger): + '''method that gives the product list with their informations from + configuration regarding the passed options. + + :param options Options: The Options instance that stores the commands + arguments + :param config Config: The global configuration + :param logger Logger: The logger instance to use for the display and logging + :return: The list of (product name, product_informations). + :rtype: List + ''' + # Get the products to be prepared, regarding the options + if options.products is None: + # No options, get all products sources + products = cfg.APPLICATION.products + else: + # if option --products, check that all products of the command line + # are present in the application. + products = options.products + for p in products: + if p not in cfg.APPLICATION.products: + raise src.SatException(_("Product %(product)s " + "not defined in application %(application)s") % + { 'product': p, 'application': cfg.VARS.application} ) + + # Construct the list of tuple containing + # the products name and their definition + products_infos = src.product.get_products_infos(products, cfg) + + # if the property option was passed, filter the list + if options.properties: + [prop, value] = options.properties.split(":") + products_infos = [(p_name, p_info) for + (p_name, p_info) in products_infos + if "properties" in p_info and + prop in p_info.properties and + p_info.properties[prop] == value] + + return products_infos def get_source_directories(products_infos, without_dev): '''Returns the list of directory source paths corresponding to the list of @@ -72,7 +117,8 @@ def get_build_directories(products_infos): l_dir_build = [] for __, product_info in products_infos: if product_has_dir(product_info): - l_dir_build.append(src.Path(product_info.build_dir)) + if "build_dir" in product_info: + l_dir_build.append(src.Path(product_info.build_dir)) return l_dir_build def get_install_directories(products_infos): @@ -131,7 +177,10 @@ def description(): :rtype: str ''' return _("The clean command suppress the source, build, or install " - "directories of the application products.") + "directories of the application products.\nUse the options to" + " define what directories you want to suppress and to reduce " + "the list of products\n\nexample:\nsat clean SALOME-master " + "--build --install --properties is_salome_module:yes") def run(args, runner, logger): '''method that is called when salomeTools is called with clean parameter. @@ -143,8 +192,19 @@ def run(args, runner, logger): # check that the command has been called with an application src.check_config_has_application( runner.cfg ) + # Verify the --properties option + if options.properties: + oExpr = re.compile(PROPERTY_EXPRESSION) + if not oExpr.search(options.properties): + msg = _('WARNING: the "--properties" options must have the ' + 'following syntax:\n--properties :') + logger.write(src.printcolors.printcWarning(msg), 1) + logger.write("\n", 1) + options.properties = None + + # Get the list of products to threat - products_infos = prepare.get_products_list(options, runner.cfg, logger) + products_infos = get_products_list(options, runner.cfg, logger) # Construct the list of directories to suppress l_dir_to_suppress = [] @@ -166,6 +226,11 @@ def run(args, runner, logger): if len(l_dir_to_suppress) == 0: logger.write(src.printcolors.printcWarning(_("Nothing to suppress\n"))) + sat_command = (runner.cfg.VARS.salometoolsway + + runner.cfg.VARS.sep + + "sat -h clean") + logger.write(_("Please specify what you want to suppress: " + "tap \"%s\"\n" % sat_command)) return # Check with the user if he really wants to suppress the directories @@ -175,7 +240,7 @@ def run(args, runner, logger): logger.write(" %s\n" % directory, 1) rep = input(_("Are you sure you want to continue? [Yes/No] ")) if rep.upper() != _("YES"): - return + return 0 # Suppress the list of paths suppress_directories(l_dir_to_suppress, logger)