136 lines
4.8 KiB
Python
136 lines
4.8 KiB
Python
#!/usr/bin/env python
|
|
"""Git Flow helper CLI for this repository.
|
|
|
|
Eerste versie:
|
|
- status
|
|
- feature start/finish
|
|
- bugfix start/finish
|
|
|
|
Andere flows (release/hotfix, hooks, enz.) volgen later.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import sys
|
|
|
|
from .core import config as cfg
|
|
from .core import output
|
|
from .commands import status as status_cmd
|
|
from .commands import feature as feature_cmd
|
|
from .commands import bugfix as bugfix_cmd
|
|
from .commands import release as release_cmd
|
|
from .commands import hotfix as hotfix_cmd
|
|
|
|
|
|
def _build_parser() -> argparse.ArgumentParser:
|
|
parser = argparse.ArgumentParser(
|
|
prog="gitflow",
|
|
description="Git Flow helper voor deze repo",
|
|
)
|
|
|
|
subparsers = parser.add_subparsers(dest="command", required=True)
|
|
|
|
# status
|
|
status_parser = subparsers.add_parser("status", help="Toon huidige branch en repo-status")
|
|
status_parser.set_defaults(func=status_cmd.handle_status)
|
|
|
|
# feature
|
|
feature_parser = subparsers.add_parser("feature", help="Feature branches beheren")
|
|
feature_sub = feature_parser.add_subparsers(dest="action", required=True)
|
|
|
|
feature_start = feature_sub.add_parser("start", help="Start een nieuwe feature branch vanaf develop")
|
|
feature_start.add_argument("name", help="Naam van de feature (zonder prefix)")
|
|
feature_start.set_defaults(func=feature_cmd.handle_feature_start)
|
|
|
|
feature_finish = feature_sub.add_parser("finish", help="Merge een feature branch terug naar develop")
|
|
feature_finish.add_argument(
|
|
"name",
|
|
nargs="?",
|
|
help="Naam van de feature (zonder prefix). Laat leeg om huidige branch te gebruiken.",
|
|
)
|
|
feature_finish.set_defaults(func=feature_cmd.handle_feature_finish)
|
|
|
|
# bugfix
|
|
bugfix_parser = subparsers.add_parser("bugfix", help="Bugfix branches beheren (op develop)")
|
|
bugfix_sub = bugfix_parser.add_subparsers(dest="action", required=True)
|
|
|
|
bugfix_start = bugfix_sub.add_parser("start", help="Start een nieuwe bugfix branch vanaf develop")
|
|
bugfix_start.add_argument("name", help="Naam van de bugfix (zonder prefix)")
|
|
bugfix_start.set_defaults(func=bugfix_cmd.handle_bugfix_start)
|
|
|
|
bugfix_finish = bugfix_sub.add_parser("finish", help="Merge een bugfix branch terug naar develop")
|
|
bugfix_finish.add_argument(
|
|
"name",
|
|
nargs="?",
|
|
help="Naam van de bugfix (zonder prefix). Laat leeg om huidige branch te gebruiken.",
|
|
)
|
|
bugfix_finish.set_defaults(func=bugfix_cmd.handle_bugfix_finish)
|
|
|
|
# release
|
|
release_parser = subparsers.add_parser("release", help="Release branches beheren (main <-> develop)")
|
|
release_sub = release_parser.add_subparsers(dest="action", required=True)
|
|
|
|
release_start = release_sub.add_parser("start", help="Start een nieuwe release branch vanaf develop")
|
|
release_start.add_argument(
|
|
"version",
|
|
nargs="?",
|
|
help="Versienummer (bijv. 1.2.0). Laat leeg om interactief in te geven.",
|
|
)
|
|
release_start.set_defaults(func=release_cmd.handle_release_start)
|
|
|
|
release_finish = release_sub.add_parser("finish", help="Voltooi een release: merge naar main en develop + tag")
|
|
release_finish.add_argument(
|
|
"version",
|
|
nargs="?",
|
|
help="Versienummer (bijv. 1.2.0). Laat leeg om af te leiden van de huidige branch of interactief te vragen.",
|
|
)
|
|
release_finish.set_defaults(func=release_cmd.handle_release_finish)
|
|
|
|
# hotfix
|
|
hotfix_parser = subparsers.add_parser("hotfix", help="Hotfix branches beheren (vanaf main)")
|
|
hotfix_sub = hotfix_parser.add_subparsers(dest="action", required=True)
|
|
|
|
hotfix_start = hotfix_sub.add_parser("start", help="Start een nieuwe hotfix branch vanaf main")
|
|
hotfix_start.add_argument("name", help="Naam of versie van de hotfix (zonder prefix)")
|
|
hotfix_start.set_defaults(func=hotfix_cmd.handle_hotfix_start)
|
|
|
|
hotfix_finish = hotfix_sub.add_parser("finish", help="Voltooi een hotfix: merge naar main en develop + tag")
|
|
hotfix_finish.add_argument(
|
|
"name",
|
|
nargs="?",
|
|
help="Naam of versie van de hotfix (zonder prefix). Laat leeg om huidige branch te gebruiken.",
|
|
)
|
|
hotfix_finish.set_defaults(func=hotfix_cmd.handle_hotfix_finish)
|
|
|
|
return parser
|
|
|
|
|
|
def main(argv: list[str] | None = None) -> int:
|
|
if argv is None:
|
|
argv = sys.argv[1:]
|
|
|
|
cfg.load_config() # voor nu alleen defaults, later evt. bestand
|
|
|
|
parser = _build_parser()
|
|
|
|
try:
|
|
args = parser.parse_args(argv)
|
|
except SystemExit as exc: # argparse gebruikt SystemExit
|
|
return exc.code
|
|
|
|
func = getattr(args, "func", None)
|
|
if func is None:
|
|
parser.print_help()
|
|
return 1
|
|
|
|
try:
|
|
return func(args)
|
|
except KeyboardInterrupt:
|
|
output.error("Afgebroken door gebruiker (Ctrl+C)")
|
|
return 130
|
|
|
|
|
|
if __name__ == "__main__": # pragma: no cover - directe CLI entry
|
|
raise SystemExit(main())
|