Files
eveAI/scripts/git/commands/feature.py
2025-12-11 09:27:21 +01:00

72 lines
2.4 KiB
Python

from __future__ import annotations
from ..core import config, git_api, output
def _feature_branch_name(name: str) -> str:
return f"{config.CONFIG.feature_prefix}{name}"
def handle_feature_start(args) -> int:
name: str = args.name
cfg = config.CONFIG
try:
git_api.ensure_clean_working_tree()
git_api.fetch_remote(cfg.remote_name)
git_api.ensure_not_behind_remote(cfg.develop_branch, cfg.remote_name)
branch_name = _feature_branch_name(name)
output.info(f"Aanmaken van feature branch '{branch_name}' vanaf '{cfg.develop_branch}'")
git_api.create_branch(branch_name, cfg.develop_branch)
output.success(f"Feature branch '{branch_name}' is aangemaakt en gecheckt out.")
return 0
except git_api.GitError as exc:
output.error(str(exc))
return 1
def handle_feature_finish(args) -> int:
cfg = config.CONFIG
name: str | None = args.name
try:
git_api.ensure_clean_working_tree()
git_api.fetch_remote(cfg.remote_name)
if name is None:
current = git_api.get_current_branch()
if not current.startswith(cfg.feature_prefix):
raise git_api.GitError(
"Je zit niet op een feature branch. Geef de feature-naam expliciet door (zonder prefix)."
)
feature_branch = current
else:
feature_branch = _feature_branch_name(name)
# Zorg dat betrokken branches niet achterlopen op remote
git_api.ensure_not_behind_remote(feature_branch, cfg.remote_name)
git_api.ensure_not_behind_remote(cfg.develop_branch, cfg.remote_name)
output.info(f"Mergen van '{feature_branch}' naar '{cfg.develop_branch}'")
git_api.checkout_branch(cfg.develop_branch)
merge_args = ["merge"]
if cfg.use_no_ff_for_feature:
merge_args.append("--no-ff")
merge_args.append(feature_branch)
try:
git_api._run_git(merge_args) # type: ignore[attr-defined]
except git_api.GitError as exc:
raise git_api.GitError(
"Merge is mislukt (mogelijk conflicten). Los de conflicten op en voltooi de merge handmatig."
) from exc
output.success(f"Feature branch '{feature_branch}' is gemerged naar '{cfg.develop_branch}'.")
return 0
except git_api.GitError as exc:
output.error(str(exc))
return 1