From 6b0ecb0584abc0ea772b38e68c118c310afbd3cd Mon Sep 17 00:00:00 2001 From: Philipp van Kempen Date: Thu, 13 Jul 2023 10:55:06 +0200 Subject: [PATCH] add RepoConfig.options allowing optimization of clone size --- mlonmcu/environment/config.py | 25 ++++++++++++++++++++++++- mlonmcu/environment/loader.py | 10 +++++----- mlonmcu/environment/writer.py | 1 + 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/mlonmcu/environment/config.py b/mlonmcu/environment/config.py index 1d41de426..2d17c5b80 100644 --- a/mlonmcu/environment/config.py +++ b/mlonmcu/environment/config.py @@ -126,9 +126,32 @@ def __repr(self): class RepoConfig(BaseConfig): - def __init__(self, url, ref=None): + def __init__(self, url, ref=None, options=None): self.url = url + if ref is not None: + assert isinstance(ref, str) self.ref = ref + self.options = options if options is not None else {} + assert isinstance(self.options, dict) + + @property + def single_branch(self): + value = self.options.get("single_branch", False) + assert isinstance(value, bool) + return value + + @property + def recursive(self): + value = self.options.get("recursive", True) + assert isinstance(value, bool) + return value + + @property + def submodules(self): + value = self.options.get("submodules", None) + if value is not None: + assert isinstance(value, list) + return value class BackendConfig(BaseConfig): diff --git a/mlonmcu/environment/loader.py b/mlonmcu/environment/loader.py index 5ff88ad51..fa0cfb26b 100644 --- a/mlonmcu/environment/loader.py +++ b/mlonmcu/environment/loader.py @@ -111,12 +111,12 @@ def load_environment_from_file(filename, base): repos = {} for key in loaded["repos"]: repo = loaded["repos"][key] - if "url" not in repo: + url = repo.get("url", None) + if url is None: raise RuntimeError("Missing field 'url' in YAML file") - if "ref" in repo: - repos[key] = RepoConfig(repo["url"], ref=repo["ref"]) - else: - repos[key] = RepoConfig(repo["url"]) + ref = repo.get("ref", None) + options = repo.get("options", None) + repos[key] = RepoConfig(url, ref=ref, options=options) else: repos = None default_framework = None diff --git a/mlonmcu/environment/writer.py b/mlonmcu/environment/writer.py index 28adb6261..99498f5f4 100644 --- a/mlonmcu/environment/writer.py +++ b/mlonmcu/environment/writer.py @@ -44,6 +44,7 @@ def create_environment_dict(environment): for path, path_config in environment.paths.items() } # TODO: allow relative paths data["repos"] = {repo: vars(repo_config) for repo, repo_config in environment.repos.items()} + # TODO: test with options! data["frameworks"] = { "default": environment.defaults.default_framework if environment.defaults.default_framework else None, **{