Start · Sprachen · PHP · Referenz · svn_fs_delete

svn_fs_delete

Funktion

Löscht eine Datei oder ein Verzeichnis im Subversion-Dateisystem unter dem angegebenen Pfad.

Kategorie: misc

Signatur

svn_fs_delete(resource $fsroot, string $path): bool

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

Typ
bool
Beschreibung
Gibt 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);
}
?>
Datei gelöscht. Neue Revision: 43

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);
}
?>
Branch gelöscht. Neue Revision: 44

// 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.