Start · Sprachen · PHP · Referenz · svn_fs_begin_txn2

svn_fs_begin_txn2

Funktion

Erstellt eine neue Transaktion im Subversion-Dateisystem, die auf einer bestimmten Revision basiert.

Kategorie: misc

Signatur

svn_fs_begin_txn2(resource $fs, int $rev): resource

Beschreibung

svn_fs_begin_txn2 öffnet eine neue Transaktion in einem Subversion-Dateisystem-Objekt. Eine Transaktion ist ein temporärer Arbeitsbereich, in dem Änderungen an Verzeichnissen und Dateien vorgenommen werden können, bevor sie mittels svn_fs_commit_txn dauerhaft als neue Revision gespeichert werden.

Als Basis für die neue Transaktion dient eine vorhandene Revision des Repositories. Alle Änderungen, die innerhalb der Transaktion durchgeführt werden, bauen auf dem Zustand dieser Revision auf. Das zurückgegebene Ressource-Handle wird für alle folgenden Operationen innerhalb dieser Transaktion benötigt, beispielsweise zum Abrufen des Transaktions-Roots oder zum Setzen von Eigenschaften.

Diese Funktion ist Teil der SVNFS-Erweiterung (svn) und steht nur zur Verfügung, wenn die PHP-SVN-Extension kompiliert und aktiviert ist. Sie eignet sich für serverseitige SVN-Automatisierungen, bei denen direkt auf das Repository-Dateisystem zugegriffen wird, ohne einen Working-Copy-Client zu benötigen.

Parameter

Name Typ Default Beschreibung
$fs Pflicht resource Ein gültiges Dateisystem-Ressource-Handle, das zuvor mit svn_repos_fs oder einer gleichwertigen Funktion geöffnet wurde.
$rev Pflicht int Die Revisionsnummer, auf der die neue Transaktion basieren soll. Die Transaktion erbt den Zustand des Dateisystems bei dieser Revision.

Rückgabewert

Typ
resource
Beschreibung
Gibt ein Ressource-Handle für die neu erstellte Transaktion zurück. Dieses Handle wird für nachfolgende Operationen wie svn_fs_txn_root oder svn_fs_commit_txn benötigt. Im Fehlerfall wird false zurückgegeben.

Beispiele

Neue Transaktion erstellen und committen

<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/myrepo');

// Dateisystem des Repositories abrufen
$fs = svn_repos_fs($repos);

// Aktuelle (jüngste) Revision ermitteln
$latestRev = svn_fs_youngest_rev($fs);

// Neue Transaktion auf Basis der aktuellen Revision starten
$txn = svn_fs_begin_txn2($fs, $latestRev);

if (!$txn) {
    die('Transaktion konnte nicht gestartet werden.');
}

// Transaktions-Root abrufen
$txnRoot = svn_fs_txn_root($txn);

// Beispiel: Neue Datei in der Transaktion anlegen
svn_fs_make_file($txnRoot, 'hello.txt');

// Transaktion committen
$newRev = svn_fs_commit_txn($txn);

echo "Neue Revision erstellt: $newRev\n";
?>
Neue Revision erstellt: 42

Transaktion mit Eigenschaft versehen

<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs    = svn_repos_fs($repos);
$rev   = svn_fs_youngest_rev($fs);

$txn = svn_fs_begin_txn2($fs, $rev);

if ($txn) {
    // Commit-Nachricht als Transaktionseigenschaft setzen
    svn_fs_change_txn_prop($txn, 'svn:log', 'Automatischer Commit via PHP');

    // Weitere Änderungen...
    $txnRoot = svn_fs_txn_root($txn);
    svn_fs_make_dir($txnRoot, 'neues-verzeichnis');

    // Commit
    $newRev = svn_fs_commit_txn($txn);
    echo "Revision $newRev erfolgreich erstellt.\n";
} else {
    echo "Fehler beim Starten der Transaktion.\n";
}
?>
Revision 43 erfolgreich erstellt.

// Wichtig · Fallstricke

Achtung: Nicht committete Transaktionen bleiben im Repository als unvollständige Transaktionen bestehen und können Speicherplatz belegen. Es empfiehlt sich, nicht mehr benötigte Transaktionen explizit mit svn_fs_abort_txn abzubrechen, falls ein Fehler auftritt.

Diese Funktion greift direkt auf das Dateisystem des Repositories zu und umgeht dabei die üblichen Zugriffsprüfungen des SVN-Servers (z. B. authz). Sie sollte daher ausschließlich in vertrauenswürdigen, serverseitigen Skripten eingesetzt werden.

Die SVN-PHP-Extension ist nicht Teil der PHP-Standardinstallation und muss als PECL-Paket (pecl install svn) nachinstalliert werden.