- Writing custom git flow scripts - finishing up without extensive testing
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ..core import config, git_api, output
|
||||
from ..core import config, git_api, hooks, output
|
||||
|
||||
|
||||
def _bugfix_branch_name(name: str) -> str:
|
||||
@@ -20,6 +20,15 @@ def handle_bugfix_start(args) -> int:
|
||||
output.info(f"Aanmaken van bugfix branch '{branch_name}' vanaf '{cfg.develop_branch}'")
|
||||
git_api.create_branch(branch_name, cfg.develop_branch)
|
||||
output.success(f"Bugfix branch '{branch_name}' is aangemaakt en gecheckt out.")
|
||||
|
||||
# Hooks na succesvol aanmaken van een bugfix branch
|
||||
hooks.run_hooks(
|
||||
"bugfix_start",
|
||||
{
|
||||
"branch": branch_name,
|
||||
"base_branch": cfg.develop_branch,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
@@ -36,11 +45,24 @@ def handle_bugfix_finish(args) -> int:
|
||||
|
||||
if name is None:
|
||||
current = git_api.get_current_branch()
|
||||
if not current.startswith(cfg.bugfix_prefix):
|
||||
if current.startswith(cfg.bugfix_prefix):
|
||||
bugfix_branch = current
|
||||
else:
|
||||
branches = git_api.list_local_branches_with_prefix(cfg.bugfix_prefix)
|
||||
if not branches:
|
||||
raise git_api.GitError(
|
||||
"Er zijn geen lokale bugfix branches gevonden. "
|
||||
"Maak eerst een bugfix branch aan of geef een naam op."
|
||||
)
|
||||
|
||||
output.heading("Beschikbare bugfix branches")
|
||||
for b in branches:
|
||||
output.plain(f"- {b}")
|
||||
|
||||
raise git_api.GitError(
|
||||
"Je zit niet op een bugfix branch. Geef de bugfix-naam expliciet door (zonder prefix)."
|
||||
"Je zit niet op een bugfix branch. Kies een van de bovenstaande namen "
|
||||
"en voer het commando opnieuw uit, bv.: gitflow bugfix finish <naam-zonder-prefix>."
|
||||
)
|
||||
bugfix_branch = current
|
||||
else:
|
||||
bugfix_branch = _bugfix_branch_name(name)
|
||||
|
||||
@@ -63,6 +85,23 @@ def handle_bugfix_finish(args) -> int:
|
||||
) from exc
|
||||
|
||||
output.success(f"Bugfix branch '{bugfix_branch}' is gemerged naar '{cfg.develop_branch}'.")
|
||||
|
||||
# Optionele cleanup
|
||||
if cfg.delete_bugfix_after_finish:
|
||||
output.info(f"Opruimen van lokale bugfix branch '{bugfix_branch}'")
|
||||
try:
|
||||
git_api._run_git(["branch", "-d", bugfix_branch]) # type: ignore[attr-defined]
|
||||
except git_api.GitError as exc:
|
||||
output.warning(f"Kon bugfix branch '{bugfix_branch}' niet verwijderen: {exc}")
|
||||
|
||||
# Hooks na succesvolle bugfix-finish
|
||||
hooks.run_hooks(
|
||||
"bugfix_finish",
|
||||
{
|
||||
"branch": bugfix_branch,
|
||||
"base_branch": cfg.develop_branch,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ..core import config, git_api, output
|
||||
from ..core import config, git_api, hooks, output
|
||||
|
||||
|
||||
def _feature_branch_name(name: str) -> str:
|
||||
@@ -20,6 +20,15 @@ def handle_feature_start(args) -> int:
|
||||
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.")
|
||||
|
||||
# Hooks na succesvol aanmaken van een feature branch
|
||||
hooks.run_hooks(
|
||||
"feature_start",
|
||||
{
|
||||
"branch": branch_name,
|
||||
"base_branch": cfg.develop_branch,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
@@ -36,11 +45,26 @@ def handle_feature_finish(args) -> int:
|
||||
|
||||
if name is None:
|
||||
current = git_api.get_current_branch()
|
||||
if not current.startswith(cfg.feature_prefix):
|
||||
if current.startswith(cfg.feature_prefix):
|
||||
feature_branch = current
|
||||
else:
|
||||
# Geen naam en we zitten niet op een feature-branch: toon een lijst
|
||||
# met beschikbare feature-branches om de gebruiker te helpen kiezen.
|
||||
branches = git_api.list_local_branches_with_prefix(cfg.feature_prefix)
|
||||
if not branches:
|
||||
raise git_api.GitError(
|
||||
"Er zijn geen lokale feature branches gevonden. "
|
||||
"Maak eerst een feature branch aan of geef een naam op."
|
||||
)
|
||||
|
||||
output.heading("Beschikbare feature branches")
|
||||
for b in branches:
|
||||
output.plain(f"- {b}")
|
||||
|
||||
raise git_api.GitError(
|
||||
"Je zit niet op een feature branch. Geef de feature-naam expliciet door (zonder prefix)."
|
||||
"Je zit niet op een feature branch. Kies een van de bovenstaande namen "
|
||||
"en voer het commando opnieuw uit, bv.: gitflow feature finish <naam-zonder-prefix>."
|
||||
)
|
||||
feature_branch = current
|
||||
else:
|
||||
feature_branch = _feature_branch_name(name)
|
||||
|
||||
@@ -64,6 +88,23 @@ def handle_feature_finish(args) -> int:
|
||||
) from exc
|
||||
|
||||
output.success(f"Feature branch '{feature_branch}' is gemerged naar '{cfg.develop_branch}'.")
|
||||
|
||||
# Optionele cleanup van de feature branch
|
||||
if cfg.delete_feature_after_finish:
|
||||
output.info(f"Opruimen van lokale feature branch '{feature_branch}'")
|
||||
try:
|
||||
git_api._run_git(["branch", "-d", feature_branch]) # type: ignore[attr-defined]
|
||||
except git_api.GitError as exc:
|
||||
output.warning(f"Kon feature branch '{feature_branch}' niet verwijderen: {exc}")
|
||||
|
||||
# Hooks na succesvolle feature-finish
|
||||
hooks.run_hooks(
|
||||
"feature_finish",
|
||||
{
|
||||
"branch": feature_branch,
|
||||
"base_branch": cfg.develop_branch,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ..core import config, git_api, output
|
||||
from ..core import config, git_api, hooks, output
|
||||
|
||||
|
||||
def _hotfix_branch_name(name: str) -> str:
|
||||
@@ -32,6 +32,16 @@ def handle_hotfix_start(args) -> int:
|
||||
output.info(f"Aanmaken van hotfix branch '{branch_name}' vanaf '{cfg.main_branch}'")
|
||||
git_api.create_branch(branch_name, cfg.main_branch)
|
||||
output.success(f"Hotfix branch '{branch_name}' is aangemaakt en gecheckt out.")
|
||||
|
||||
# Hooks na succesvol aanmaken van een hotfix branch
|
||||
hooks.run_hooks(
|
||||
"hotfix_start",
|
||||
{
|
||||
"branch": branch_name,
|
||||
"base_branch": cfg.main_branch,
|
||||
"version": name,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
@@ -42,6 +52,7 @@ def handle_hotfix_finish(args) -> int:
|
||||
cfg = config.CONFIG
|
||||
try:
|
||||
name_arg = getattr(args, "name", None)
|
||||
env_arg = getattr(args, "env", None)
|
||||
|
||||
git_api.ensure_clean_working_tree()
|
||||
git_api.fetch_remote(cfg.remote_name)
|
||||
@@ -56,17 +67,32 @@ def handle_hotfix_finish(args) -> int:
|
||||
name = current[len(prefix) :]
|
||||
hotfix_branch = current
|
||||
else:
|
||||
name = _ensure_version(None)
|
||||
hotfix_branch = _hotfix_branch_name(name)
|
||||
# Toon lijst van beschikbare hotfix branches
|
||||
branches = git_api.list_local_branches_with_prefix(cfg.hotfix_prefix)
|
||||
if not branches:
|
||||
raise git_api.GitError(
|
||||
"Er zijn geen lokale hotfix branches gevonden. "
|
||||
"Maak eerst een hotfix branch aan of geef een naam op."
|
||||
)
|
||||
|
||||
output.heading("Beschikbare hotfix branches")
|
||||
for b in branches:
|
||||
output.plain(f"- {b}")
|
||||
|
||||
raise git_api.GitError(
|
||||
"Je zit niet op een hotfix branch. Kies een van de bovenstaande namen "
|
||||
"en voer het commando opnieuw uit, bv.: gitflow hotfix finish <naam-of-versie>."
|
||||
)
|
||||
|
||||
git_api.ensure_not_behind_remote(hotfix_branch, cfg.remote_name)
|
||||
git_api.ensure_not_behind_remote(cfg.main_branch, cfg.remote_name)
|
||||
git_api.ensure_not_behind_remote(cfg.develop_branch, cfg.remote_name)
|
||||
|
||||
# Voor nu vragen we ook hier de versie/naam en gebruiken die voor de tag.
|
||||
# In een latere iteratie kunnen we hier automatische patch-bumping doen.
|
||||
version_for_tag = name
|
||||
tag_name = cfg.tag_format.format(version=version_for_tag)
|
||||
# Bepaal omgeving en tagnaam
|
||||
env = env_arg or cfg.hotfix_default_env
|
||||
suffix = cfg.environments.get(env, "")
|
||||
base_tag = cfg.tag_format.format(version=name)
|
||||
tag_name = f"{base_tag}{suffix}"
|
||||
|
||||
# Merge naar main
|
||||
output.info(f"Mergen van '{hotfix_branch}' naar '{cfg.main_branch}' en tag '{tag_name}' aanmaken")
|
||||
@@ -101,6 +127,26 @@ def handle_hotfix_finish(args) -> int:
|
||||
output.success(
|
||||
f"Hotfix '{name}' is voltooid: gemerged naar '{cfg.main_branch}' en '{cfg.develop_branch}' en getagd als '{tag_name}'."
|
||||
)
|
||||
|
||||
# Optionele cleanup
|
||||
if cfg.delete_hotfix_after_finish:
|
||||
output.info(f"Opruimen van lokale hotfix branch '{hotfix_branch}'")
|
||||
try:
|
||||
git_api._run_git(["branch", "-d", hotfix_branch]) # type: ignore[attr-defined]
|
||||
except git_api.GitError as exc:
|
||||
output.warning(f"Kon hotfix branch '{hotfix_branch}' niet verwijderen: {exc}")
|
||||
|
||||
# Hooks na succesvolle hotfix-finish
|
||||
hooks.run_hooks(
|
||||
"hotfix_finish",
|
||||
{
|
||||
"branch": hotfix_branch,
|
||||
"base_branch": cfg.main_branch,
|
||||
"version": name,
|
||||
"env": env,
|
||||
"tag": tag_name,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from ..core import config, git_api, output
|
||||
from ..core import config, git_api, hooks, output
|
||||
|
||||
|
||||
def _release_branch_name(version: str) -> str:
|
||||
@@ -31,6 +31,16 @@ def handle_release_start(args) -> int:
|
||||
output.info(f"Aanmaken van release branch '{branch_name}' vanaf '{cfg.develop_branch}'")
|
||||
git_api.create_branch(branch_name, cfg.develop_branch)
|
||||
output.success(f"Release branch '{branch_name}' is aangemaakt en gecheckt out.")
|
||||
|
||||
# Hooks na succesvol aanmaken van een release branch
|
||||
hooks.run_hooks(
|
||||
"release_start",
|
||||
{
|
||||
"branch": branch_name,
|
||||
"base_branch": cfg.develop_branch,
|
||||
"version": version,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
@@ -41,6 +51,7 @@ def handle_release_finish(args) -> int:
|
||||
cfg = config.CONFIG
|
||||
try:
|
||||
version_arg = getattr(args, "version", None)
|
||||
env_arg = getattr(args, "env", None)
|
||||
git_api.ensure_clean_working_tree()
|
||||
git_api.fetch_remote(cfg.remote_name)
|
||||
|
||||
@@ -64,7 +75,11 @@ def handle_release_finish(args) -> int:
|
||||
git_api.ensure_not_behind_remote(cfg.main_branch, cfg.remote_name)
|
||||
git_api.ensure_not_behind_remote(cfg.develop_branch, cfg.remote_name)
|
||||
|
||||
tag_name = cfg.tag_format.format(version=version)
|
||||
# Bepaal omgeving en uiteindelijke tagnaam
|
||||
env = env_arg or cfg.release_default_env
|
||||
suffix = cfg.environments.get(env, "")
|
||||
base_tag = cfg.tag_format.format(version=version)
|
||||
tag_name = f"{base_tag}{suffix}"
|
||||
|
||||
# Merge naar main
|
||||
output.info(f"Mergen van '{release_branch}' naar '{cfg.main_branch}' en tag '{tag_name}' aanmaken")
|
||||
@@ -100,6 +115,26 @@ def handle_release_finish(args) -> int:
|
||||
output.success(
|
||||
f"Release '{version}' is voltooid: gemerged naar '{cfg.main_branch}' en '{cfg.develop_branch}' en getagd als '{tag_name}'."
|
||||
)
|
||||
|
||||
# Optionele cleanup van release branch
|
||||
if cfg.delete_release_after_finish:
|
||||
output.info(f"Opruimen van lokale release branch '{release_branch}'")
|
||||
try:
|
||||
git_api._run_git(["branch", "-d", release_branch]) # type: ignore[attr-defined]
|
||||
except git_api.GitError as exc:
|
||||
output.warning(f"Kon release branch '{release_branch}' niet verwijderen: {exc}")
|
||||
|
||||
# Hooks na succesvolle release-finish
|
||||
hooks.run_hooks(
|
||||
"release_finish",
|
||||
{
|
||||
"branch": release_branch,
|
||||
"base_branch": cfg.main_branch,
|
||||
"version": version,
|
||||
"env": env,
|
||||
"tag": tag_name,
|
||||
},
|
||||
)
|
||||
return 0
|
||||
except git_api.GitError as exc:
|
||||
output.error(str(exc))
|
||||
|
||||
Reference in New Issue
Block a user