Start · Sprachen · PHP · Referenz · svn_fs_txn_root

svn_fs_txn_root

Funktion

Erstellt und gibt eine Transaktionswurzel (Transaction Root) für eine gegebene SVN-Dateisystem-Transaktion zurück.

Kategorie: misc

Signatur

svn_fs_txn_root(resource $txn): resource

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

Typ
resource
Beschreibung
Gibt eine Ressource zurück, die die Transaktionswurzel des Dateisystem-Baums innerhalb der angegebenen Transaktion repräsentiert. Diese Ressource wird für weitere Dateisystem-Operationen innerhalb der Transaktion benötigt.

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";
Datei erfolgreich in neuer Revision erstellt.

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";
Verzeichnis angelegt.

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