Signatur
Beschreibung
svn_fs_apply_text() öffnet einen beschreibbaren Stream auf eine Datei innerhalb eines Subversion-Dateisystem-Transaktions-Roots. Der zurückgegebene Stream kann verwendet werden, um den vollständigen Inhalt der angegebenen Datei zu überschreiben. Dies ist der übliche Weg, um Dateiinhalte programmatisch in einer SVN-Transaktion zu ersetzen.
Die Funktion gehört zu den Low-Level-Funktionen der SVN-Dateisystem-API (svn_fs_*) und wird typischerweise im Zusammenspiel mit svn_repos_fs_begin_txn_for_commit() und svn_fs_txn_root() eingesetzt, um Änderungen an einem Repository vorzunehmen, bevor diese mit svn_repos_fs_commit_txn() übernommen werden.
Der zurückgegebene Stream ist ein normales PHP-Stream-Resource, auf das mit Standard-Stream-Funktionen wie fwrite() oder stream_copy_to_stream() geschrieben werden kann. Nach dem Schreiben sollte der Stream mit fclose() geschlossen werden, um sicherzustellen, dass alle Daten korrekt übertragen wurden.
Diese Funktion ist nur verfügbar, wenn die PECL-Erweiterung svn installiert ist und setzt ein beschreibbares Transaktions-Root voraus – ein Read-only-Root (z. B. aus svn_fs_revision_root()) ist nicht geeignet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $root Pflicht | resource | Ein Transaktions-Root-Resource, das mit svn_fs_txn_root() erzeugt wurde. Muss beschreibbar sein. |
|
| $path Pflicht | string | Der absolute Pfad der Datei innerhalb des Repositories, deren Inhalt ersetzt werden soll, z. B. /trunk/src/index.php. |
|
| $result_pool Pflicht | string | Der APR-Speicherpool, der für die Operation verwendet wird. In den meisten PHP-Bindungen wird hier ein leerer String '' übergeben. |
Rückgabewert
false zurückgegeben.Beispiele
Dateiinhalt in einer SVN-Transaktion ersetzen
<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
// Aktuelle Revision ermitteln
$latestRev = svn_fs_youngest_rev($fs);
// Neue Transaktion starten
$txn = svn_repos_fs_begin_txn_for_commit($repos, $latestRev, 'autor', 'Dateiinhalt aktualisiert');
$root = svn_fs_txn_root($txn);
// Stream auf die zu ersetzende Datei öffnen
$stream = svn_fs_apply_text($root, '/trunk/README.txt', '');
if ($stream === false) {
die('Fehler: Stream konnte nicht geöffnet werden.');
}
// Neuen Inhalt schreiben
fwrite($stream, "Neuer Inhalt der README-Datei.\nStand: " . date('Y-m-d') . "\n");
fclose($stream);
// Transaktion committen
$newRev = svn_repos_fs_commit_txn($txn);
echo "Committed als Revision: $newRev\n";
?>
Lokale Datei in das Repository hochladen
<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
$txn = svn_repos_fs_begin_txn_for_commit(
$repos,
svn_fs_youngest_rev($fs),
'deploy-script',
'Automatisches Deployment'
);
$root = svn_fs_txn_root($txn);
// Lokale Quelldatei öffnen
$localFile = fopen('/tmp/build/app.js', 'rb');
// SVN-Stream für Zieldatei öffnen
$svnStream = svn_fs_apply_text($root, '/trunk/public/app.js', '');
if ($localFile && $svnStream) {
stream_copy_to_stream($localFile, $svnStream);
fclose($localFile);
fclose($svnStream);
$rev = svn_repos_fs_commit_txn($txn);
echo "Datei als Revision $rev eingecheckt.\n";
} else {
echo "Fehler beim Öffnen der Streams.\n";
}
?>
// Wichtig · Fallstricke
Voraussetzungen: Die PECL-Erweiterung svn muss installiert und geladen sein. Die Funktion steht nur zur Verfügung, wenn PHP mit SVN-Unterstützung kompiliert wurde.
Nur für Transaktions-Roots: svn_fs_apply_text() funktioniert ausschließlich mit einem beschreibbaren Transaktions-Root. Der Versuch, ein Revisions-Root (aus svn_fs_revision_root()) zu verwenden, schlägt fehl.
Datei muss existieren: Die Datei am angegebenen Pfad muss bereits im Repository vorhanden sein. Um eine neue Datei anzulegen, muss vorher svn_fs_make_file() aufgerufen werden.
Vollständiger Ersatz: Der Stream überschreibt den gesamten bisherigen Dateiinhalt. Ein teilweises Schreiben (Append) ist nicht möglich – es muss immer der vollständige neue Inhalt geschrieben werden.