У меня есть проект python под SVN, и я хочу отобразить номер версии при ее запуске. Есть ли способ сделать это (например, автоматически запускать короткий script на коммит, который может обновлять файл версии или запрашивать репозиторий SVN в Python?)
Получение номера версии SVN в программе автоматически
Ответ 1
Я не уверен в специфике Python, но если вы помещаете строку $Revision $в свой файл где-то, и у вас есть опция enable-auto-props = true в вашей конфигурации SVN, она будет переписана на что-то вроде $Revision: 144 $. Затем вы можете проанализировать это в своем script.
Есть ряд ключевых слов свойств, которые вы можете использовать таким образом.
У этого не будет никаких накладных расходов, например. запрашивая репо SVN, потому что строка жестко закодирована в ваш файл при фиксации или обновлении.
Я не уверен, как вы будете разбирать это в Python, но в PHP я бы сделал:
$revString = '$Revision: 144$';
if(preg_match('/: ([0-9]+)\$/', $revString, $matches) {
echo 'Revision is ' . $matches[1];
}
Ответ 2
Похож на, но немного больше pythonic, чем ответ PHP; поместите это в свой модуль __init__.py
:
__version__ = filter(str.isdigit, "$Revision: 13 $")
и убедитесь, что вы добавили свойство Revision:
svn propset svn:keywords Revision __init__.py
Ответ 3
Или вы можете сделать вот так:
import re,subprocess
svn_info = subprocess.check_output("svn info")
print (re.search(ur"Revision:\s\d+", svn_info)).group()
он печатает "Revision: 2874"
в моем проекте
Или вот так:
print (subprocess.check_output("svnversion")).split(":")[0]
он печатает "2874"
в моем проекте
Ответ 4
Файл hooks/pre-commit
в вашем репозитории - это script или программа, которая будет выполнена до успешной фиксации. Просто сделайте это script, который обновляет ваш файл с соответствующим номером версии по мере его совершения (номер версии передается вашему script при его запуске). Здесь учебник с примером написания крючка для предварительной фиксации: http://wordaligned.org/articles/a-subversion-pre-commit-hook
Ответ 5
В Django есть фрагмент кода, который позволяет вам это делать, я бы рекомендовал посмотреть на него. http://code.djangoproject.com/browser/django/trunk/django/utils/version.py
Ответ 6
Проверьте pysvn. он предоставляет расширения в функциях Python для Subversion.
Ответ 7
Я делаю это, просто запуская небольшой script при создании моего проекта. script просто вызывает информацию svn в сочетании с sed, чтобы вытащить чистые данные ревизии и вставляет этот номер в файл revision.txt.
Сервер сборки Hudson делает его еще проще, поскольку он устанавливает номер версии SVN как переменную среды прямо перед вызовом сценариев сборки.
Ответ 8
Я нахожу, когда он запускается в секции немного неоднозначно - когда он запускается откуда? Из проверки SVN или из выпущенного кода? Все решения работают над тем, чтобы внедрить версию SVN как-то в источник Python или где-то в репозитории в отдельный файл версии.
Файл версии изменен при свежих проверках, поэтому перед дистрибутивом необходимо выполнить очистку. Поэтому мой вопрос о том, где выполняется программа, остается.