Größe des Subversion Repositories beim Commit überprüfen

2009-06-24
Subversion Logo

Subversion Logo

Jetzt habe ich ewig nach einer Lösung für folgendes Problem gesucht:

Für unser Subversion-Hosting brauchte ich die Möglichkeit die Größe des Repositories zu limitieren. Im Idealfall sollte ein Commit verhindert werden, wenn dadurch die Größe überschritten wird.

Um einen Commit zu verhindern, braucht man einen pre-commit Hook. Dieser überprüft dann ob die Größe überschritten wird und beendet sich mit Fehlercode 0 wenn alles in Ordnung war und 1 (sowie einer Fehlermeldung) wenn es ein Problem gab.

Um die Verzeichnisgröße anzuzeigen, eignet sich das Linux-Kommando du (man du). Die folgende Zeile ermittelt die Größe eines Verzeichnisses in Megabyte:

MEGS=`du -sm $REPOS | sed -r "s/^([0-9\.]+).+/\1/"`

$REPOS ist eine Variable in der für unseren Fall das Repository steht.

Hat man auf diese Weise die Größe des Repository-Verzeichnisses ermittelt, wird die Größe noch mit der erlaubten Größe verglichen und im Falle des Überschreitens eine Fehlermeldung angezeigt.

if [ "$MEGS" -gt "$QUOTA" ]; then
        #send error message to stderr
        echo "Das Repository hat die zulässige Größe von ${QUOTA}MB überschritten." 1>&2
        exit 1;
fi

via The Dumb Terminal.

  1. plusbyte - Juli 4th, 2009 at 10:54

    Und wie kann der Kunde dann wieder Speicherplatz freigeben lassen? Durch einen spezielle Zeichensequenz im Kommentar? Leider ist es mit der aktuellen Subversion-Version noch etwas problematisch, Revisionen aus dem Repository zu löschen (und somit Speicherplatz freizugeben).

    Wie genau hast Du das dann gelöst? Geht nach meinem bisherigen Kenntnisstand nur mit einem etwas umständlichen Repository-Dump und anschließender Dumpfile-Filterung.

  2. Bastian - Juli 5th, 2009 at 10:31

    Wir haben verschiedene Tests mit der Repository-Größe durchgeführt und bieten unseren Kunden je nach Anforderung verschiedene Limits an. Dh. derzeit ist noch keine manuelle Speicherplatz-Freigabe implementiert. Kann aber noch kommen, wenn das von Kunden gewünscht wird. Aber ich denke 10 Gigabyte pro Repository sind erstmal auf jeden Fall für ne Weile ausreichend.