diff --git a/src/git_flow/command/release.py b/src/git_flow/command/release.py index 1eb70a4..d41cd0c 100644 --- a/src/git_flow/command/release.py +++ b/src/git_flow/command/release.py @@ -1,4 +1,4 @@ -from argparse import Namespace +from argparse import ArgumentParser, Namespace from git_flow import COMMIT_TYPES, GitFlowError from git_flow.command.base import Command from git_flow.git import Git @@ -11,6 +11,15 @@ class ReleaseCommand(Command): def description(self) -> str: return """Realiza el merge de la rama, o crea el PR para hacerlo si tiene un remoto configurado""" + def setup_parser(self, parser: ArgumentParser) -> ArgumentParser: + parser.add_argument( + "--group", + nargs="?", + help="Agrupar release", + ) + + return parser + def run(self, args: Namespace = Namespace()): self.ensure_initialized() @@ -34,10 +43,16 @@ class ReleaseCommand(Command): else f"release/{next_env}/{branch}" ) + group = args.group + + if not group and self.confirm("¿Desea agrupar este release con otra rama?"): + group = self.choice("Grupo release: ", Git.get_branches("release/" + next_env + "/")) + else: + group = next_env + if has_remote: - Git("pull").exec(print="Sincronizando cambios de la rama") - Git("switch", next_env).exec(print="Cambiando al siguiente entorno") - Git("pull").exec(print="Sincronizando cambios del entorno") + Git("switch", group).exec(print="Cambiando a la rama objetivo") + Git("pull").exec(print="Sincronizando cambios la rama objetivo") Git("switch", "-").exec(print="Volviendo a la rama original") base = Git.get_first_fork_point(branch, env) @@ -62,6 +77,6 @@ class ReleaseCommand(Command): else: Git("switch", next_branch, create=True).exec(print="Creando rama release") - Git("rebase", base, next_branch, onto=next_env).exec( + Git("rebase", base, next_branch, onto=group).exec( print="Moviendo cambios hacia el siguiente ambiente" ) diff --git a/src/git_flow/git.py b/src/git_flow/git.py index 11e23ff..f6137a1 100644 --- a/src/git_flow/git.py +++ b/src/git_flow/git.py @@ -50,8 +50,8 @@ class Git: return Git("rev-parse", "HEAD", abbrev_ref=True).firstline() @staticmethod - def get_branches(): - return Git._get_references("heads") + def get_branches(prefix: str = ""): + return Git._get_references("heads/" + prefix) @staticmethod def status(): @@ -79,7 +79,7 @@ class Git: @staticmethod def _get_references(kind: str): - prefix = "refs/" + kind + "/" + prefix = "refs/" + kind return list(map( lambda r: r.removeprefix(prefix), Git("for-each-ref", prefix + "*", format="%(refname)").lines(),