Start · Sprachen · PHP · Referenz · svn_blame

svn_blame

Funktion

Gibt zeilenweise Blame-Informationen (Autor und Revision) für eine Datei im SVN-Repository zurück.

seit PHP 0.3.0 Kategorie: misc

Signatur

svn_blame(string $repository_url, int $revision_no = SVN_REVISION_HEAD): array|false

Beschreibung

svn_blame() liest aus einem Subversion-Repository, welcher Autor in welcher Revision jede einzelne Zeile einer Datei zuletzt geändert hat. Das Ergebnis wird als numerisch indiziertes Array zurückgegeben, wobei jeder Eintrag Informationen zu einer Zeile der Datei enthält.

Diese Funktion ist besonders nützlich in Code-Review-Tools, Audit-Workflows oder CI-Skripten, die automatisch nachvollziehen müssen, wer eine bestimmte Codezeile eingeführt hat. Sie entspricht dem Befehl svn blame auf der Kommandozeile.

Jeder Eintrag im Rückgabe-Array enthält folgende Schlüssel: linenumber (Zeilennummer, 1-basiert), revision (Revisionsnummer, in der die Zeile zuletzt geändert wurde), author (Benutzername des Autors) sowie line (der eigentliche Zeileninhalt).

Die Funktion gehört zur PECL-Erweiterung svn und ist daher nur verfügbar, wenn diese Erweiterung installiert und aktiviert ist. Als Repository-URL können sowohl http://, https://, svn:// als auch file://-Pfade angegeben werden.

Parameter

Name Typ Default Beschreibung
$repository_url Pflicht string Die vollständige URL zur Datei im SVN-Repository, z. B. http://svn.example.com/repo/trunk/index.php oder ein lokaler file://-Pfad.
$revision_no int SVN_REVISION_HEAD Die Revisionsnummer, bis zu der die Blame-Informationen ermittelt werden sollen. Standardmäßig wird die aktuellste Revision (SVN_REVISION_HEAD) verwendet.

Rückgabewert

Typ
array|false
Beschreibung
Bei Erfolg ein numerisch indiziertes Array mit einem assoziativen Array pro Zeile, das die Schlüssel linenumber, revision, author und line enthält. Im Fehlerfall (z. B. ungültige URL oder fehlende Berechtigung) wird false zurückgegeben.

Beispiele

Blame-Informationen einer Datei ausgeben

<?php
// Blame-Informationen für eine Datei im SVN-Repository abrufen
$blameInfo = svn_blame('http://svn.example.com/repo/trunk/index.php');

if ($blameInfo === false) {
    echo 'Fehler beim Abrufen der Blame-Informationen.' . PHP_EOL;
} else {
    foreach ($blameInfo as $lineData) {
        printf(
            "Zeile %4d | Rev. %5d | %-15s | %s\n",
            $lineData['linenumber'],
            $lineData['revision'],
            $lineData['author'],
            rtrim($lineData['line'])
        );
    }
}
Zeile 1 | Rev. 142 | johndoe | <?php Zeile 2 | Rev. 98 | janedoe | // Hauptdatei Zeile 3 | Rev. 142 | johndoe | echo 'Hallo Welt';

Blame-Informationen bis zu einer bestimmten Revision

<?php
// Nur Blame bis Revision 100 betrachten
$revision = 100;
$blameInfo = svn_blame('http://svn.example.com/repo/trunk/config.php', $revision);

if ($blameInfo !== false) {
    // Alle Zeilen ermitteln, die von einem bestimmten Autor stammen
    $author = 'johndoe';
    $authorLines = array_filter($blameInfo, function ($entry) use ($author) {
        return $entry['author'] === $author;
    });

    echo "Zeilen von '{$author}' bis Revision {$revision}:" . PHP_EOL;
    foreach ($authorLines as $entry) {
        echo "  Zeile {$entry['linenumber']}: {$entry['line']}";
    }
}
Zeilen von 'johndoe' bis Revision 100: Zeile 3: define('DB_HOST', 'localhost'); Zeile 7: define('DB_NAME', 'myapp');

// Wichtig · Fallstricke

Voraussetzung: Die PECL-Erweiterung svn muss installiert sein (pecl install svn). Sie ist nicht Bestandteil der Standard-PHP-Distribution.

Authentifizierung: Für passwortgeschützte Repositories kann svn_auth_set_parameter() verwendet werden, um Benutzername und Passwort zu hinterlegen, bevor svn_blame() aufgerufen wird. Werden Zugangsdaten im Code hart kodiert, stellt dies ein Sicherheitsrisiko dar – verwende stattdessen Konfigurationsdateien außerhalb des Web-Roots oder Umgebungsvariablen.

Performance: Bei großen Dateien oder langen Revisionshistorien kann der Aufruf sehr langsam sein, da das gesamte Blame-Protokoll vom Server geladen wird. Ein Timeout-Handling oder asynchrone Verarbeitung ist empfehlenswert.

Fehlerbehandlung: Im Fehlerfall gibt die Funktion false zurück. Eine detailliertere Fehleranalyse ist über svn_last_error() möglich.