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('', 'package', 'boolean', 'package',
45 _("Optional: Clean packages produced by sat package command."))
46 parser.add_option('a', 'all', 'boolean', 'all',
47 _("Optional: Clean the product source, build and install directories."))
48 parser.add_option('', 'sources_without_dev', 'boolean', 'sources_without_dev',
49 _("Optional: do not clean the products in development mode."))
52 def get_source_directories(products_infos, without_dev):
54 Returns the list of directory source paths corresponding
55 to the list of product information given as input.
56 If without_dev (bool) the dev products are ignored.
58 :param products_infos list: The list of (name, config) corresponding to one
60 :param without_dev boolean: If True, then ignore the dev products.
61 :return: the list of source paths.
65 for __, product_info in products_infos:
66 if product_has_dir(product_info, without_dev):
67 l_dir_source.append(src.Path(product_info.source_dir))
70 def get_build_directories(products_infos):
72 Returns the list of directory build paths corresponding to the list of
73 product information given as input.
75 :param products_infos list: The list of (name, config) corresponding to one
77 :return: the list of build paths.
81 for __, product_info in products_infos:
82 if product_has_dir(product_info):
83 if "build_dir" in product_info:
84 l_dir_build.append(src.Path(product_info.build_dir))
87 def get_install_directories(products_infos):
89 Returns the list of directory install paths corresponding to the list of
90 product information given as input.
92 :param products_infos list: The list of (name, config) corresponding to one product.
93 :return: the list of install paths.
97 for __, product_info in products_infos:
98 if product_has_dir(product_info):
99 l_dir_install.append(src.Path(product_info.install_dir))
102 def get_package_directory(config):
104 Returns the package directory name corresponding to the sat package command
106 :param config Config: The global configuration
107 :return: a list containing the PACKAGE full path.
110 return [src.Path(os.path.join(config.APPLICATION.workdir, "PACKAGE"))]
112 def get_generated_directories(config, products_infos):
114 Returns the list of directories (source, build, install) corresponding to the
115 list of products information given as input.
116 Nothing is returned for non generated products (those with...)
118 :param products_infos list: The list of (name, config) corresponding to one product.
119 :return: the list of install paths.
123 for __, product_info in products_infos:
124 if not src.product.product_is_generated(product_info):
126 workdir = config.APPLICATION.workdir
127 compo = product_info.component_name
128 generate_dir = os.path.join(workdir, "GENERATED")
129 source_dir = os.path.join(generate_dir, compo + "_SRC")
130 build_dir = os.path.join(os.path.join(workdir, "BUILD"), compo)
131 install_dir = os.path.join(workdir, config.INTERNAL.config.install_dir,
133 l_dir_install.append(src.Path(source_dir))
134 l_dir_install.append(src.Path(build_dir))
135 l_dir_install.append(src.Path(install_dir))
141 def product_has_dir(product_info, without_dev=False):
143 Returns a boolean at True if there is a source, build and install
144 directory corresponding to the product described by product_info.
146 :param products_info Config: The config corresponding to the product.
147 :return: True if there is a source, build and install directory corresponding to the product described by product_info.
150 if (src.product.product_is_native(product_info) or
151 src.product.product_is_fixed(product_info)):
154 if src.product.product_is_dev(product_info):
158 def suppress_directories(l_paths, logger):
159 """Suppress the paths given in the list in l_paths.
161 :param l_paths list: The list of Path to be suppressed
162 :param logger Logger: The logger instance to use for the display and logging
166 msg = _("Warning: the path %s does not "
167 "exists (or is not a directory)\n" % path.__str__())
168 logger.write(src.printcolors.printcWarning(msg), 1)
170 logger.write(_("Removing %s ...") % path.__str__())
172 logger.write('%s\n' % src.printcolors.printc(src.OK_STATUS), 3)
175 """method called when salomeTools is called with --help option.
177 :return: The text to display for the clean command description.
181 The clean command suppress the SOURCES, BUILD or INSTALL directories of the application products.
182 Use the options to define what directories you want to suppress and to set the list of products
185 >> sat clean SALOME-xx --build --install --properties is_SALOME_module:yes
188 def run(args, runner, logger):
190 method called when salomeTools is called with clean parameter.
194 (options, args) = parser.parse_args(args)
196 # check that the command has been called with an application
197 src.check_config_has_application( runner.cfg )
200 # Get the list of products to threat
201 products_infos = src.product.get_products_list(options, runner.cfg, logger)
203 # Construct the list of directories to suppress
204 l_dir_to_suppress = []
206 l_dir_to_suppress += (get_source_directories(products_infos,
207 options.sources_without_dev) +
208 get_build_directories(products_infos) +
209 get_install_directories(products_infos) +
210 get_generated_directories(runner.cfg, products_infos) +
211 get_package_directory(runner.cfg) )
214 l_dir_to_suppress += get_install_directories(products_infos)
217 l_dir_to_suppress += get_build_directories(products_infos)
219 if options.sources or options.sources_without_dev:
220 l_dir_to_suppress += get_source_directories(products_infos,
221 options.sources_without_dev)
222 if options.generated:
223 l_dir_to_suppress += get_generated_directories(runner.cfg, products_infos)
226 l_dir_to_suppress += get_package_directory(runner.cfg)
228 if len(l_dir_to_suppress) == 0:
229 logger.write(src.printcolors.printcWarning(_("Nothing to suppress\n")))
231 Please specify what you want to suppress:
232 try 'sat --help clean' and 'sat clean ... --products ... --sources --build --install
236 # Check with the user if he really wants to suppress the directories
237 if not runner.options.batch:
238 logger.write(_("Remove the following directories ?\n"), 1)
239 for directory in l_dir_to_suppress:
240 logger.write(" %s\n" % directory, 1)
241 rep = input(_("Are you sure you want to continue? [Yes/No] "))
242 if rep.upper() != _("YES"):
245 # Suppress the list of paths
246 suppress_directories(l_dir_to_suppress, logger)