diff --git a/autosubmit/config/config_common.py b/autosubmit/config/config_common.py index f1aa6f83f9e47dfca9b3dd9ef0d20fd87d83358b..4e19c9076b7c6c97a14813073f71a2bea9e140e4 100644 --- a/autosubmit/config/config_common.py +++ b/autosubmit/config/config_common.py @@ -436,7 +436,7 @@ class AutosubmitConfig(object): if project_type == 'git': result = result and parser.check_exists('git', 'PROJECT_ORIGIN') result = result and parser.check_exists('git', 'PROJECT_BRANCH') - #result = result and parser.check_is_boolean('git', 'RECURSIVE') + elif project_type == 'svn': result = result and parser.check_exists('svn', 'PROJECT_URL') result = result and parser.check_exists('svn', 'PROJECT_REVISION') @@ -611,14 +611,16 @@ class AutosubmitConfig(object): :rtype: str """ return self._exp_parser.get_option('git', 'PROJECT_COMMIT', None) - #def get_git_recursive(self): - #""" - #Returns git recursive boolean from experiment's config file - - #:return: git commit - #:rtype: str - #""" - #return self._exp_parser.get_option('git', 'RECURSIVE', True) + def get_submodules_list(self): + """ + Returns submodules list from experiment's config file + Default is --recursive + :return: submodules to load + :rtype: list + """ + return ' '.join(self._exp_parser.get_option('git', 'PROJECT_SUBMODULES','').split()).split() + + def get_project_destination(self): """ Returns git commit from experiment's config file diff --git a/autosubmit/config/files/expdef.conf b/autosubmit/config/files/expdef.conf index cb66124914e6e25348d0d0cabf753228f57040af..96e2b6fd32c5c2e5153fba6c82367f2677f7210f 100644 --- a/autosubmit/config/files/expdef.conf +++ b/autosubmit/config/files/expdef.conf @@ -46,7 +46,8 @@ PROJECT_ORIGIN = PROJECT_BRANCH = # type = STRING, default = leave empty, help = if model branch is a TAG leave empty PROJECT_COMMIT = - +# type = STRING, default = leave empty and will load all submodules, help = loadThisSubmodule alsoloadthis anotherLoad ... +PROJECT_SUBMODULES = # If PROJECT_TYPE is not svn, no need to change [svn] # type = STRING, help = 'https://svn.ec-earth.org/ecearth3' diff --git a/autosubmit/git/autosubmit_git.py b/autosubmit/git/autosubmit_git.py index 23a2b719230e90232af84dbfda9a7d693b9b976b..da234f06c14d1e154b610cc930a601a11971f433 100644 --- a/autosubmit/git/autosubmit_git.py +++ b/autosubmit/git/autosubmit_git.py @@ -129,7 +129,7 @@ class AutosubmitGit: git_project_origin = as_conf.get_git_project_origin() git_project_branch = as_conf.get_git_project_branch() git_project_commit = as_conf.get_git_project_commit() - + git_project_submodules = as_conf.get_submodules_list() project_destination = as_conf.get_project_destination() project_path = os.path.join(BasicConfig.LOCAL_ROOT_DIR, as_conf.expid, BasicConfig.LOCAL_PROJ_DIR) git_path = as_conf.get_project_dir() @@ -147,9 +147,18 @@ class AutosubmitGit: if git_project_commit: Log.info("Fetching {0} into {1}", git_project_commit + " " + git_project_origin, project_path) try: - command = "cd {0}; git clone {1} {4}; cd {2}; git checkout {3}; " \ - "git submodule update --init ".format(project_path, git_project_origin, git_path, - git_project_commit, project_destination) + + command = "cd {0}; git clone {1} {4}; cd {2}; git checkout {3};".format(project_path, + git_project_origin, git_path, + git_project_commit, + project_destination) + if git_project_submodules.__len__() <= 0: + command += " git submodule update --init --recursive" + else: + + command += " cd {0}; git submodule init;".format(project_destination) + for submodule in git_project_submodules: + command += " git submodule update {0};".format(submodule) output = subprocess.check_output(command, shell=True) except subprocess.CalledProcessError: Log.error("Can not checkout commit {0}: {1}", git_project_commit, output) @@ -159,8 +168,17 @@ class AutosubmitGit: else: Log.info("Cloning {0} into {1}", git_project_branch + " " + git_project_origin, project_path) try: - command = "cd {0}; git clone -b {1} {2} {3}".format(project_path, git_project_branch, - git_project_origin, project_destination) + command = "cd {0}; ".format(project_path) + if git_project_submodules.__len__() <= 0: + command += " git clone --recursive -b {0} {1} {2}".format(git_project_branch, git_project_origin, + project_destination) + else: + command += " git clone -b {0} {1} {2};".format(git_project_branch, git_project_origin, + project_destination) + command += " cd {0}; git submodule init;".format(project_destination) + for submodule in git_project_submodules: + command += " git submodule update {0};".format(submodule) + output = subprocess.check_output(command, shell=True) Log.debug('{0}:{1}', command, output) except subprocess.CalledProcessError: