update
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
"""Projektliste: konfigurierte Pfade aus projekte.txt (eine Zeile = absoluter Pfad,
|
||||
#-Kommentare). Von Hand editierbar — UI-Verwaltung kommt später (YAGNI)."""
|
||||
#-Kommentare). Von Hand editierbar; hinzufuegen/entfernen bedienen die UI."""
|
||||
from pathlib import Path
|
||||
|
||||
import config
|
||||
@@ -34,3 +34,41 @@ def finde(name: str) -> Path | None:
|
||||
if p["name"] == name and "fehler" not in p:
|
||||
return Path(p["pfad"])
|
||||
return None
|
||||
|
||||
|
||||
def hinzufuegen(pfad: str) -> None:
|
||||
"""Hängt einen Pfad an projekte.txt an. Wirft ValueError bei ungültigem
|
||||
Verzeichnis, Duplikat oder Basename-Kollision."""
|
||||
p = Path(pfad).expanduser()
|
||||
if not p.is_absolute():
|
||||
raise ValueError("Pfad muss absolut sein")
|
||||
if not p.is_dir():
|
||||
raise ValueError(f"{p} ist kein Verzeichnis")
|
||||
for e in lade():
|
||||
if e["pfad"] == str(p):
|
||||
raise ValueError(f"{p} ist schon eingetragen")
|
||||
if e["name"] == p.name:
|
||||
raise ValueError(f"Namenskollision mit {e['pfad']}")
|
||||
text = ""
|
||||
if config.PROJEKTE_DATEI.is_file():
|
||||
text = config.PROJEKTE_DATEI.read_text(encoding="utf-8")
|
||||
if text and not text.endswith("\n"):
|
||||
text += "\n"
|
||||
config.PROJEKTE_DATEI.write_text(text + str(p) + "\n", encoding="utf-8")
|
||||
|
||||
|
||||
def entfernen(name: str) -> None:
|
||||
"""Streicht den Eintrag aus projekte.txt — nur die Zeile; .planer/ im Repo
|
||||
bleibt unberührt. Wirft ValueError, wenn der Name nicht eingetragen ist."""
|
||||
if not config.PROJEKTE_DATEI.is_file():
|
||||
raise ValueError(f"'{name}' nicht in projekte.txt")
|
||||
rest, getroffen = [], False
|
||||
for zeile in config.PROJEKTE_DATEI.read_text(encoding="utf-8").splitlines():
|
||||
s = zeile.strip()
|
||||
if s and not s.startswith("#") and Path(s).expanduser().name == name:
|
||||
getroffen = True
|
||||
continue
|
||||
rest.append(zeile)
|
||||
if not getroffen:
|
||||
raise ValueError(f"'{name}' nicht in projekte.txt")
|
||||
config.PROJEKTE_DATEI.write_text("\n".join(rest) + ("\n" if rest else ""), encoding="utf-8")
|
||||
|
||||
Reference in New Issue
Block a user