Signatur
Beschreibung
svn_fs_make_dir() ist Teil der PECL-Erweiterung svn und ermöglicht es, direkt auf der Dateisystem-Ebene eines Subversion-Repositories ein neues Verzeichnis anzulegen. Die Funktion arbeitet dabei auf einem Transaktions- oder Revisions-Root-Handle ($fs), wie er beispielsweise von svn_fs_begin_txn2() oder svn_fs_revision_root() erzeugt wird.
Das Verzeichnis wird innerhalb eines Transaktionskontexts erstellt, sodass die Änderung erst nach einem erfolgreichen svn_fs_commit_txn() dauerhaft im Repository gespeichert wird. Ohne Commit bleibt das Verzeichnis nur in der Transaktion und wird nicht sichtbar.
Diese Low-Level-Funktion eignet sich besonders für serverseitige Skripte, die direkt auf ein SVN-Repository zugreifen müssen, ohne einen Working-Copy-Checkout vorzunehmen – etwa für automatisierte Repository-Initialisierungen oder Migrationsskripte.
Der optionale Parameter $pool referenziert einen APR-Speicherpool. In den meisten Anwendungsfällen kann er weggelassen werden, sodass PHP intern einen eigenen Pool verwendet.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fs Pflicht | resource | Ein Dateisystem-Root-Handle, das auf einen Transaktions- oder Revisions-Root zeigt, typischerweise erzeugt durch svn_fs_begin_txn2() oder svn_fs_revision_root(). |
|
| $path Pflicht | string | Der absolute Pfad innerhalb des Subversion-Dateisystems, an dem das neue Verzeichnis erstellt werden soll, z. B. /trunk/neues-verzeichnis. Das übergeordnete Verzeichnis muss bereits existieren. |
|
| $pool | resource | null | Optionaler APR-Speicherpool. Wird dieser nicht angegeben, verwaltet PHP den Speicher intern automatisch. |
Rückgabewert
true zurück, wenn das Verzeichnis erfolgreich erstellt wurde, oder false bei einem Fehler (z. B. wenn der Pfad bereits existiert oder das übergeordnete Verzeichnis fehlt).Beispiele
Neues Verzeichnis in einer SVN-Transaktion erstellen
<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/mein-repo');
$fs = svn_repos_fs($repos);
// Aktuelle HEAD-Revision ermitteln
$rev = svn_fs_youngest_rev($fs);
// Neue Transaktion starten
$txn = svn_fs_begin_txn2($fs, $rev);
$txn_root = svn_fs_txn_root($txn);
// Neues Verzeichnis anlegen
if (svn_fs_make_dir($txn_root, '/trunk/neues-verzeichnis')) {
// Transaktion committen
$result = svn_repos_fs_commit_txn($txn);
echo "Verzeichnis erfolgreich erstellt, neue Revision: $result\n";
} else {
echo "Fehler beim Erstellen des Verzeichnisses.\n";
}
?>
Mehrere Verzeichnisse in einer einzigen Transaktion anlegen
<?php
$repos = svn_repos_open('/var/svn/mein-repo');
$fs = svn_repos_fs($repos);
$rev = svn_fs_youngest_rev($fs);
$txn = svn_fs_begin_txn2($fs, $rev);
$root = svn_fs_txn_root($txn);
$verzeichnisse = [
'/branches/feature-x',
'/branches/feature-x/src',
'/branches/feature-x/tests',
];
foreach ($verzeichnisse as $dir) {
if (!svn_fs_make_dir($root, $dir)) {
echo "Fehler beim Anlegen von: $dir\n";
// Transaktion verwerfen, nicht committen
exit(1);
}
}
$neue_revision = svn_repos_fs_commit_txn($txn);
echo "Alle Verzeichnisse erstellt. Neue Revision: $neue_revision\n";
?>
// Wichtig · Fallstricke
Achtung: svn_fs_make_dir() ist Teil der PECL-Erweiterung svn, die separat installiert werden muss (pecl install svn) und von den installierten Subversion-Bibliotheken abhängt. Die Verfügbarkeit und das genaue Verhalten können je nach Version der SVN-Bibliothek variieren.
- Das übergeordnete Verzeichnis des anzulegenden Pfads muss bereits im Dateisystem existieren – fehlende Zwischenpfade werden nicht automatisch erstellt.
- Die Funktion arbeitet ausschließlich im Kontext einer offenen Transaktion. Änderungen werden erst nach
svn_repos_fs_commit_txn()dauerhaft gespeichert. - Direkter Zugriff auf das Dateisystem erfordert in der Regel entsprechende Dateisystemberechtigungen auf das Repository-Verzeichnis.