embuild 0.33.1

A build support library for embedded Rust
Documentation
# A small PlatformIO integration script (autogenerated by cargo-pio) that provides the capability to clone
# user-specified Git projects (platformio.ini git_repos = "...") before the build is triggered
#
# How to use:
# Insert/update the following line in one of platformio.ini's environments:
#     extra_scripts = pre:platformio.git.py
# Specify a newline-separated list of Git repos to check out:
#     git_repos = [dir-name1]@<repo1> \n [dir-name2]@<repo2>...

import os

Import("env")

class GitRepos:
    def run(self, env):
        self.__git_repos = env.GetProjectOption("git_repos", default = "")
        self.__materialize_git_repos()

    def __materialize_git_repos(self):
        for (directory, repo) in self.__git_repos_list():
            if not os.path.exists(env.subst(directory)):
                print(f"Cloning {repo} as directory {directory}")
                if env.Execute(f"git clone {repo} {directory}"):
                    Exit(1)

    def __git_repos_list(self):
        git_repos_dir = os.path.join("$PROJECT_WORKSPACE_DIR", "git-repos")

        def get_repo(item):
            repo = item
            repo_directory = repo.split("/")[-1]
            if "@" in item:
                repo_directory, repo = item.split("@", 1)

            return (
                os.path.join(git_repos_dir, repo_directory.strip()),
                repo.strip())

        return [get_repo(item) for item in self.__git_repos.split("\n") if len(item.strip()) > 0]

GitRepos().run(env)