Die Versionsverwaltung Subversion bzw. SVN ist unter Softwareentwickern allgemein bekannt. Auf dem Windows-Desktop wird sie meist in Form von TortoiseSVN eingesetzt, welches eine gute Integration in die Windows-Umbebung bietet.
Zum Verwalten der Versionen eines Projekts verwendet Subversion fortlaufende Revisionsnummern. Um Fehler in bereits freigegebenen Softwareständen zu untersuchen, ist es oft sehr hilfreich, wenn man weiß aus welcher Quelltext-Revision die jeweilige Software gebaut wurde. Ideal wäre es, wenn das Programm seine eigene Revisionsnummer z.B. in der Titelleiste oder einem Info-Dialog anzeigen würde.
Diese Anleitung zeigt, wie man die Revisionsnummer mit TortoiseSVN automatisch in einer Quelltextdatei aktualisieren lassen kann.
Vorbereitung
- Erstellen Sie ein neues SVN-Repository.
- Erstellen Sie ein neues Arbeitsverzeichnis auf ihrem PC und checken Sie das Repository darin aus. (Rechtsklick in den Ordner > SVN Checkout)
- Erstellen Sie mit dem VisualStudio ein neues beliebiges Projekt in dem Ordner.
Revisionsnummer in Datei einfügen
Wir werden nun eine neue Datei namens Revision.cs erstellen, in welcher die Revisionsnummer automatisch aktualisiert wird. Wird diese Datei anschließend zu einem Projekt hinzugefügt, ist die Nummer dann als Konstante zur Laufzeit im Programm verfügbar.
Erstellen Sie zunächst eine Datei namens Revision.cs.tmpl im obersten Verzeichnis des Arbeitsverzeichnisses (nicht in einem Projekt-Order) mit einem Texteditor und fügen Sie diesen Quelltext ein:
using System; public static class Revision { private const int REVISION = $WCREV$; public static int Get() { return REVISION; } }
Öffnen Sie nun eine Konsole (Start > Ausführen > cmd.exe) und wechseln Sie in Ihr Arbeitsverzeichnis (cd \pfad\zum\verzeichnis ). Geben Sie nun folgenden Befehl ein:
SubWCRev . Revision.cs.tmpl Revision.cs
Subversion hat nun basierend auf Ihrer Template-Datei Revision.cs.tmlp eine neue Datei namens Revision.cs erstellt. In dieser Datei wurde das $WCREV$ ausgetauscht durch die aktuelle Versionsnummer. Diese Datei können wir nun im VisualStudio zu unserem Projekt hinzufügen:
- Öffnen Sie das VisualStudio.
- Klicken Sie mit der rechten Maustaste im Solution Explorer auf das Projekt und wählen Sie Add > Existing Item und wählen Sie die Datei Revision.cs aus.
- Klicken Sie NICHT auf Add, sondern auf den kleinen Pfeil neben dem Button und wählen Sie Add as Link. Wenn Sie stattdessen auf Add klicken, wird eine Kopie der Revision.cs im Projektverzeichnis erstellt, in der die Revisionsnummer nicht aktualisiert wird. Daher: Add as Link.
Gehen wir nun davon aus, bei Ihrer Anwendung handelt es sich um eine Konsolenanwendung, welche beim Start ihre Revisionsnummer auf dem Bildschirm anzeigen soll. Dies erreichen Sie in dem Sie die Datei Program.cs wie folgt anpassen:
namespace MyConsoleApp { class Program { static void Main(string[] args) { Console.WriteLine("Revisionsnummer: " + Revision.Get()); Console.ReadLine(); } } }
Wir können nun jederzeit durch den Aufruf von SubWCRev (siehe oben) unsere Revision.cs aktualisieren lassen. Damit die Revisionsnummer in der Datei immer aktuell ist, müssen wir also dafür sorgen, dass SubWCRev vor jedem Build oder nach jedem SVN Commit oder SVN Update automatisch aufgerufen wird.
Automatisieren mit TortoiseSVN
In den Einstellungen von TortoiseSVN können wir den automatischen Aufruf nach einem Commit/Update einrichten. Erstellen Sie zunächst eine neue Datei namens update-rev.bat im gleichen Verzeichnis wie die Revision.cs.tmpl mit folgendem Inhalt:
cd %1 del Revision.cs SubWCRev . Revision.cs.tmpl Revision.cs
Beim Aufruf dieser Datei wechselt das Skript zunächst in das als Parameter übergebene Verzeichnis (welches das Arbeitsverzeichnis sein muss) und löscht die alte Revision.cs. Anschließend wird eine neue aktuelle Revision.cs erzeugt.
TortoiseSVN soll diese Datei nun bei jeder Revisionsänderung aufrufen. Dies richten Sie wie folgt ein:
- Klicken Sie mit der rechten Maustaste in das Arbeitsverzeichnis im Windows-Explorer.
- Wählen Sie im PopUp-Menü TortoiseSVN > Settings.
- In dem erscheinenden Fenster wählen Sie auf der linken Seite Hook Scripts
- Klicken Sie auf Add um ein neues Hook Skript hinzuzufügen.
- In dem neuen Fenster wählen Sie als Hook Type: Post Update Hook und geben sie in das Feld Working Copy Path den Pfad zu Ihrem Arbeitsverzeichnis ein (z.B. „C:\pfad\zum\arbeitsverzeichnis“)
- In dem Feld Command Line To Execute tragen Sie den vollständigen Pfad zur update-rev.bat gefolgt von dem Pfad zum Arbeitsverzeichnis als Parameter. Also z.B. „C:\pfad\zum\arbeitsverzeichnis\update-rev.bat C:\pfad\zum\arbeitsverzeichnis“. Bestätigen Sie im OK.
- Legen Sie noch ein neues Hook Skript an und wählen Sie als Hook Type: Post Commit Hook. Tragen Sie in die Felder Working Copy Path und Command Line To Execute genau den gleichen Inhalt wie bei dem vorherigen Skript ein.
Die Datei updaterev.bat wird nun von TortouseSVN automatisch nach jedem Update und jedem Commit aufgerufen und bekommt dabei als Parameter das Arbeitsverzeichnis. Mit cd %1 wechselt sie in das Arbeitsverzeichnis, da %1 für den ersten Parameter des Skripts steht. Anschließend wird die Revision.cs aktualisiert.