Lokal abweichenden Ablageort der Plugin-Klone unterstuetzen (#6)

hallo.py, setup_workspace.py und link_qgis_profile.py gingen bisher fest
davon aus, dass die Repos aus workspace.toml direkte Unterordner von
Projektwissen sind. Eine optionale, nicht versionierte workspace.local.toml
mit [workspace] repos_root = "..." kann das jetzt lokal ueberschreiben, z. B.
wenn die Klone zusaetzlich unter einem separaten src-Ordner liegen und von
dort in mehrere QGIS-Profile verlinkt werden. Ohne diese Datei bleibt das
Verhalten fuer alle unveraendert.
This commit is contained in:
Michael Otto
2026-09-14 11:36:55 +02:00
parent 3d1e9b4b3d
commit 85a34e4d1d
3 changed files with 54 additions and 4 deletions
+24 -1
View File
@@ -45,6 +45,26 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
MANIFEST = ROOT / "workspace.toml"
LOKALE_ÜBERSCHREIBUNG = ROOT / "workspace.local.toml"
def repos_root() -> Path:
"""Ordner, unter dem die Plugin-/Daten-Repositories liegen.
Standard: ROOT selbst (Repos als direkte Unterordner, wie in workspace.toml
dokumentiert). Wer die Klone woanders liegen hat (z. B. ein separater
src-Ordner, der zusätzlich ins QGIS-Profil verlinkt wird), kann das lokal
und nicht versioniert in workspace.local.toml überschreiben:
[workspace]
repos_root = "C:/Projekte/QGIS/src/dev"
"""
if not LOKALE_ÜBERSCHREIBUNG.is_file():
return ROOT
with LOKALE_ÜBERSCHREIBUNG.open("rb") as f:
lokal = tomllib.load(f)
pfad = lokal.get("workspace", {}).get("repos_root")
return Path(pfad).expanduser() if pfad else ROOT
BREITE = 100 # Zielbreite der Tabelle (lesbar im 100-Zeichen-Terminal)
FETCH_TIMEOUT = 60 # Sekunden je git fetch, damit ein hängender Server nicht blockiert
@@ -348,13 +368,16 @@ def main() -> int:
if wurzel_ist_repo and gewuenscht(ROOT.name):
befunde.append(Befund(name=ROOT.name, kanal=manifest.get("workspace", {}).get("branch", ""),
pfad=ROOT, ist_wurzel=True))
befunde += [Befund(name=r["name"], kanal=r["branch"], pfad=ROOT / r["name"])
rroot = repos_root()
befunde += [Befund(name=r["name"], kanal=r["branch"], pfad=rroot / r["name"])
for r in repos if gewuenscht(r["name"])]
modus = ("ohne Netz – kein fetch, kein Pull" if args.ohne_netz
else "nur prüfen – fetch, kein Pull" if args.nur_pruefen
else "fetch und fast-forward-Pull")
print(f"Hallo. Workspace: {ROOT}")
if rroot != ROOT:
print(f"Repositories liegen laut workspace.local.toml unter: {rroot}")
print(f"Modus: {modus} | Repositories: {len(befunde)}")
if not wurzel_ist_repo and gewuenscht(ROOT.name):
print(f"Hinweis: '{ROOT.name}' selbst ist noch kein Git-Repository – geprüft werden nur die Klone.")