Pobieranie numeru repozytorium subversion do kodu
Chciałbym zaimplementować sposób zapisu wersji projektu w kodzie, tak aby mogła być używana podczas testowania i w celu śledzenia błędów. Wydaje się, że najlepszym numerem wersji do użycia będzie bieżący numer wersji z Subversion. Czy jest jakiś łatwy sposób na podpięcie tego numeru do (w moim przypadku C++) pliku nagłówkowego lub czegoś takiego, który mogę następnie uzyskać w kodzie? Domyślam się, że to jest post commit hook czy coś?
Czy ktoś ma jakieś doświadczenie w implementacji tego (z kodem do podziel się, proszę?), czy może zaproponować lepszą alternatywę? Dzięki.
6 answers
Chociaż sprytne, słowo kluczowe trick revision aktualizuje plik tylko wtedy, gdy został zmieniony w tej rewizji - jeśli nie zmienisz pliku, będzie on nadal odzwierciedlał starą rewizję.
Jeśli chcesz, aby oprogramowanie zawsze odzwierciedlało ogólny numer wersji, musisz zagłębić się w odpowiedni plik z wpisami SVN i rozpakować go, co nie jest zbyt trudne (jest to plik XML).
Wikipedia robi to na swojej stronie wersji , aby wskazać rewizję oprogramowanie działające na żywo; Kod znajduje się tutaj - poszukaj metody getSvnRevision () .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-30 04:23:00
Dwa sposoby:
Embed $Id$ lub $Revision$ w kodzie. Następnie Ustaw na pliku właściwość svn:keywords="ID Revision". To da ci ostatnio zmodyfikowaną wersję tego pliku źródłowego. Dobre dla mniejszych projektów i skryptów.
Alternatywnie, użyj procesu opartego na pliku Makefile i narzędzia wiersza poleceń svnversion. (Specyficzne dla języka-to powinno działać dla C / C++)
echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h
Lub jakiś bardziej skomplikowany skrypt build z sed i version.h.in. wtedy po prostu #include version.h
To da ci Numer wersji repozytorium, który zmieni się wraz z każdym zatwierdzeniem / aktualizacją i jest prawdopodobnie bardziej odpowiedni dla większości projektów.
Uwaga: użyłem również czytelnego dla człowieka ciągu wersji, który ręcznie aktualizuję. Przykład da: Wersja: 1.0.1-r13445
~J
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 14:39:59
Możesz również użyć SubWCRev, który jest częścią TortoiseSVN.
SubWCRev to program konsoli Windows, który może być używany do odczytu stanu kopii roboczej Subversion i opcjonalnie wykonać zamianę słów kluczowych w pliku szablonu. Jest to często używane jako część procesu budowania jako sposób włączenia informacji o kopii roboczej do obiektu, który budujesz. Zazwyczaj może być używany do włączenia numeru wersji w "O" box.
Http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-09 10:16:43
W Twoim Makefile dodaj:
SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...
Następnie możesz użyć makra SVN_REV
w dowolnym miejscu kodu, np:
printf ("Version: SVN %s\n", SVN_REV);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-11 00:51:21
Możesz użyć właściwości svn:keywords
, aby włączyć słowo kluczowe Rev
.
Możesz następnie użyć $Rev$
w swoim kodzie, a SVN rozszerzy go automatycznie po aktualizacji do $Rev: 256 $
, które następnie może przeanalizować...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-19 14:26:10
Dobre, aktualne rozwiązanie:
Utwórz Makefile
zawierający następującą linię (w tym samym folderze co YourFile.dox
):
sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox
I YourFile.dox
powinny zawierać:
...
PROJECT_NUMBER = "Revision RevNumber"
...
Teraz:
-
sed
zastępujeRevNumber
w .dox z wyjściemsvnversion
(wykonanym w głównym folderze repozytorium) i zapisuje zmodyfikowany plik doYourFileDummy.dox
-
doxygen
jest wykonywane naYourFileDummy.dox
w celu wygenerowania dokumentacji - Twoja dokumentacja będzie teraz zawierać rewizję numer!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-18 09:26:41