Signatur
Beschreibung
svn_fs_make_file() legt eine neue, leere Datei im Subversion-Dateisystem (FS) unter dem angegebenen Pfad an. Die Funktion arbeitet direkt auf dem Low-Level-Dateisystem-Layer von Subversion und erfordert ein beschreibbares Transaktion-Root-Handle (fsroot), das zuvor über svn_fs_begin_txn2() und svn_fs_txn_root() erzeugt wurde.
Die Funktion ist Teil der SVN-Dateisystem-API (SVNLOOK-Ebene) und wird typischerweise in serverseitigen PHP-Skripten eingesetzt, die direkt auf ein Subversion-Repository zugreifen, ohne den SVN-Client zu verwenden. Damit lassen sich programmatisch neue Dateien in einer Transaktion anlegen, bevor diese committet wird.
Damit die Änderungen dauerhaft gespeichert werden, muss die Transaktion nach dem Erzeugen der Datei explizit mit svn_fs_commit_txn() abgeschlossen werden. Schlägt die Operation fehl (z. B. weil der Pfad bereits existiert oder das Root nicht beschreibbar ist), gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fsroot Pflicht | resource | Ein beschreibbares Transaktions-Root-Handle des Subversion-Dateisystems, das über svn_fs_txn_root() erzeugt wurde. |
|
| $path Pflicht | string | Der absolute Pfad innerhalb des Subversion-Repositorys, unter dem die neue Datei angelegt werden soll, z. B. /trunk/neues-dokument.txt. |
Rückgabewert
true zurück, wenn die Datei erfolgreich angelegt wurde, oder false im Fehlerfall (z. B. wenn der Pfad bereits existiert oder das Root-Handle nicht beschreibbar ist).Beispiele
Neue Datei in einer SVN-Transaktion anlegen und committen
<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
// Neueste Revision ermitteln
$latestRev = svn_fs_youngest_rev($fs);
// Neue Transaktion starten
$txn = svn_fs_begin_txn2($fs, $latestRev);
$txnRoot = svn_fs_txn_root($txn);
// Leere Datei anlegen
$result = svn_fs_make_file($txnRoot, '/trunk/neues-dokument.txt');
if ($result) {
// Transaktion committen
$newRev = svn_fs_commit_txn($txn);
echo "Datei erfolgreich angelegt. Neue Revision: " . $newRev . PHP_EOL;
} else {
echo "Fehler: Datei konnte nicht angelegt werden." . PHP_EOL;
svn_fs_abort_txn($txn);
}
?>
Prüfen, ob der Pfad bereits existiert, bevor die Datei erstellt wird
<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
$latestRev = svn_fs_youngest_rev($fs);
$root = svn_fs_revision_root($fs, $latestRev);
$path = '/trunk/config.ini';
// Prüfen, ob der Pfad bereits existiert
if (svn_fs_check_path($root, $path) !== SVN_NODE_NONE) {
echo "Pfad existiert bereits, keine neue Datei wird angelegt." . PHP_EOL;
} else {
$txn = svn_fs_begin_txn2($fs, $latestRev);
$txnRoot = svn_fs_txn_root($txn);
if (svn_fs_make_file($txnRoot, $path)) {
svn_fs_commit_txn($txn);
echo "Datei '$path' erfolgreich erstellt." . PHP_EOL;
} else {
svn_fs_abort_txn($txn);
echo "Fehler beim Erstellen der Datei." . PHP_EOL;
}
}
?>
// Wichtig · Fallstricke
Wichtig: svn_fs_make_file() legt ausschließlich eine leere Datei an. Um Inhalt in die Datei zu schreiben, muss anschließend svn_fs_apply_text() verwendet werden. Ohne Commit-Schritt über svn_fs_commit_txn() werden alle Änderungen verworfen.
Die Funktion ist Teil der PECL-Erweiterung svn und steht nur zur Verfügung, wenn diese Erweiterung installiert und aktiviert ist. Sie arbeitet auf dem Low-Level-Dateisystem-Layer von Subversion und ist nicht mit dem svn-Kommandozeilenclient gleichzusetzen.
Das übergebene $fsroot muss ein beschreibbares Transaktions-Root sein; ein Revisions-Root (erzeugt via svn_fs_revision_root()) ist schreibgeschützt und führt zu einem Fehler.