import os import subprocess import infra GIT_HOST_DIR = "host" GIT_CONFIG_DIR = os.path.join(GIT_HOST_DIR, "home/br-user") GIT_CONFIG_FILE = os.path.join(GIT_CONFIG_DIR, "gitconfig") def run_git_config(logfile, cmd): logfile.write( "> running git config with '{}'\n".format(" ".join(cmd))) try: subprocess.check_call(cmd, stdout=logfile, stderr=logfile) except FileNotFoundError: logfile.write("> git config failed\n") raise SystemError("git config failed") def generate_gitconfig(builddir, logtofile, gitremotedir): logfile = infra.open_log_file(builddir, "gitconfig", logtofile) # The git repository used by this test is cloned locally from # gitremotedir using the "file://" protocol. Since it contains # several git submodules we need to allow this protocol to be used # with git submodules. Since we don't want to modify the user # (global) gitconfig, we use a local gitconfig file. localgitconfig = os.path.join(builddir, GIT_CONFIG_FILE) gitconfigdir = os.path.join(builddir, GIT_CONFIG_DIR) os.makedirs(gitconfigdir, exist_ok=True) # We are using the git repository from the Buildroot git tree # (gitremotedir). This repository is safe to use using "file://" # protocol with git submodules. cmd = ["git", "config", "--file", localgitconfig, "--add", "protocol.file.allow", "always"] run_git_config(logfile, cmd) # Disable ownership check of the git tree for Gitlab-CI # environment. # See: https://gitlab.com/buildroot.org/buildroot/-/commit/a016b693f7830f3c8ae815851d3204b8b6e99821 for git_repo in os.scandir(gitremotedir): cmd = ["git", "config", "--file", localgitconfig, "--add", "safe.directory", git_repo.path] run_git_config(logfile, cmd)