Compare commits

..
7 Commits
3 changed files with 52 additions and 15 deletions
+19
View File
@@ -1,3 +1,22 @@
## v1.6.1 - 2025-11-29
### Commits
- **bugfix**: arreglo mensaje de confirmacion de squash, muevo prompt de commit message antes del squash [[jonathan.nerat](mailto:jonathan.nerat@gmail.com)] (f1f6e67)
- **bugfix**: cambio default en confirmacion para agrupar release [[jonathan.nerat](mailto:jonathan.nerat@gmail.com)] (83df7e9)
---
## v1.6.0 - 2025-11-29
### Commits
- **feature**: agrego opcion para agrupar ramas release [[jonathan.nerat](mailto:jonathan.nerat@gmail.com)] (c47afff)
---
## v1.5.2 - 2025-11-28 ## v1.5.2 - 2025-11-28
### Commits ### Commits
+30 -12
View File
@@ -1,4 +1,4 @@
from argparse import Namespace from argparse import ArgumentParser, Namespace
from git_flow import COMMIT_TYPES, GitFlowError from git_flow import COMMIT_TYPES, GitFlowError
from git_flow.command.base import Command from git_flow.command.base import Command
from git_flow.git import Git from git_flow.git import Git
@@ -11,6 +11,15 @@ class ReleaseCommand(Command):
def description(self) -> str: def description(self) -> str:
return """Realiza el merge de la rama, o crea el PR para hacerlo si tiene un remoto configurado""" 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()): def run(self, args: Namespace = Namespace()):
self.ensure_initialized() self.ensure_initialized()
@@ -34,34 +43,43 @@ class ReleaseCommand(Command):
else f"release/{next_env}/{branch}" else f"release/{next_env}/{branch}"
) )
group = args.group
if not group and self.confirm("¿Desea agrupar este release con otra rama?", False):
group = self.choice("Grupo release: ", Git.get_branches("release/" + next_env + "/"))
else:
group = next_env
if has_remote: if has_remote:
Git("pull").exec(print="Sincronizando cambios de la rama") Git("switch", group).exec(print="Cambiando a la rama objetivo")
Git("switch", next_env).exec(print="Cambiando al siguiente entorno") Git("pull").exec(print="Sincronizando cambios la rama objetivo")
Git("pull").exec(print="Sincronizando cambios del entorno")
Git("switch", "-").exec(print="Volviendo a la rama original") Git("switch", "-").exec(print="Volviendo a la rama original")
base = Git.get_first_fork_point(branch, env) base = Git.get_first_fork_point(branch, env)
commits = int(Git("rev-list", base + "..", count=True).firstline()) commits = int(Git("rev-list", base + "..", count=True).firstline())
if commits > 1 and self.confirm( if commits > 1 and self.confirm(
"Desea reemplazar los {commits} commits de la rama por uno solo?" f"¿Desea reemplazar los {commits} commits de la rama por uno solo?",
False
): ):
Git("switch", next_branch, base, create=True).exec( self.info("Debe ingresar el mensaje del commit a crear.")
print="Creando rama release en base"
)
Git("merge", branch, squash=True).exec(
print="Squasheando commits en uno solo"
)
commit_type = self.choice("Tipo de commit", COMMIT_TYPES[:-1]) commit_type = self.choice("Tipo de commit", COMMIT_TYPES[:-1])
commit_message = self.prompt( commit_message = self.prompt(
"Mensaje (máximo recomendado: 100 caracteres)", persistent=True "Mensaje (máximo recomendado: 100 caracteres)", persistent=True
) )
message = commit_type + ": " + commit_message message = commit_type + ": " + commit_message
Git("switch", next_branch, base, create=True).exec(
print="Creando rama release en base"
)
Git("merge", branch, squash=True).exec(
print="Squasheando commits en uno solo"
)
Git("commit", m=message).exec(print="Creando commit único") Git("commit", m=message).exec(print="Creando commit único")
else: else:
Git("switch", next_branch, create=True).exec(print="Creando rama release") 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" print="Moviendo cambios hacia el siguiente ambiente"
) )
+3 -3
View File
@@ -50,8 +50,8 @@ class Git:
return Git("rev-parse", "HEAD", abbrev_ref=True).firstline() return Git("rev-parse", "HEAD", abbrev_ref=True).firstline()
@staticmethod @staticmethod
def get_branches(): def get_branches(prefix: str = ""):
return Git._get_references("heads") return Git._get_references("heads/" + prefix)
@staticmethod @staticmethod
def status(): def status():
@@ -79,7 +79,7 @@ class Git:
@staticmethod @staticmethod
def _get_references(kind: str): def _get_references(kind: str):
prefix = "refs/" + kind + "/" prefix = "refs/" + kind
return list(map( return list(map(
lambda r: r.removeprefix(prefix), lambda r: r.removeprefix(prefix),
Git("for-each-ref", prefix + "*", format="%(refname)").lines(), Git("for-each-ref", prefix + "*", format="%(refname)").lines(),