From cdb9a3f92dce507a10925937a5dec30363097c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Bidoul?= Date: Mon, 3 Oct 2022 09:12:20 +0200 Subject: [PATCH] oca-create-branch: carry over answers from previous branches --- setup.py | 1 + tools/create_branch.py | 65 ++++++++++++++++++++++++++++-------------- 2 files changed, 45 insertions(+), 21 deletions(-) diff --git a/setup.py b/setup.py index 33ea1b1c..be37ec1a 100644 --- a/setup.py +++ b/setup.py @@ -42,6 +42,7 @@ 'selenium', 'twine', 'wheel', + 'copier', ], python_requires='>=3.6', classifiers=[ diff --git a/tools/create_branch.py b/tools/create_branch.py index 76b52390..af404b58 100644 --- a/tools/create_branch.py +++ b/tools/create_branch.py @@ -3,12 +3,35 @@ TODO - load copier answers from a previous branch """ +from pathlib import Path import subprocess +from typing import Dict import click +import yaml +import copier from .oca_projects import get_repositories, temporary_clone +COPIER_ANSWERS_FILE = ".copier-answers.yml" +COPIER_ANSWERS_TO_CARRY_OVER = ("repo_description", "repo_name") + + +def _read_prev_branch_answers(prev_branch: str, answers: Dict[str, str]) -> None: + try: + subprocess.check_call(["git", "checkout", prev_branch]) + except subprocess.CalledProcessError: + # likely branch not found + return + if not Path(COPIER_ANSWERS_FILE).is_file(): + return + with open(COPIER_ANSWERS_FILE) as f: + prev_branch_answers = yaml.load(f, Loader=yaml.SafeLoader) + for question in COPIER_ANSWERS_TO_CARRY_OVER: + if question not in prev_branch_answers: + continue + answers[question] = prev_branch_answers[question] + @click.command("Create an orphan branch from a 'copier' template") @click.argument("new_branch") @@ -25,7 +48,11 @@ "repos", multiple=True, ) -def main(new_branch, copier_template, copier_template_vcs_ref, repos): +@click.option( + "--prev-branch", + help="Previous branch where to read some copier answers.", +) +def main(new_branch, copier_template, copier_template_vcs_ref, repos, prev_branch): for repo in repos or get_repositories(): print("=" * 10, repo, "=" * 10) with temporary_clone(repo): @@ -42,30 +69,26 @@ def main(new_branch, copier_template, copier_template_vcs_ref, repos): subprocess.check_call( ["git", "config", "user.email", "oca-git-bot@odoo-community.org"], ) + # read answers from previous branch + answers = { + "odoo_version": float(new_branch), + "repo_slug": repo, + "repo_name": repo, + "ci": "GitHub", + } + if prev_branch: + _read_prev_branch_answers(prev_branch, answers) # create empty git branch subprocess.check_call(["git", "checkout", "--orphan", new_branch]) subprocess.check_call(["git", "reset", "--hard"]) # copier - copier_cmd = [ - "copier", - "--data", - f"odoo_version={new_branch}", - "--data", - f"repo_slug={repo}", - "--data", - f"repo_name={repo}", - "--data", - "repo_description=TODO: add repo description.", - "--data", - "dependency_installation_mode=PIP", - "--data", - "ci=GitHub", - "--force", - ] - if copier_template_vcs_ref: - copier_cmd += ["--vcs-ref", copier_template_vcs_ref] - copier_cmd += [copier_template, "."] - subprocess.check_call(copier_cmd) + copier.run_copy( + src_path=copier_template, + dst_path=".", + data=answers, + defaults=True, + vcs_ref=copier_template_vcs_ref, + ) # pre-commit run -a subprocess.check_call(["git", "add", "."]) subprocess.call(["pre-commit", "run", "-a"])