Navigieren / suchen

Informationen aus SVN Repositories lesen

Für ein kleines internes Projekt in unserer Firma wollen wir Informationen aus verschiedenen SVN Repositories (Commits, Kommentare, Aktivität usw.) auslesen und auf einem Dashboard anzeigen.
Es war etwas knifflig die richtigen Komponenten zu finden aber nun habe ich eine lauffähige Version.

Was brauchen wir?

Damit wir mit CFML auf die Daten eines Repositories zugreifen können müssen wir folgende Komponenten haben.

Der JavaLoader von Mark Mandel benötigen wir um die *.jar-Datei vom SVNKit zu laden. SVNKit stellt uns die nötigen Java-Klassen zur Verfügung welche wir benötigen um die Verbindung zum SVN-Repository herzustellen und Informationen auszulesen.

*.jar-Dateien laden

Zuerst erstellen wir ein Array mit den Pfaden zu den verschiedenen *.jar-Dateien welche wir benötigen. Hier benötigen wir nur das SVNKit-Jar. Anschliessend erstellen wir den JavaLoader und übergeben diesen Array.

<cfset local.jars = [expandPath('/libs/jar/svnkit-1.7.11.jar')] />
<cfset local.javaLoader = createObject("component",'libs.javaloader.JavaLoader').init(local.jars) />

Klassen vom Jar laden

Um ein Objekt von einer Klasse im Jar zu erstellen können wir folgenden Befehl ausführen.

<cfset local.variable = local.javaLoader.create('pfad zu der Klasse') />

Verbindung zu einem externen Repository

Es gibt verschiedene Möglichkeiten zu einem Repository zu verbinden. Man kann über http://, svn:// oder file:/// verbinden. Es sind für die verschiedenen Verbindungsmöglichkeiten auch verschiedene Klassen verfügbar. Wir brauchen hier die DAVRepositoryFactory um per http:// zu verbinden.

Zuerst alle Objekte erstellen

<cfset local.davSVNFactory = local.javaLoader.create('org.tmatesoft.svn.core.internal.io.dav.DAVRepositoryFactory') />
<cfset local.svnFactory= local.javaLoader.create('org.tmatesoft.svn.core.io.SVNRepositoryFactory') />
<cfset local.svnURL = local.javaLoader.create('org.tmatesoft.svn.core.SVNURL') />
<cfset local.svnUtil = local.javaLoader.create('org.tmatesoft.svn.core.wc.SVNWCUtil') />

Verbindung starten

Mit dem setup() können wir bescheid geben, dass wir per http:// verbinden möchten.

<cfset local.davSVNFactory.setup() />

Verbindung aufbauen

Damit wir eine Verbindung zum Repository aufbauen können müssen wir die URL der Factory übergeben.

<cfset local.repository = local.svnFactory.create(local.svnURL.parseURIDecoded('URL zum Repository (trunk)')) />

Authentifizieren

Zu guter letzt müssen wir uns am Repository noch authentifizieren.

<cfset local.authManager = local.svnUtil.createDefaultAuthenticationManager('username','password') />
<cfset local.repository.setAuthenticationManager(local.authManager) />

Log eines Repositories auslesen

Da wir nun eine Verbindung zum Repository haben, können wir auch alle möglichen Daten auslesen. Die Logs können wir folgendermassen auslesen.

<cfset local.logs = local.repository.log(javaCast('string[]',[]),javaCast('null',''),javaCast('long',1),javaCast('long',100),javaCast('boolean',true),javaCast('boolean',true)) />

Hier lese ich das Log zwischen Revisionsnummer 1 und Nummer 100 aus.

Letzte Revisionsnummer auslesen

Damit man auch alles auslesen kann, können wir die letzte Revisionsnummer auslesen.

<cfset local.revision = local.repository.getLatestRevision() />

Revisionsnummer eines Datum auslesen

Wenn wir das Log der letzten 30 Tage auselesen wollen können wir auch zuerst auslesen welche Revisionsnummer es an einem bestimmten Datum war.

<cfset local.revision = local.repository.getDatedRevision(dateAdd('d',-30,now())) />

Fazit

Es funktioniert alles wunderbar. Wenn man etwas in der SVNKit Dokumentation stöbert findet man noch viel mehr Möglichkeiten. Nur der Verbindungsaufbau zu einem externen Repository ist etwas langsam, könnte aber auch an unserer Serverinfrastruktur liegen ;)

Hinterlasse einen Kommentar

Name*

E-Mail* (wird nicht veröffentlicht)

Webseite