Signatur
Beschreibung
svn_fs_contents_changed vergleicht den Inhalt einer Datei an einem bestimmten Pfad in zwei verschiedenen Subversion-Dateisystem-Wurzeln (Filesystem Roots) und gibt an, ob sich der Inhalt zwischen den beiden Revisionen verändert hat.
Die Funktion ist nützlich, wenn man effizient feststellen möchte, ob eine bestimmte Datei zwischen zwei Revisionen eines SVN-Repositories tatsächlich geändert wurde – ohne den gesamten Inhalt der Dateien lesen und manuell vergleichen zu müssen. Typische Anwendungsfälle sind Diff-Werkzeuge, Änderungsreporter oder Deployment-Skripte, die nur geänderte Dateien verarbeiten sollen.
Die Dateisystem-Wurzeln (fsroot) werden üblicherweise mit svn_fs_revision_root oder einer ähnlichen Funktion erzeugt und repräsentieren einen bestimmten Revisionsstand des Repositories.
Gibt true zurück, wenn sich der Dateiinhalt unterscheidet, und false, wenn er identisch ist. Bei ungültigen Pfaden oder Ressourcen kann die Funktion Fehler erzeugen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $fsroot1 Pflicht | resource | Eine Ressource, die die erste Dateisystem-Wurzel (z. B. eine bestimmte Revision) des SVN-Repositories repräsentiert. | |
| $path1 Pflicht | string | Der Pfad zur Datei innerhalb des ersten Dateisystem-Wurzel-Kontexts, z. B. /trunk/src/index.php. |
|
| $fsroot2 Pflicht | resource | Eine Ressource, die die zweite Dateisystem-Wurzel (z. B. eine andere Revision) des SVN-Repositories repräsentiert. | |
| $path2 Pflicht | string | Der Pfad zur Datei innerhalb des zweiten Dateisystem-Wurzel-Kontexts, z. B. /trunk/src/index.php. |
Rückgabewert
true zurück, wenn sich der Inhalt der beiden Dateien unterscheidet, andernfalls false.Beispiele
Vergleich einer Datei zwischen zwei SVN-Revisionen
<?php
// Repository öffnen
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
// Dateisystem-Wurzeln für Revision 10 und 11 erzeugen
$root10 = svn_fs_revision_root($fs, 10);
$root11 = svn_fs_revision_root($fs, 11);
$path = '/trunk/src/index.php';
if (svn_fs_contents_changed($root10, $path, $root11, $path)) {
echo "Die Datei wurde zwischen Revision 10 und 11 geändert.";
} else {
echo "Die Datei ist in beiden Revisionen identisch.";
}
Geänderte Dateien einer Revisionsliste ermitteln
<?php
$repos = svn_repos_open('/var/svn/myrepo');
$fs = svn_repos_fs($repos);
$paths = [
'/trunk/src/index.php',
'/trunk/src/config.php',
'/trunk/README.md',
];
$baseRoot = svn_fs_revision_root($fs, 20);
$currentRoot = svn_fs_revision_root($fs, 25);
foreach ($paths as $path) {
if (svn_fs_contents_changed($baseRoot, $path, $currentRoot, $path)) {
echo "Geändert: $path\n";
} else {
echo "Unverändert: $path\n";
}
}
// Wichtig · Fallstricke
Erweiterung erforderlich: Diese Funktion ist Teil der PECL-Erweiterung svn (pecl/svn) und steht nicht in einer Standard-PHP-Installation zur Verfügung. Die Erweiterung muss explizit installiert und aktiviert sein.
Nur für Dateien: svn_fs_contents_changed ist für Dateien konzipiert. Bei Verzeichnispfaden ist das Verhalten undefiniert; verwende in diesem Fall svn_fs_props_changed für Eigenschaftsvergleiche.
Ressource-Gültigkeit: Stelle sicher, dass beide Filesystem-Root-Ressourcen gültig und aus demselben Repository stammen, da sonst unvorhersehbare Fehler auftreten können.