Start · Sprachen · PHP · Referenz · svn_fs_contents_changed

svn_fs_contents_changed

Funktion

Prüft, ob sich der Inhalt zweier Dateien in unterschiedlichen Subversion-Dateisystem-Revisionen unterscheidet.

Kategorie: misc

Signatur

svn_fs_contents_changed(resource $fsroot1, string $path1, resource $fsroot2, string $path2): bool

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

Typ
bool
Beschreibung
Gibt 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.";
}
Die Datei wurde zwischen Revision 10 und 11 geändert.

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";
    }
}
Geändert: /trunk/src/index.php Unverändert: /trunk/src/config.php Geändert: /trunk/README.md

// 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.