- Writing custom git flow scripts - a start
This commit is contained in:
135
scripts/git/gitflow.py
Normal file
135
scripts/git/gitflow.py
Normal file
@@ -0,0 +1,135 @@
|
||||
#!/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())
|
||||
Reference in New Issue
Block a user