3 # Copyright (C) 2010-2012 CEA/DEN
5 # This library is free software; you can redistribute it and/or
6 # modify it under the terms of the GNU Lesser General Public
7 # License as published by the Free Software Foundation; either
8 # version 2.1 of the License.
10 # This library is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 # Lesser General Public License for more details.
15 # You should have received a copy of the GNU Lesser General Public
16 # License along with this library; if not, write to the Free Software
17 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 # Compatibility python 2/3 for input function
25 # input stays input for python 3 and input = raw_input for python 2
32 # Define all possible option for the clean command : sat clean <options>
33 parser = src.options.Options()
34 parser.add_option('p', 'products', 'list2', 'products',
35 _('Optional: Products to clean. This option accepts a comma separated list.'))
36 parser.add_option('s', 'sources', 'boolean', 'sources',
37 _("Optional: Clean the product source directories."))
38 parser.add_option('b', 'build', 'boolean', 'build',
39 _("Optional: Clean the product build directories."))
40 parser.add_option('i', 'install', 'boolean', 'install',
41 _("Optional: Clean the product install directories."))
42 parser.add_option('g', 'generated', 'boolean', 'generated',
43 _("Optional: Clean source, build and install directories for generated products."))
44 parser.add_option('a', 'all', 'boolean', 'all',
45 _("Optional: Clean the product source, build and install directories."))
46 parser.add_option('', 'sources_without_dev', 'boolean', 'sources_without_dev',
47 _("Optional: do not clean the products in development mode."))
50 def get_source_directories(products_infos, without_dev):
52 Returns the list of directory source paths corresponding
53 to the list of product information given as input.
54 If without_dev (bool) the dev products are ignored.
56 :param products_infos list: The list of (name, config) corresponding to one
58 :param without_dev boolean: If True, then ignore the dev products.
59 :return: the list of source paths.
63 for __, product_info in products_infos:
64 if product_has_dir(product_info, without_dev):
65 l_dir_source.append(src.Path(product_info.source_dir))
68 def get_build_directories(products_infos):
70 Returns the list of directory build paths corresponding to the list of
71 product information given as input.
73 :param products_infos list: The list of (name, config) corresponding to one
75 :return: the list of build paths.
79 for __, product_info in products_infos:
80 if product_has_dir(product_info):
81 if "build_dir" in product_info:
82 l_dir_build.append(src.Path(product_info.build_dir))
85 def get_install_directories(products_infos):
87 Returns the list of directory install paths corresponding to the list of
88 product information given as input.
90 :param products_infos list: The list of (name, config) corresponding to one product.
91 :return: the list of install paths.
95 for __, product_info in products_infos:
96 if product_has_dir(product_info):
97 l_dir_install.append(src.Path(product_info.install_dir))
100 def get_generated_directories(config, products_infos):
102 Returns the list of directories (source, build, install) corresponding to the
103 list of products information given as input.
104 Nothing is returned for non generated products (those with...)
106 :param products_infos list: The list of (name, config) corresponding to one product.
107 :return: the list of install paths.
111 for __, product_info in products_infos:
112 if not src.product.product_is_generated(product_info):
114 workdir = config.APPLICATION.workdir
115 compo = product_info.component_name
116 generate_dir = os.path.join(workdir, "GENERATED")
117 source_dir = os.path.join(generate_dir, compo + "_SRC")
118 build_dir = os.path.join(os.path.join(workdir, "BUILD"), compo)
119 install_dir = os.path.join(os.path.join(workdir, "INSTALL"), compo)
120 l_dir_install.append(src.Path(source_dir))
121 l_dir_install.append(src.Path(build_dir))
122 l_dir_install.append(src.Path(install_dir))
128 def product_has_dir(product_info, without_dev=False):
130 Returns a boolean at True if there is a source, build and install
131 directory corresponding to the product described by product_info.
133 :param products_info Config: The config corresponding to the product.
134 :return: True if there is a source, build and install directory corresponding to the product described by product_info.
137 if (src.product.product_is_native(product_info) or
138 src.product.product_is_fixed(product_info)):
141 if src.product.product_is_dev(product_info):
145 def suppress_directories(l_paths, logger):
146 """Suppress the paths given in the list in l_paths.
148 :param l_paths list: The list of Path to be suppressed
149 :param logger Logger: The logger instance to use for the display and logging
153 msg = _("Warning: the path %s does not "
154 "exists (or is not a directory)\n" % path.__str__())
155 logger.write(src.printcolors.printcWarning(msg), 1)
157 logger.write(_("Removing %s ...") % path.__str__())
159 logger.write('%s\n' % src.printcolors.printc(src.OK_STATUS), 3)
162 """method called when salomeTools is called with --help option.
164 :return: The text to display for the clean command description.
168 The clean command suppress the SOURCES, BUILD or INSTALL directories of the application products.
169 Use the options to define what directories you want to suppress and to set the list of products
172 >> sat clean SALOME-xx --build --install --properties is_salome_module:yes
175 def run(args, runner, logger):
177 method called when salomeTools is called with clean parameter.
181 (options, args) = parser.parse_args(args)
183 # check that the command has been called with an application
184 src.check_config_has_application( runner.cfg )
187 # Get the list of products to threat
188 products_infos = src.product.get_products_list(options, runner.cfg, logger)
190 # Construct the list of directories to suppress
191 l_dir_to_suppress = []
193 l_dir_to_suppress += (get_source_directories(products_infos,
194 options.sources_without_dev) +
195 get_build_directories(products_infos) +
196 get_install_directories(products_infos) +
197 get_generated_directories(runner.cfg, products_infos) )
200 l_dir_to_suppress += get_install_directories(products_infos)
203 l_dir_to_suppress += get_build_directories(products_infos)
205 if options.sources or options.sources_without_dev:
206 l_dir_to_suppress += get_source_directories(products_infos,
207 options.sources_without_dev)
208 if options.generated:
209 l_dir_to_suppress += get_generated_directories(runner.cfg, products_infos)
211 if len(l_dir_to_suppress) == 0:
212 logger.write(src.printcolors.printcWarning(_("Nothing to suppress\n")))
214 Please specify what you want to suppress:
215 try 'sat --help clean' and 'sat clean ... --products ... --sources --build --install
219 # Check with the user if he really wants to suppress the directories
220 if not runner.options.batch:
221 logger.write(_("Remove the following directories ?\n"), 1)
222 for directory in l_dir_to_suppress:
223 logger.write(" %s\n" % directory, 1)
224 rep = input(_("Are you sure you want to continue? [Yes/No] "))
225 if rep.upper() != _("YES"):
228 # Suppress the list of paths
229 suppress_directories(l_dir_to_suppress, logger)