Подтвердить что ты не робот

Получение номера версии SVN в программе автоматически

У меня есть проект python под SVN, и я хочу отобразить номер версии при ее запуске. Есть ли способ сделать это (например, автоматически запускать короткий script на коммит, который может обновлять файл версии или запрашивать репозиторий SVN в Python?)

4b9b3361

Ответ 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

Ответ 6

Проверьте pysvn. он предоставляет расширения в функциях Python для Subversion.

Ответ 7

Я делаю это, просто запуская небольшой script при создании моего проекта. script просто вызывает информацию svn в сочетании с sed, чтобы вытащить чистые данные ревизии и вставляет этот номер в файл revision.txt.

Сервер сборки Hudson делает его еще проще, поскольку он устанавливает номер версии SVN как переменную среды прямо перед вызовом сценариев сборки.

Ответ 8

Я нахожу, когда он запускается в секции немного неоднозначно - когда он запускается откуда? Из проверки SVN или из выпущенного кода? Все решения работают над тем, чтобы внедрить версию SVN как-то в источник Python или где-то в репозитории в отдельный файл версии.

Файл версии изменен при свежих проверках, поэтому перед дистрибутивом необходимо выполнить очистку. Поэтому мой вопрос о том, где выполняется программа, остается.