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.

Author: Community, 2008-08-19

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 () .

 14
Author: Rob,
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

 27
Author: jmanning2k,
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

 13
Author: Bill,
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);
 6
Author: iCoder,
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ć...

Więcej informacji na temat instrukcji Subversion

 4
Author: Vincent Robert,
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:

  1. sed zastępuje RevNumber w .dox z wyjściem svnversion (wykonanym w głównym folderze repozytorium) i zapisuje zmodyfikowany plik do YourFileDummy.dox
  2. doxygen jest wykonywane na YourFileDummy.dox w celu wygenerowania dokumentacji
  3. Twoja dokumentacja będzie teraz zawierać rewizję numer!
 0
Author: Jesse,
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