feat(files): MAX_VERSIONS_KEPT statt zweier Konstanten

Die Zahl stand doppelt im Quelltext: als const im Backend und noch einmal
im Verlaufs-Dialog, verbunden nur durch den Kommentar "muss zu
maxVersionsKept im Backend passen". Ein Satz ist keine Zusicherung - beim
ersten Aendern haette der Dialog eine andere Zahl genannt als die, die der
Server anwendet.

Jetzt eine .env-Variable (Vorgabe 5), die der Server ueber
/api/v1/public/config mitliefert. Werte unter 1 werden verworfen: Die Zahl
geht als OFFSET in die Aufraeumabfrage, und OFFSET 0 loeschte jede Fassung -
aus "keine Grenze" wuerde "kein Verlauf".

Gemessen: MAX_VERSIONS_KEPT=3, Datei siebenmal ueberschrieben, uebrig
bleiben v6, v5, v4 bei aktueller v7.

Dazu ein README-Abschnitt "Versionen" - Standard aus, warum das so ist,
Kontingent, und dass jedes Strg+S in Office eine Fassung anlegt. Bisher
stand zu alldem nichts im README.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
HoneyandClaude Opus 5 committed 2026-08-24 12:58:12 +02:00
1 parent 7fc8bb51d5
commit ebff565367
10 files changed
+119 -14

No files matched your search

+29 -10
View File
@@ -18,11 +18,14 @@ type Config struct {
// TrustedProxies is the list of IPs/CIDRs whose X-Forwarded-* headers are trusted.
TrustedProxies []*net.IPNet
DBHost string
DBPort string
DBName string
DBUser string
DBPassword string
DBHost string
// MaxVersionsKept: Wie viele frühere Fassungen einer Datei aufgehoben
// werden, wenn die Versionierung für sie eingeschaltet ist.
MaxVersionsKept int
DBPort string
DBName string
DBUser string
DBPassword string
SessionSecret string
SessionMaxAge int
@@ -151,11 +154,12 @@ func Load() (*Config, error) {
ListenAddr: getEnv("APP_LISTEN_ADDR", ":8080"),
PublicURL: getEnv("PUBLIC_URL", "http://localhost:8080"),
DBHost: getEnv("DB_HOST", "localhost"),
DBPort: getEnv("DB_PORT", "5432"),
DBName: getEnv("DB_NAME", "aether"),
DBUser: getEnv("DB_USER", "aether"),
DBPassword: getEnv("DB_PASSWORD", ""),
DBHost: getEnv("DB_HOST", "localhost"),
MaxVersionsKept: getEnvInt("MAX_VERSIONS_KEPT", 5),
DBPort: getEnv("DB_PORT", "5432"),
DBName: getEnv("DB_NAME", "aether"),
DBUser: getEnv("DB_USER", "aether"),
DBPassword: getEnv("DB_PASSWORD", ""),
SessionSecret: getEnv("SESSION_SECRET", ""),
StoragePath: getEnv("STORAGE_PATH", "./data"),
@@ -290,6 +294,21 @@ func parseCIDRList(raw string) ([]*net.IPNet, error) {
return networks, nil
}
// getEnvInt liest eine Zahl. Ein unbrauchbarer Wert nimmt die Vorgabe, statt
// den Start zu verhindern: Eine Tippfehler in einer Nebensache soll nicht
// dazu führen, dass die Cloud gar nicht erst hochkommt.
func getEnvInt(key string, fallback int) int {
v := os.Getenv(key)
if v == "" {
return fallback
}
n, err := strconv.Atoi(strings.TrimSpace(v))
if err != nil || n < 0 {
return fallback
}
return n
}
func getEnv(key, fallback string) string {
if v := os.Getenv(key); v != "" {
return v