feature: add branch types, commit types, support for breaking changes
This commit is contained in:
@@ -9,6 +9,7 @@ from rich.table import Table
|
||||
|
||||
from git_flow import (
|
||||
BRANCH_TYPES,
|
||||
COMMIT_TYPE_INCREMENT,
|
||||
COMMIT_TYPES,
|
||||
FLOWCONFIG_FILENAME,
|
||||
FLOWCONFIG_VERSION,
|
||||
@@ -155,8 +156,30 @@ def is_valid_ticket(ticket: str) -> bool:
|
||||
)
|
||||
|
||||
|
||||
CUSTOM_COMMIT_TYPE_OPTION = "otro"
|
||||
|
||||
|
||||
def get_commit_message(commit_types: list[str] = COMMIT_TYPES) -> str:
|
||||
commit_type = io_choice("Tipo de commit", commit_types)
|
||||
commit_type = io_choice("Tipo de commit", commit_types + [CUSTOM_COMMIT_TYPE_OPTION])
|
||||
|
||||
if commit_type == CUSTOM_COMMIT_TYPE_OPTION:
|
||||
commit_type = io_prompt(
|
||||
"Tipo de commit personalizado",
|
||||
strip=True,
|
||||
validator=lambda s: re.fullmatch(r"\w+", s.strip()) is not None,
|
||||
instruction="letras, números o _",
|
||||
)
|
||||
|
||||
if commit_type not in COMMIT_TYPE_INCREMENT:
|
||||
io_warning(
|
||||
f"El tipo '{commit_type}' no produce un salto de versión, "
|
||||
"salvo que se marque como breaking change."
|
||||
)
|
||||
|
||||
# Los commits WIP se squashean en uno final, que es el que puede marcarse como breaking
|
||||
if commit_type != "wip" and io_confirm("¿Es un breaking change?", False):
|
||||
commit_type += "!"
|
||||
|
||||
commit_message = io_prompt(
|
||||
"Mensaje de commit",
|
||||
validator=lambda s: 0 < len(s) and len(s) < 100,
|
||||
@@ -166,7 +189,7 @@ def get_commit_message(commit_types: list[str] = COMMIT_TYPES) -> str:
|
||||
|
||||
|
||||
# <tipo>[(alcance)][!]: <mensaje>, para no confundir "Merge pull request 'feature: ...'" con un tipo
|
||||
COMMIT_SUBJECT_RE = re.compile(r"^(\w+)(?:\([^)]*\))?!?:\s*(.*)$")
|
||||
COMMIT_SUBJECT_RE = re.compile(r"^(\w+)(?:\([^)]*\))?(!)?:\s*(.*)$")
|
||||
|
||||
|
||||
def show_commits(title: str, revision_range: str):
|
||||
@@ -188,7 +211,8 @@ def show_commits(title: str, revision_range: str):
|
||||
for line in lines:
|
||||
timestamp, subject = line.split("\t", 1)
|
||||
match = COMMIT_SUBJECT_RE.match(subject)
|
||||
commit_type, message = match.groups() if match else ("-", subject)
|
||||
commit_type, breaking, message = match.groups() if match else ("-", None, subject)
|
||||
commit_type += breaking or ""
|
||||
table.add_row(format_time_ago(now - int(timestamp)), commit_type, message)
|
||||
|
||||
console.print(table)
|
||||
|
||||
@@ -128,8 +128,14 @@ def get_next_tag_from_commits(
|
||||
) -> str | None:
|
||||
increment = SEMVER_SKIP
|
||||
for commit in commits:
|
||||
commit_type = commit.partition(":")[0]
|
||||
increment = max(increment, COMMIT_TYPE_INCREMENT.get(commit_type, SEMVER_SKIP))
|
||||
match = base.COMMIT_SUBJECT_RE.match(commit)
|
||||
|
||||
if not match:
|
||||
continue
|
||||
|
||||
commit_type, breaking, _ = match.groups()
|
||||
commit_increment = SEMVER_MAJOR if breaking else COMMIT_TYPE_INCREMENT.get(commit_type)
|
||||
increment = max(increment, commit_increment or SEMVER_SKIP)
|
||||
|
||||
if increment == SEMVER_SKIP:
|
||||
return None
|
||||
|
||||
Reference in New Issue
Block a user