Immer das subversion-repository-Nummer in code
Frage
Ich möchte implementieren Sie eine Art der Aufzeichnung die version eines Projekts innerhalb des Codes, so dass es kann verwendet werden, wenn das testen und zu helfen track bugs.Es scheint, die beste version, die Nummer, die Sie verwenden würden nur die aktuelle revision Anzahl von Subversion.Gibt es eine einfache Möglichkeit, um Haken die Zahl in eine C++ in meinem Fall) header-Datei oder etwas, das ich kann dann auf die im code?Ich denke, dies ist ein post-commit-hook oder was?
Hat jemand eine Erfahrung mit der Umsetzung dieser (mit code zu teilen, bitte?), oder kann vorschlagen, eine bessere alternative?Vielen Dank.
Lösung
Während nifty bei der revision Schlüsselwort trick nur die Datei aktualisiert, wenn es sich in dieser revision geändert - wenn Sie nicht ändern Sie die Datei, dann wird es weiterhin entsprechend der alten revision.
Wenn Sie möchten, dass die software immer spiegeln die Allgemeine Revisionsnummer, dann müssen Sie Tauchen Sie ein in die relevante SVN Einträge Datei und extrahieren Sie es, das ist nicht allzu schwer, (es ist eine XML-Datei).
Wikipedia tut dies auf Ihre version Seite zu zeigen die überarbeitung der software, die mit Leben; der code ist hier - suchen Sie das getSvnRevision() Methode.
Andere Tipps
Zwei Möglichkeiten:
Einbetten $Id$ oder $Revision$ innerhalb des Codes.Setzen Sie dann svn:keywords="Id-Revision" Eigenschaft in der Datei.Dies wird Ihnen die Letzte geänderte revision der Quelldatei.Gut für kleinere Projekte und Scripte.
Alternativ verwenden Sie ein Makefile gesteuerten Prozess und das Kommandozeilenprogramm svnversion.(Sprachspezifisch - diese Arbeit sollte für C/C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
Oder einige komplexere build-Skript mit sed und version.h.in.Dann einfach #include version.h
Geben Sie die repository-version und-Nummer, die ändern sich mit jedem commit / update und ist wahrscheinlich eine mehr entsprechende Versionsnummer für die meisten Projekte.
Hinweis:Ich habe auch eine lesbare version-Zeichenfolge, die ich manuell aktualisieren.Würde das Beispiel zu geben: Version:1.0.1-r13445
~J
Sie können auch SubWCRev die Teil von TortoiseSVN.
SubWCRev ist Windows-Kommandozeilenprogramm, das verwendet werden kann zum Lesen des status eines Subversion-Arbeitskopie und Optional führen Sie keyword-substitution in eine template-Datei.Dies wird oft als Teil des build-Prozesses als Mittel der Integration der Arbeitskopie Informationen zu dem Objekt, das Sie erstellen.In der Regel könnte es verwendet werden, um die revision-Nummer in ein Feld "Über".
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
in Ihrem Makefile hinzufügen:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
dann können Sie mit makro SVN_REV
irgendwo in Ihrem code, z.B.:
printf ("Version: SVN %s\n", SVN_REV);
Sie verwenden können die svn:keywords
- Eigenschaft zu aktivieren, die Rev
Schlüsselwort.
Dann können Sie $Rev$
in Ihrem code und SVN wird erweitern automatisch, wenn eine Aktualisierung auf $Rev: 256 $
die können dann Parsen...
Eine gute up-to-date-Lösung:
Erstellen Sie eine Makefile
mit der folgenden Zeile (im selben Ordner wie YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
Und YourFile.dox
beinhalten sollte dieser:
...
PROJECT_NUMBER = "Revision RevNumber"
...
Jetzt:
sed
ersetztRevNumber
in der .dox mit der Ausgabe dessvnversion
(ausgeführt in den main-Ordner des Repositorys) und speichert die geänderte Datei zuYourFileDummy.dox
doxygen
ausgeführtYourFileDummy.dox
zur Generierung der Dokumentation- Ihre Dokumentation enthält nun die revision-Nummer!