Signatur
Beschreibung
svn_fs_txn_root() erzeugt eine sogenannte Transaktionswurzel für eine zuvor gestartete SVN-Dateisystem-Transaktion. Eine Transaktionswurzel repräsentiert den Wurzelknoten des Verzeichnisbaums innerhalb einer offenen Transaktion und ermöglicht das Lesen und Schreiben von Dateisystem-Daten im Kontext dieser Transaktion.
Transaktionen im Subversion-Dateisystem entsprechen dem Konzept einer atomaren Änderungseinheit (ähnlich wie ein Commit-Vorgang). Über die Transaktionswurzel können Dateien und Verzeichnisse innerhalb der Transaktion manipuliert werden, bevor die Transaktion schließlich committiert oder abgebrochen wird.
Diese Funktion wird in Kombination mit anderen svn_fs_*-Funktionen verwendet, z. B. svn_fs_begin_txn2() zum Starten der Transaktion und svn_fs_commit_txn() zum Abschließen. Sie ist Teil der Low-Level-SVN-Dateisystem-API und eignet sich für direkte Repository-Manipulationen ohne einen Working-Copy-Workflow.
Die zurückgegebene Ressource kann dann an Funktionen wie svn_fs_make_file(), svn_fs_make_dir() oder svn_fs_apply_text() übergeben werden, um Änderungen an der Transaktion vorzunehmen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $txn Pflicht | resource | Eine SVN-Dateisystem-Transaktions-Ressource, die zuvor mit svn_fs_begin_txn2() oder einer vergleichbaren Funktion erzeugt wurde. |
Rückgabewert
Beispiele
Transaktionswurzel erstellen und Datei anlegen
<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/myrepo');
// Dateisystem des Repositories holen
$fs = svn_repos_fs($repos);
// Aktuelle Revision ermitteln
$rev = svn_fs_youngest_rev($fs);
// Neue Transaktion starten
$txn = svn_repos_fs_begin_txn_for_commit($repos, $rev, 'author', 'Commit-Nachricht');
// Transaktionswurzel holen
$txnRoot = svn_fs_txn_root($txn);
// Neue Datei in der Transaktion erstellen
svn_fs_make_file($txnRoot, 'neue-datei.txt');
// Transaktion committen
svn_repos_fs_commit_txn($txn);
echo "Datei erfolgreich in neuer Revision erstellt.\n";
Verzeichnis in einer Transaktion anlegen
<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
$rev = svn_fs_youngest_rev($fs);
// Transaktion starten
$txn = svn_repos_fs_begin_txn_for_commit($repos, $rev, 'admin', 'Neues Verzeichnis');
// Transaktionswurzel abrufen
$root = svn_fs_txn_root($txn);
// Verzeichnis anlegen
svn_fs_make_dir($root, 'neues-verzeichnis');
// Transaktion abschließen
svn_repos_fs_commit_txn($txn);
echo "Verzeichnis angelegt.\n";
// Wichtig · Fallstricke
Hinweis zur Verfügbarkeit: Die svn_fs_*-Funktionen sind Teil der PECL-Erweiterung svn. Sie müssen sicherstellen, dass diese Erweiterung installiert und aktiviert ist. Die Funktionen sind nicht in der PHP-Standardinstallation enthalten.
Ressourcen-Verwaltung: Transaktions-Ressourcen und Wurzel-Ressourcen sollten nach Gebrauch nicht vergessen werden. Nicht committierte Transaktionen bleiben im Repository als offene Transaktionen erhalten und können zu Problemen führen. Im Fehlerfall sollte eine Transaktion explizit abgebrochen werden.
Direktzugriff: Diese Low-Level-API umgeht alle Hook-Skripte des Repositories nicht automatisch. Für korrekte Repository-Integrität empfiehlt sich die Verwendung von svn_repos_fs_begin_txn_for_commit() statt svn_fs_begin_txn2(), da erstere die Repository-Hooks korrekt auslöst.