Regeln für PR- und Issue-Texte an AG_QGIS angleichen (#3)
Beim Übernehmen aus AG_QGIS/Projektwissen (main @ a0bb40a) waren Regeln verloren gegangen oder eingeengt worden: - PR-Vorlage: Abschnitt „Änderungen an Syntax und Ablageformat“ (dort „Änderungen an Verträgen“), Checklistenpunkt „keine Debug-print“. - Issue-Vorlage: Frage nach Syntax/Ablageformat, Testpflicht nicht nur für den Konverter. - AGENTS.md: Testpflicht wieder für jede neue Funktionalität; Syntax und Ablageformat als Verträge; kein Arbeitsbranch ohne Issue; PR-Text vollständig mit Checkliste. Skill sn-aufgabe-bearbeiten und Checkliste in Leitfaden 03 entsprechend. - ADR 0001 und STATUS: Quell-Commit war a0bb40a, nicht decd2a0. gitea.py prüft vor jeder Abfrage, ob die Repos ohne Anmeldung lesbar sind, und bricht sonst mit klarer Meldung ab – bisher meldete die Sammelsuche bei einem privaten Repo „Keine passenden Tickets“. Die Ausgabe läuft jetzt über UTF-8 (cp1252-Konsolen stürzten bei „→“ ab). Tests: python -m pytest -q -> 61 bestanden (6 neu in tests/test_gitea.py). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -32,6 +32,7 @@ from __future__ import annotations
|
||||
import argparse
|
||||
import json
|
||||
import shutil
|
||||
import sys
|
||||
import tomllib
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
@@ -186,6 +187,26 @@ def hole_issues(basis: str, org: str, repo: str, state: str, art: str = "issues"
|
||||
) from None
|
||||
|
||||
|
||||
def pruefe_sichtbar(basis: str, org: str, namen: list[str]) -> None:
|
||||
"""Bricht mit klarer Meldung ab, wenn ein Repo ohne Anmeldung nicht lesbar ist.
|
||||
|
||||
Ohne diese Prüfung liefert die Sammelsuche über die Organisation für ein privates
|
||||
Repo einfach keine Treffer – das sieht aus wie „keine offenen Tickets“.
|
||||
"""
|
||||
unsichtbar = []
|
||||
for name in namen:
|
||||
try:
|
||||
hole_json(baue_url(basis, f"/repos/{urllib.parse.quote(org)}/{urllib.parse.quote(name)}"))
|
||||
except NichtGefunden:
|
||||
unsichtbar.append(name)
|
||||
if unsichtbar:
|
||||
raise NichtGefunden(
|
||||
f"Ohne Anmeldung nicht lesbar: {', '.join(f'{org}/{n}' for n in unsichtbar)}. "
|
||||
"Das Repo ist privat oder existiert nicht. scripts/gitea.py liest bewusst ohne Token; "
|
||||
"das Repo muss in Gitea öffentlich sein (Repo → Einstellungen → Sichtbarkeit)."
|
||||
)
|
||||
|
||||
|
||||
def hole_issues_org(basis: str, org: str, state: str, art: str = "issues",
|
||||
suchtext: str | None = None) -> list[dict]:
|
||||
"""Issues ALLER Repos der Organisation über den Sammelendpunkt.
|
||||
@@ -549,6 +570,11 @@ def befehl_entwurf(basis: str, org: str, repo: str, art: str, nummer: int | None
|
||||
# ------------------------------------------------------------------ main ------
|
||||
|
||||
def main() -> int:
|
||||
# Windows-Konsolen und Pipes laufen oft mit cp1252; Zeichen wie „→“ in Tickettexten
|
||||
# oder Meldungen führten sonst zum Absturz der Ausgabe.
|
||||
for strom in (sys.stdout, sys.stderr):
|
||||
if hasattr(strom, "reconfigure"):
|
||||
strom.reconfigure(encoding="utf-8", errors="replace")
|
||||
breite_eltern = argparse.ArgumentParser(add_help=False)
|
||||
breite_eltern.add_argument("--breite", type=int, help="Terminalbreite erzwingen (Standard: automatisch)")
|
||||
|
||||
@@ -596,6 +622,8 @@ def main() -> int:
|
||||
return 2
|
||||
|
||||
repo = loese_repo(args.repo, namen) if getattr(args, "repo", None) else None
|
||||
if not (args.befehl == "entwurf" and args.art == "issue"): # nur der Issue-Entwurf kommt ohne Netz aus
|
||||
pruefe_sichtbar(basis, org, [repo] if repo else namen)
|
||||
|
||||
if args.befehl == "tickets":
|
||||
return befehl_tickets(basis, org, repo, namen, args)
|
||||
|
||||
Reference in New Issue
Block a user