Signatur
Beschreibung
svn_cleanup() führt eine Bereinigung (cleanup) auf dem angegebenen Verzeichnis einer Subversion-Arbeitskopie durch. Dies entspricht dem Kommandozeilenaufruf svn cleanup. Die Funktion arbeitet rekursiv und betrifft das angegebene Verzeichnis sowie alle Unterverzeichnisse.
Typischerweise wird diese Funktion benötigt, wenn eine vorherige SVN-Operation (z. B. ein Commit oder ein Update) durch einen Fehler, Absturz oder Abbruch unterbrochen wurde und die Arbeitskopie in einem inkonsistenten Zustand mit aktiven Sperren zurückgelassen hat. In solchen Fällen verweigert SVN weitere Operationen, bis ein Cleanup durchgeführt wurde.
svn_cleanup() entfernt alle administrativen Sperren (locks) im .svn-Verzeichnis und setzt unvollständige Operationen zurück, sodass die Arbeitskopie wieder in einem konsistenten Zustand ist und normale SVN-Operationen wieder möglich sind.
Die Funktion ist Teil der PECL-Extension svn und steht nur zur Verfügung, wenn diese Extension installiert und aktiviert ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $workingdir Pflicht | string | Pfad zum lokalen Verzeichnis der SVN-Arbeitskopie, das bereinigt werden soll. Der Pfad kann relativ oder absolut angegeben werden. |
Rückgabewert
true zurück, wenn die Bereinigung erfolgreich war. Gibt false zurück, wenn ein Fehler aufgetreten ist (z. B. wenn das angegebene Verzeichnis keine gültige SVN-Arbeitskopie ist oder nicht existiert).Beispiele
Einfache Bereinigung einer SVN-Arbeitskopie
<?php
$workingDir = '/var/www/mein-projekt';
if (svn_cleanup($workingDir)) {
echo "SVN-Arbeitskopie erfolgreich bereinigt.";
} else {
echo "Fehler beim Bereinigen der SVN-Arbeitskopie.";
}
?>
Cleanup nach fehlgeschlagenem Update durchführen
<?php
$workingDir = '/var/www/mein-projekt';
// Versuche ein Update durchzuführen
$result = svn_update($workingDir);
if ($result === false) {
echo "Update fehlgeschlagen. Versuche Bereinigung...\n";
if (svn_cleanup($workingDir)) {
echo "Bereinigung erfolgreich. Bitte Update erneut versuchen.\n";
// Erneuter Versuch nach der Bereinigung
$result = svn_update($workingDir);
if ($result !== false) {
echo "Update nach Bereinigung erfolgreich auf Revision: " . $result . "\n";
}
} else {
echo "Bereinigung fehlgeschlagen. Manuelle Eingriff erforderlich.\n";
}
} else {
echo "Update erfolgreich auf Revision: " . $result . "\n";
}
?>
// Wichtig · Fallstricke
Voraussetzung: Die PECL-Extension svn muss installiert sein (pecl install svn). Sie ist nicht standardmäßig in PHP enthalten.
Berechtigungen: Das PHP-Skript muss ausreichende Dateisystemrechte besitzen, um die .svn-Verzeichnisse in der Arbeitskopie lesen und schreiben zu können. Andernfalls schlägt die Bereinigung fehl.
Sicherheit: Wird $workingdir aus Benutzereingaben übernommen, muss der Pfad unbedingt validiert und auf erlaubte Verzeichnisse beschränkt werden, um unbeabsichtigte Bereinigungen außerhalb der vorgesehenen Arbeitskopie zu verhindern.
Diese Funktion sollte nicht auf Verzeichnissen verwendet werden, die keine SVN-Arbeitskopien sind, da dies zu einem Fehler führt.