X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=commands%2Fsource.py;h=7f0d8a0ead4969dfa82108b146982e21174e78bc;hb=c9e1abb9b6e1a8bba24f4b6737256ed39ba7eca9;hp=23b41d70c746ad7b28ca0f61ae7804d46b863f69;hpb=2f7093e4aef1e2047b1f600781163f4e6d57f96d;p=tools%2Fsat.git diff --git a/commands/source.py b/commands/source.py index 23b41d7..7f0d8a0 100644 --- a/commands/source.py +++ b/commands/source.py @@ -19,6 +19,7 @@ import os import shutil import re +import subprocess import src import prepare @@ -61,7 +62,8 @@ def get_source_for_dev(config, product_info, source_dir, logger, pad): return retcode -def get_source_from_git(product_info, +def get_source_from_git(config, + product_info, source_dir, logger, pad, @@ -83,15 +85,43 @@ def get_source_from_git(product_info, ''' # The str to display coflag = 'git' + # Get the repository address. + # If the application has the repo_dev property + # Or if the product is in dev mode + # Then we use repo_dev if the key exists + coflag = src.printcolors.printcHighlight(coflag.upper()) + repo_git = None + git_server = src.get_git_server(config,logger) + product_file = product_info.from_file.split('/').pop() + if 'git_info' in product_info and 'repositories' in product_info.git_info: + if git_server in product_info.git_info.repositories.keys(): # keys are git servers + repo_git = product_info.git_info.repositories[git_server] + elif 'properties' in product_info and 'is_opensource' in product_info.properties and product_info.properties.is_opensource == 'yes' : + for git_server in product_info.git_info.repositories.keys(): + if git_server in config.VARS.opensource_git_servers: + repo_git = product_info.git_info.repositories[git_server] + break + elif 'properties' in product_info and not 'is_opensource' in product_info.properties: + for git_server in product_info.git_info.repositories.keys(): + if git_server in config.VARS.opensource_git_servers: + repo_git = product_info.git_info.repositories[git_server] + logger.warning("Using opensource repository ({}) for product {}".format(git_server, product_info.name)) + logger.flush() + break + else: + logger.error("Error in configuration file: define git repository for product: {} in file {}".format(product_info.name, product_file)) + return False - # Get the repository address. (from repo_dev key if the product is - # in dev mode. - if is_dev and 'repo_dev' in product_info.git_info: - coflag = src.printcolors.printcHighlight(coflag.upper()) - repo_git = product_info.git_info.repo_dev + elif 'repo_dev' in product_info.git_info: + repo_git = product_info.git_info.repo_dev else: - repo_git = product_info.git_info.repo - + logger.error("Error in configuration file: define git repository for product: {}".format(product_info.name)) + return False + + if repo_git is None: + logger.error("Error in configuration file: define git repository for product: {} in file {}.".format(product_info.name, product_file)) + return False + # Display informations logger.write('%s:%s' % (coflag, src.printcolors.printcInfo(repo_git)), 3, False) @@ -105,8 +135,11 @@ def get_source_from_git(product_info, logger.flush() logger.write('\n', 5, False) - sub_dir = None + git_options= '' + if "git_options" in product_info.git_info: + git_options = product_info.git_info.git_options + sub_dir = None # what do we do with git tree structure and history if is_dev and "sub_dir" in product_info.git_info: logger.error("dev mode for product is incompatible with 'sub_dir' option") @@ -115,16 +148,16 @@ def get_source_from_git(product_info, if not is_dev and "sub_dir" in product_info.git_info: sub_dir = product_info.git_info.sub_dir - if sub_dir is None: + if sub_dir is None: # Call the system function that do the extraction in git mode retcode = src.system.git_extract(repo_git, - product_info.git_info.tag, + product_info.git_info.tag, git_options, source_dir, logger, environ) else: # Call the system function that do the extraction of a sub_dir in git mode logger.write("sub_dir:%s " % sub_dir, 3) retcode = src.system.git_extract_sub_dir(repo_git, - product_info.git_info.tag, + product_info.git_info.tag,git_options, source_dir, sub_dir, logger, environ) @@ -142,6 +175,14 @@ def get_source_from_archive(config, product_info, source_dir, logger): :return: True if it succeed, else False :rtype: boolean ''' + + # check if pip should be used : pip mode id activated if the application and product have pip property + if (src.appli_test_property(config,"pip", "yes") and + src.product.product_test_property(product_info,"pip", "yes")): + pip_msg = "PIP : do nothing, product will be downloaded later at compile time " + logger.write(pip_msg, 3) + return True + # check archive exists if not os.path.exists(product_info.archive_info.archive_name): # The archive is not found on local file system (ARCHIVEPATH) @@ -352,8 +393,8 @@ def get_product_sources(config, pad) if product_info.get_source == "git": - return get_source_from_git(product_info, source_dir, logger, pad, - is_dev,env_appli) + return get_source_from_git(config, product_info, source_dir, logger, pad, + is_dev, env_appli) if product_info.get_source == "archive": return get_source_from_archive(config, product_info, source_dir, logger) @@ -363,39 +404,44 @@ def get_product_sources(config, if product_info.get_source == "cvs": cvs_user = config.USER.cvs_user - return get_source_from_cvs(cvs_user, - product_info, - source_dir, - checkout, - logger, - pad, - env_appli) + return get_source_from_cvs(cvs_user, product_info, source_dir, + checkout, logger, pad, env_appli) if product_info.get_source == "svn": svn_user = config.USER.svn_user return get_source_from_svn(svn_user, product_info, source_dir, - checkout, - logger, - env_appli) + checkout, logger, env_appli) if product_info.get_source == "native": - # skip - logger.write('%s ' % src.printcolors.printc(src.OK_STATUS), - 3, - False) - msg = _('INFORMATION : Not doing anything because the product' - ' is of type "native".\n') - logger.write(msg, 3) - return True + # for native products we check the corresponding system packages are installed + logger.write("Native : Checking system packages are installed\n" , 3) + check_cmd=src.system.get_pkg_check_cmd(config.VARS.dist_name) # (either rmp or apt) + run_pkg,build_pkg=src.product.check_system_dep(config.VARS.dist, check_cmd, product_info) + result=True + for pkg in run_pkg: + logger.write(" - " + pkg + " : " + run_pkg[pkg] + '\n', 1) + if "KO" in run_pkg[pkg]: + result=False + for pkg in build_pkg: + logger.write(" - " + pkg + " : " + build_pkg[pkg] + '\n', 1) + if "KO" in build_pkg[pkg]: + result=False + if result==False: + logger.error("some system dependencies are missing, please install them with "+\ + check_cmd[0]) + return result if product_info.get_source == "fixed": # skip logger.write('%s ' % src.printcolors.printc(src.OK_STATUS), 3, False) - msg = _('INFORMATION : Not doing anything because the product' - ' is of type "fixed".\n') - logger.write(msg, 3) + msg = "FIXED : %s\n" % product_info.install_dir + + if not os.path.isdir(product_info.install_dir): + logger.warning("The fixed path do not exixts!! Please check it : %s\n" % product_info.install_dir) + else: + logger.write(msg, 3) return True # if the get_source is not in [git, archive, cvs, svn, fixed, native] @@ -452,12 +498,8 @@ def get_all_product_sources(config, products, logger): continue # Call to the function that get the sources for one product - retcode = get_product_sources(config, - product_info, - is_dev, - source_dir, - logger, - max_product_name_len, + retcode = get_product_sources(config, product_info, is_dev, + source_dir, logger, max_product_name_len, checkout=False) ''' @@ -548,9 +590,7 @@ def run(args, runner, logger): products_infos = src.product.get_products_list(options, runner.cfg, logger) # Call to the function that gets all the sources - good_result, results = get_all_product_sources(runner.cfg, - products_infos, - logger) + good_result, results = get_all_product_sources(runner.cfg, products_infos, logger) # Display the results (how much passed, how much failed, etc...) status = src.OK_STATUS