Signatur
Beschreibung
svn_fs_abort_txn() bricht eine zuvor mit svn_fs_begin_txn2() gestartete Transaktion im Subversion-Dateisystem ab. Alle Änderungen, die im Rahmen dieser Transaktion vorgenommen wurden, werden verworfen und die Transaktion wird nicht in das Repository übernommen.
Diese Funktion ist dann sinnvoll, wenn während der Verarbeitung einer Transaktion ein Fehler aufgetreten ist oder die geplanten Änderungen aus einem anderen Grund nicht übermittelt werden sollen – ähnlich wie ein ROLLBACK bei einer Datenbankoperation.
Nach dem Aufruf von svn_fs_abort_txn() ist die Transaktion ungültig und darf nicht mehr verwendet werden. Es empfiehlt sich, Transaktionen in einem try/catch-Block zu verwalten und im Fehlerfall stets abzubrechen, um Ressourcen-Lecks und inkonsistente Repository-Zustände zu vermeiden.
- Transaktionen, die weder committed noch abgebrochen werden, verbleiben im Repository und müssen manuell bereinigt werden.
- Die Funktion gehört zur SVN-PECL-Erweiterung (
svn), die separat installiert werden muss.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $txn Pflicht | resource | Eine gültige Transaktions-Ressource, die zuvor mit svn_fs_begin_txn2() erstellt wurde. |
Rückgabewert
true zurück, wenn die Transaktion erfolgreich abgebrochen wurde, andernfalls false.Beispiele
Transaktion im Fehlerfall abbrechen
<?php
// Repository und Dateisystem öffnen
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
// Neue Transaktion starten (basierend auf der letzten Revision)
$rev = svn_fs_youngest_rev($fs);
$txn = svn_fs_begin_txn2($fs, $rev);
try {
// Transaktions-Root holen und Datei bearbeiten
$root = svn_fs_txn_root($txn);
svn_fs_make_file($root, 'neu.txt');
// ... weiterer Code, der fehlschlagen könnte ...
throw new RuntimeException('Fehler beim Schreiben der Datei.');
// Commit — wird bei Exception nicht erreicht
svn_repos_fs_commit_txn($repos, $txn);
} catch (RuntimeException $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
// Transaktion sauber abbrechen
$result = svn_fs_abort_txn($txn);
echo $result ? 'Transaktion erfolgreich abgebrochen.' : 'Abbruch fehlgeschlagen.';
}
?>
Einfaches Abbrechen einer gestarteten Transaktion
<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
$rev = svn_fs_youngest_rev($fs);
// Transaktion starten
$txn = svn_fs_begin_txn2($fs, $rev);
// Direkt abbrechen, ohne Änderungen vorzunehmen
if (svn_fs_abort_txn($txn)) {
echo 'Transaktion abgebrochen.';
} else {
echo 'Abbruch ist fehlgeschlagen.';
}
?>
// Wichtig · Fallstricke
Achtung: Transaktionen, die weder mit svn_repos_fs_commit_txn() committed noch mit svn_fs_abort_txn() abgebrochen werden, bleiben als verwaiste Transaktionen im Repository erhalten. Diese müssen manuell über das Subversion-Administrationswerkzeug svnadmin bereinigt werden (svnadmin lstxns / svnadmin rmtxns), da sie andernfalls Speicherplatz belegen und die Repository-Verwaltung erschweren.
Die Funktion setzt die PECL-Erweiterung svn voraus, die nicht standardmäßig in PHP enthalten ist und gesondert kompiliert bzw. installiert werden muss. Prüfe daher vor dem Einsatz, ob die Erweiterung geladen ist: extension_loaded('svn').