Signatur
Beschreibung
svn_fs_delete entfernt eine Datei oder ein Verzeichnis aus einem Subversion-Dateisystem-Transaktionsroot. Die Funktion gehört zur PECL-Erweiterung svn und arbeitet direkt auf der Dateisystem-Ebene des SVN-Repositories, ohne einen Working-Copy-Checkout zu benötigen.
Der Parameter fsroot muss ein beschreibbares Transaktions-Root sein, das typischerweise über svn_fs_begin_txn2 und svn_fs_txn_root erzeugt wird. Nur mit einem solchen Transaktions-Root können Änderungen vorgenommen werden – ein Revisions-Root ist schreibgeschützt.
Nach dem Löschen muss die Transaktion mit svn_fs_commit_txn abgeschlossen werden, damit die Änderung dauerhaft im Repository gespeichert wird. Wird die Transaktion nicht committed, bleibt das Repository unverändert.
Die Funktion ist nützlich für serverseitige Skripte, die Repository-Inhalte programmatisch verwalten, z. B. beim automatisierten Bereinigen von Branches oder dem Löschen obsoleter Dateien innerhalb eines CI/CD-Prozesses.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fsroot Pflicht | resource | Ein beschreibbares Transaktions-Root des SVN-Dateisystems, erzeugt z. B. mit svn_fs_txn_root. |
|
| $path Pflicht | string | Der absolute Pfad zur Datei oder zum Verzeichnis im Repository, das gelöscht werden soll, z. B. /trunk/src/veraltet.php. |
Rückgabewert
true bei Erfolg zurück, false wenn das Löschen fehlgeschlagen ist, etwa weil der Pfad nicht existiert oder das Root schreibgeschützt ist.Beispiele
Datei aus SVN-Repository löschen und Transaktion committen
<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/mein-repo');
$fs = svn_repos_fs($repos);
// Aktuelle Revision ermitteln
$latestRev = svn_fs_youngest_rev($fs);
// Neue Transaktion anlegen
$txn = svn_fs_begin_txn2($fs, $latestRev);
$txnRoot = svn_fs_txn_root($txn);
// Datei löschen
$pfad = '/trunk/src/veraltet.php';
if (svn_fs_delete($txnRoot, $pfad)) {
// Transaktion abschließen
$newRev = svn_repos_fs_commit_txn($repos, $txn);
echo "Datei gelöscht. Neue Revision: " . $newRev . PHP_EOL;
} else {
echo "Fehler beim Löschen von: " . $pfad . PHP_EOL;
svn_fs_abort_txn($txn);
}
?>
Verzeichnis (Branch) aus Repository entfernen
<?php
$repos = svn_repos_open('/var/svn/mein-repo');
$fs = svn_repos_fs($repos);
$rev = svn_fs_youngest_rev($fs);
$txn = svn_fs_begin_txn2($fs, $rev);
$txnRoot = svn_fs_txn_root($txn);
// Kompletten Branch löschen
$branch = '/branches/feature-alt';
if (svn_fs_is_dir($txnRoot, $branch)) {
svn_fs_delete($txnRoot, $branch);
$newRev = svn_repos_fs_commit_txn($repos, $txn);
echo "Branch gelöscht. Neue Revision: " . $newRev . PHP_EOL;
} else {
echo "Branch existiert nicht: " . $branch . PHP_EOL;
svn_fs_abort_txn($txn);
}
?>
// Wichtig · Fallstricke
Achtung: Das Löschen über svn_fs_delete ist nicht umkehrbar nach dem Commit – der Pfad ist jedoch weiterhin in früheren Revisionen vorhanden und kann über svn copy aus einer älteren Revision wiederhergestellt werden.
Die svn-Erweiterung ist ein PECL-Paket und wird nicht standardmäßig mit PHP ausgeliefert. Sie muss separat installiert werden (pecl install svn). Zudem muss die Subversion-Bibliothek (libsvn) auf dem System verfügbar sein. Die Unterstützung für neuere PHP-Versionen ist begrenzt, da die Erweiterung nur unregelmäßig gepflegt wird.
Berechtigungen sollten sorgfältig geprüft werden: Skripte, die direkt auf dem Repository operieren, benötigen Schreibzugriff auf das Repository-Verzeichnis und sollten entsprechend abgesichert sein.