Start · Sprachen · PHP · Referenz · svn_fs_abort_txn

svn_fs_abort_txn

Funktion

Bricht eine offene Subversion-Dateisystem-Transaktion ab und gibt alle damit verbundenen Ressourcen frei.

Kategorie: misc

Signatur

svn_fs_abort_txn(resource $txn): bool

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

Typ
bool
Beschreibung
Gibt 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.';
}
?>
Fehler: Fehler beim Schreiben der Datei. Transaktion erfolgreich abgebrochen.

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.';
}
?>
Transaktion abgebrochen.

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