from datetime import datetime import typer import git_flow.command.base as base from git_flow import TRASH_BRANCH_PREFIX, WIP_BRANCH_PREFIX, GitFlowError from git_flow.git import Git app = typer.Typer() @app.command() def commit(): """Crea un commit siguiendo el formato de Conventional Commits""" base.ensure_initialized() branch = base.ensure_right_branch() if not _has_files_staged(): base.io_warning("No hay cambios en el indice para commitear.") if base.io_confirm("¿Desea agregar la carpeta actual?"): Git("add", ".").exec(print="Agregando cambios") else: raise GitFlowError("Debe agregar algún cambio al indice para continuar.") message = base.get_commit_message() commit_type = message[: message.index(":")] if branch.startswith(WIP_BRANCH_PREFIX): original_branch = branch.removeprefix(WIP_BRANCH_PREFIX) Git("commit", m=message).exec(print="Creando commit en rama WIP") if commit_type != "wip": suffix = datetime.now().strftime("%Y%m%dT%H%M") Git("switch", original_branch).exec(print="Volviendo a rama original") Git("merge", branch, squash=True).exec( print="Squasheando commits WIP en uno solo" ) Git("commit", m=message).exec(print="Creando commit final de rama WIP") Git( "branch", branch, TRASH_BRANCH_PREFIX + branch + "/" + suffix, move=True ).exec(print="Backup de rama WIP") else: if commit_type == "wip": Git("switch", WIP_BRANCH_PREFIX + branch, create=True).exec( print="Creando nueva rama WIP" ) Git("commit", m=message).exec(print="Creando commit") def _has_files_staged(): status = Git.status() if not status: raise GitFlowError("No hay cambios para commitear.") files_in_index = [] for s in status: if s.worktree != "?" and s.worktree != " ": files_in_index.append(s.file) return len(files_in_index) > 0