#!/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())