Mam projekt Pythona pod SVN, i chcę wyświetlić numer wersji, gdy jest uruchamiany. Czy jest jakiś sposób robienia tego (np. Automatyczne uruchamianie krótkiego skryptu przy zatwierdzaniu, które może zaktualizować plik wersji lub zapytanie do repozytorium SVN w Pythonie?)Uzyskiwanie numeru wersji SVN do programu automatycznie
Odpowiedz
Nie jestem pewien co do specyfiki Pythona, ale jeśli wstawię ciąg $ Rewizja $ do twojego pliku i jeśli posiadasz opcję enable-auto-props = true w konfiguracji SVN, to zostanie przepisane na coś podobnego do $ Wersja: 144 $. Możesz następnie przeanalizować to w swoim scenariuszu.
Istnieją a number of property keywords you can use in this way.
Nie będzie to miało żadnego narzutu, np. sprawdzanie repozytorium SVN, ponieważ ciąg znaków jest zakodowany na stałe w pliku przy zatwierdzaniu lub aktualizacji.
Nie jestem pewien, jak chcesz przeanalizować to w Pythonie, ale w PHP zrobiłbym:
$revString = '$Revision: 144$';
if(preg_match('/: ([0-9]+)\$/', $revString, $matches) {
echo 'Revision is ' . $matches[1];
}
Plik hooks/pre-commit
w twoim repozytorium to skrypt lub program, który zostać wykonane przed pomyślnym zatwierdzeniem. Po prostu utwórz skrypt, który aktualizuje twój plik o prawidłowym numerze wersji podczas zatwierdzania (numer rewizji jest przekazywany do skryptu podczas jego uruchamiania). Oto samouczek z przykładem pisania haka przed zatwierdzeniem: http://wordaligned.org/articles/a-subversion-pre-commit-hook
Ała. Zezwalanie na modyfikowanie plików przed zatwierdzeniem jest generalnie złym pomysłem. Wersja w repo będzie różnić się od wersji w kopii roboczej, co może prowadzić do pewnych nieporozumień. Musi on powrócić do wcześniejszej wersji pliku, a następnie uzyskać nową, prawdopodobnie powodując pewien konflikt, ponieważ svn zapisał oryginalną wersję w bazie tekstowej kopii roboczej. – sunny256
Zgadzam się, że jest to niebezpieczne i zazwyczaj nie jest pożądanym zachowaniem, ale jeśli odpowiednio się ograniczysz, to nie widzę problemu. Na przykład, jeśli posiadasz plik "svn_version.txt", który zawiera tylko bieżący numer wersji, byłby całkowicie bezpieczny; Twoja lokalna kopia zawsze miałaby wersję, którą wypisałeś, a repozytorium zawsze będzie miało najnowszą wersję (często taką samą jak twoja kopia robocza). –
Zapoznaj się z pysvn. eksponuje rozszerzenia w Pythonie dla środowiska wykonawczego Subversion.
+1 dla pysvn, ale najlepiej unikać łączenia z "tym" –
W Django jest fragment kodu, który pozwala ci to zrobić, polecam na niego spojrzeć. http://code.djangoproject.com/browser/django/trunk/django/utils/version.py
Ta funkcja działa tylko wtedy, gdy uruchamiasz się z poziomu subversion. Jeśli tego chce OP, wówczas problem rozwiązany. Podejrzewam jednak, że może chcieć, aby skrypt zawarł w sobie lub plik konfiguracyjny lub coś w swojej wersji subwersji, nawet jeśli skrypt nie jest już podwersją, w którym to przypadku ten link nie będzie użyteczny. –
Tak, to jest świetna opcja awaryjna, ale posiadanie numeru wersji również pod kontrolą źródła byłoby lepsze. Dzięki! +1 – Smashery
Robię to po prostu uruchamiając mały skrypt podczas budowania mojego projektu. Skrypt po prostu wywołuje svn info w połączeniu z sed, by wydobyć nagie dane rewizji i wstrzyknąć tę liczbę do pliku revision.txt.
Serwer kompilacji Hudson jeszcze bardziej ułatwia ustawienie numeru wersji SVN jako zmiennej środowiskowej tuż przed wywołaniem skryptów Build.
Robimy to również, działa ładnie – orip
Uważam, że jeśli zostanie uruchomiona sekcja lekko dwuznaczne - gdy jest prowadzony skąd? Z kasy SVN lub z wydanego kodu? Wszystkie rozwiązania działają na wstrzykiwaniu wersji SVN w jakiś sposób do źródła Pythona lub gdzieś w repozytorium w osobnym pliku wersji.
Plik wersji został zmieniony przy świeżych kasach, więc czyste wypłaty muszą zostać wykonane przed dystrybucją. Moje pytanie o to, gdzie program jest uruchamiany, pozostaje.
Podobny do, ale trochę bardziej pytoniczny niż odpowiedź PHP; umieścić to w swoim modułu __init__.py
:
__version__ = filter(str.isdigit, "$Revision: 13 $")
i upewnij się dodać właściwość aktualizacji:
svn propset svn:keywords Revision __init__.py
lub '' .join (c dla c w "$ LastChangedRevision: 1546 $" jeśli c.isdigit()) jeśli nie lubisz filtra. –
Albo można zrobić tak:
import re,subprocess
svn_info = subprocess.check_output("svn info")
print (re.search(ur"Revision:\s\d+", svn_info)).group()
drukuje "Revision: 2874"
w moim projekcie
Lub jak poniżej:
print (subprocess.check_output("svnversion")).split(":")[0]
drukuje "2874"
w moim projekcie
Działa tylko z kopią roboczą. – bahrep
Nie tylko z kopią roboczą. Możesz najpierw pobrać zdalny adres URL svn z "svn info", np. Wykonać "svn info", a następnie pobrać parametr "URL" z danych wyjściowych i wykonać ten sam kod, ale używając "svn info value_of_URL_param" Tak więc zaktualizowany kod to: re import, podproces svn_info = subprocess.check_output ("info svn https: //svn.you_remote_repo_url") print (re.search (ur "Revision: \ s \ d +", svn_info)). group() –
- 1. Polecenie uzyskania svn diff bieżącego i poprzedniego numeru wersji
- 2. poprawny sposób kodowania/osadzania numeru wersji w kodzie programu
- 3. Uzyskiwanie bieżącego numeru wiersza?
- 4. Odwołaj się do numeru kompilacji lub numeru wersji w kodzie
- 5. TeamCity do odczytu i aktualizacji numeru wersji z pliku wersji
- 6. Uzyskiwanie NSTextField według numeru tagu?
- 7. Uzyskiwanie numeru wiersza w DataGridView
- 8. Winformy: pobieranie numeru wersji publikacji?
- 9. Serwer svn synchronizuje się automatycznie
- 10. GDB - Uzyskiwanie dostępu do rzeczywistych i urojonych części złożonego numeru
- 11. Czy mogę git svn rebase do pewnej wersji svn? (Podobne do svn up-r ...)
- 12. Uzyskiwanie dostępu do numeru wersji kompilacji w skrypcie Powershell podczas budowania TFS
- 13. Uzyskiwanie daty aktualizacji przy użyciu svn info
- 14. Jak określić wersję arkusza roboczego wersji SVN?
- 15. Uzyskiwanie wersji Gradle.build do Spring Boot
- 16. Django: uzyskiwanie dostępu do instancji modelu z poziomu programu ModelAdmin?
- 17. Aktualizowanie numeru wersji projektu na git push
- 18. Wstawianie numeru wersji git do plików podczas wdrażania
- 19. zmiana numeru wersji w czasie kompilacji
- 20. uzyskiwanie bezpłatnego numeru jednostki w Fortran
- 21. Android Studio, Gradle: Jak automatycznie opublikować release.apk do svn repozytorium?
- 22. Uzyskiwanie wersji montażowej z AssemblyInfo.cs
- 23. Uzyskiwanie różnicy svn do pokazywania funkcji C++ podczas zatwierdzania
- 24. Uzyskiwanie zawartości komórki z podaniem numeru wiersza i kolumny:
- 25. subversion: pozbycie się wersji ".svn" katalogu
- 26. Jak automatycznie aktualizować pakiety NuGet do najnowszej dostępnej wersji
- 27. Irytujące wydanie svn, w którym folder roszczeń svn jest pod kontrolą wersji, ale nie .svn istnieje
- 28. Wywoływanie poleceń SVN z programu java
- 29. Komenda aktualnej wersji Subversion
- 30. Wywołuj gdb, aby automatycznie przekazywał argumenty do debugowanego programu
To jest właściwa odpowiedź! Pamiętaj też, aby ustawić właściwość "keywords = Revision" dla każdego pliku, który chcesz to zrobić. –
Drew - Myślę, że jeśli ustawiono opcję enable-auto-props = true, to wszystkie domyślne słowa kluczowe są ustawione? –
+1 To niesamowite! W moim przypadku jest jednak jakiś sposób, aby SVN edytować numer wersji, jeśli jest to inny plik, który został zmieniony w tej wersji? Na przykład, jeśli mam słowo kluczowe numer rewizji w wersji.py, ale nie zmienię wersji.py w wersji nnn, to go nie zaktualizuje, prawda? Jeśli nie, czy istnieje sposób na wykorzystanie tej metody w ten sposób? – Smashery