Signatur
Beschreibung
svn_log() liest die Commit-Historik (Revisions-Logs) eines Subversion-Repositories oder eines bestimmten Pfades darin und gibt sie als strukturiertes PHP-Array zurück. Jeder Eintrag enthält die Revisionsnummer, den Autor, den Zeitstempel, die Log-Nachricht sowie optional die Liste der geänderten Pfade.
Die Funktion ist Teil der PECL-Erweiterung svn und eignet sich besonders, wenn Deployment-Systeme, CI-Pipelines oder Verwaltungsoberflächen Informationen zur Versionshistorie direkt aus einem SVN-Repository beziehen sollen, ohne externe Prozesse starten zu müssen.
Mit den Parametern start_revision und end_revision kann ein Revisionsbereich eingegrenzt werden. Die Konstanten SVN_REVISION_HEAD (neueste Revision) und SVN_REVISION_INITIAL (erste Revision) erleichtern die Angabe typischer Bereiche. Über limit lässt sich die maximale Anzahl zurückgegebener Einträge begrenzen.
Das Flag SVN_DISCOVER_CHANGED_PATHS sorgt dafür, dass jeder Log-Eintrag auch die betroffenen Dateipfade enthält; SVN_STOP_ON_COPY unterbricht die Suche, sobald ein Kopier-Ursprung gefunden wird, was in vielen Szenarien (z. B. Branch-Logs) das gewünschte Verhalten ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $repos_url Pflicht | string | Die vollständige URL des Subversion-Repositories oder eines Pfades darin, z. B. svn+ssh://svn.example.com/repo/trunk oder file:///var/svn/myrepo. |
|
| $start_revision | int | SVN_REVISION_HEAD | Die Revision, bei der die Log-Abfrage beginnt. Standardmäßig SVN_REVISION_HEAD (aktuellste Revision). Kann auch eine konkrete Revisionsnummer sein. |
| $end_revision | int | SVN_REVISION_INITIAL | Die Revision, bei der die Log-Abfrage endet. Standardmäßig SVN_REVISION_INITIAL (erste Revision des Repositories). Damit wird standardmäßig die gesamte Historie abgerufen. |
| $limit | int | 0 | Maximale Anzahl der zurückgegebenen Log-Einträge. Der Wert 0 bedeutet kein Limit. |
| $flags | int | SVN_DISCOVER_CHANGED_PATHS | SVN_STOP_ON_COPY | Bitmaske aus Konstanten wie SVN_DISCOVER_CHANGED_PATHS (geänderte Pfade einschließen) und SVN_STOP_ON_COPY (bei Kopieroperationen anhalten). Beide sind standardmäßig aktiv. |
Rückgabewert
Bei Erfolg ein numerisch indiziertes Array von Log-Einträgen. Jeder Eintrag ist ein assoziatives Array mit folgenden Schlüsseln:
rev(int) – Revisionsnummerauthor(string) – Benutzername des Committersmsg(string) – Commit-Nachrichtdate(string) – Datum/Uhrzeit des Commits im ISO-8601-Formatpaths(array, optional) – Liste der geänderten Pfade mit den Schlüsselnaction,path,copyfromundcopyrev(wennSVN_DISCOVER_CHANGED_PATHSgesetzt ist)
Bei einem Fehler wird false zurückgegeben.
Beispiele
Letzte 5 Commit-Log-Einträge eines Repositories abrufen
<?php
// Letzte 5 Commits aus dem Trunk eines SVN-Repositories laden
$logs = svn_log('svn+ssh://svn.example.com/repo/trunk', SVN_REVISION_HEAD, SVN_REVISION_INITIAL, 5);
if ($logs === false) {
echo 'Fehler beim Abrufen der Logs.';
} else {
foreach ($logs as $entry) {
printf(
"Rev %d | %s | %s\nNachricht: %s\n\n",
$entry['rev'],
$entry['author'],
$entry['date'],
$entry['msg']
);
}
}
Geänderte Dateipfade eines bestimmten Revisionsbereichs anzeigen
<?php
// Logs für Revisionen 100 bis 110 inklusive geänderter Pfade abrufen
$logs = svn_log(
'file:///var/svn/myrepo/trunk',
110,
100,
0,
SVN_DISCOVER_CHANGED_PATHS
);
if ($logs === false) {
echo 'Fehler.';
} else {
foreach ($logs as $entry) {
echo "Rev {$entry['rev']} von {$entry['author']}: {$entry['msg']}\n";
if (!empty($entry['paths'])) {
foreach ($entry['paths'] as $path) {
echo " [{$path['action']}] {$path['path']}\n";
}
}
echo "\n";
}
}
// Wichtig · Fallstricke
Voraussetzung: Die PECL-Erweiterung svn muss installiert und in der php.ini aktiviert sein (extension=svn). Sie ist nicht Teil der Standard-PHP-Distribution.
Authentifizierung: Für passwortgeschützte Repositories kann svn_auth_set_parameter() verwendet werden, um Benutzernamen und Passwort vorab zu setzen. Zugangsdaten sollten niemals fest im Quellcode hinterlegt werden.
Performance: Bei großen Repositories ohne limit-Begrenzung kann der Abruf der gesamten Historie sehr lange dauern und viel Speicher verbrauchen. Es empfiehlt sich, limit stets auf einen sinnvollen Wert zu setzen.
Fehlerbehandlung: Bei ungültiger URL, Netzwerkproblemen oder fehlenden Berechtigungen gibt die Funktion false zurück. Eine Fehlerursache lässt sich über svn_last_error() ermitteln.