import os
import subprocess
+import re
import src
import prepare
-# Define all possible option for log command : sat log <options>
+# Define all possible option for patch command : sat patch <options>
parser = src.options.Options()
-parser.add_option('p', 'product', 'list2', 'products',
- _('products to get the sources. This option can be'
- ' passed several time to get the sources of several products.'))
-parser.add_option('', 'no_sample', 'boolean', 'no_sample',
- _("do not get sources from sample products."))
+parser.add_option('p', 'products', 'list2', 'products',
+ _('Optional: products to get the sources. This option accepts a comma separated list.'))
-def apply_patch(config, product_info, logger):
+def apply_patch(config, product_info, max_product_name_len, logger):
'''The method called to apply patches on a product
:param config Config: The global configuration
:return: (True if it succeed, else False, message to display)
:rtype: (boolean, str)
'''
-
+
+ # if the product is native, do not apply patch
+ if src.product.product_is_native(product_info):
+ # display and log
+ logger.write('%s: ' % src.printcolors.printcLabel(product_info.name), 4)
+ logger.write(' ' * (max_product_name_len - len(product_info.name)), 4, False)
+ logger.write("\n", 4, False)
+ msg = _("The %s product is native. Do not apply "
+ "any patch.") % product_info.name
+ logger.write(msg, 4)
+ logger.write("\n", 4)
+ return True, ""
+
if not "patches" in product_info or len(product_info.patches) == 0:
+ # display and log
+ logger.write('%s: ' % src.printcolors.printcLabel(product_info.name), 4)
+ logger.write(' ' * (max_product_name_len - len(product_info.name)), 4, False)
+ logger.write("\n", 4, False)
msg = _("No patch for the %s product") % product_info.name
- logger.write(msg, 3)
- logger.write("\n", 1)
+ logger.write(msg, 4)
+ logger.write("\n", 4)
return True, ""
+ else:
+ # display and log
+ logger.write('%s: ' % src.printcolors.printcLabel(product_info.name), 3)
+ logger.write(' ' * (max_product_name_len - len(product_info.name)), 3, False)
+ logger.write("\n", 4, False)
if not os.path.exists(product_info.source_dir):
msg = _("No sources found for the %s product\n") % product_info.name
# Check the existence and apply the patch
if os.path.isfile(patch):
- #patch_exe = "patch" # old patch command (now replace by patching.py)
- patch_exe = os.path.join(config.VARS.srcDir, "patching.py")
- patch_cmd = "python %s -p1 -- < %s" % (patch_exe, patch)
-
+ patch_cmd = "patch -p1 < %s" % patch
+
# Write the command in the terminal if verbose level is at 5
logger.write((" >%s\n" % patch_cmd),5)
:rtype: str
'''
return _("The patch command apply the patches on the sources of "
- "the application products if there is any")
+ "the application products if there is any.\n\nexample:\nsat "
+ "patch SALOME-master --products qt,boost")
def run(args, runner, logger):
'''method that is called when salomeTools is called with patch parameter.
logger.write('Patching sources of the application %s\n' %
src.printcolors.printcLabel(runner.cfg.VARS.application), 1)
- src.printcolors.print_value(logger, 'out_dir',
- runner.cfg.APPLICATION.out_dir, 2)
+ src.printcolors.print_value(logger, 'workdir',
+ runner.cfg.APPLICATION.workdir, 2)
logger.write("\n", 2, False)
# Get the products list with products informations regarding the options
- products_infos = prepare.get_products_list(options, runner.cfg, logger)
+ products_infos = src.product.get_products_list(options, runner.cfg, logger)
# Get the maximum name length in order to format the terminal display
max_product_name_len = 1
# The loop on all the products on which to apply the patches
good_result = 0
- for product_name, product_info in products_infos:
- # display and log
- logger.write('%s: ' % src.printcolors.printcLabel(product_name), 3)
- logger.write(' ' * (max_product_name_len - len(product_name)), 3, False)
- logger.write("\n", 4, False)
+ for __, product_info in products_infos:
# Apply the patch
- return_code, patch_res = apply_patch(runner.cfg, product_info, logger)
+ return_code, patch_res = apply_patch(runner.cfg,
+ product_info,
+ max_product_name_len,
+ logger)
logger.write(patch_res, 1, False)
if return_code:
good_result += 1
logger.write(" " + src.printcolors.printc(status), 1, False)
logger.write(" (%s)\n" % res_count, 1, False)
- return len(products_infos) - good_result
\ No newline at end of file
+ return len(products_infos) - good_result