Существует ли команда Subversion для показа текущего числа пересмотра?
После svn checkout
Я хочу запустить сценарий и нуждаться в числе пересмотра в переменной. Было бы замечательно, если существует команда как svn info get_revision_number
.
Новые версии svn поддерживают аргумент - show-item
:
svn info --show-item revision
Для номера ревизии вашей локальной рабочей копии используйте:
svn info --show-item last-changed-revision
Вы можете использовать os.system()
для выполнения такой командной строки:
svn info | grep "Revision" | awk '{print $2}'
Я делаю это в моих скриптах ночной сборки.
Также на некоторых платформах есть команда svnversion
, но я думаю, что у меня была причина не использовать ее. Ах, да. Вы не можете получить номер ревизии из удаленного репозитория, чтобы сравнить его с локальным с помощью svnversion.
Есть также более удобная (для некоторых) команда svnversion
.
Вывод может быть одним номером ревизии или что-то вроде этого (из -h):
4123:4168 mixed revision working copy
4168M modified working copy
4123S switched working copy
4123:4168MS mixed revision, modified, switched working copy
Я использую этот фрагмент питонового кода для извлечения информации о ревизии:
import re
import subprocess
p = subprocess.Popen(["svnversion"], stdout = subprocess.PIPE,
stderr = subprocess.PIPE)
p.wait()
m = re.match(r'(|\d+M?S?):?(\d+)(M?)S?', p.stdout.read())
rev = int(m.group(2))
if m.group(3) == 'M':
rev += 1
Сначала статус svn имеет номер ревизии, вы можете прочитать его оттуда.
Также, каждый файл, который вы храните в SVN, может хранить номер ревизии сам по себе -- добавьте ключевое слово $Rev$
к вашему файлу и запустите propset: svn propset svn:keywords "Revision" file
Наконец, номер ревизии также находится в файле .svn/entries
, четвертая строка
Теперь каждый раз, когда вы извлекаете этот файл, он будет иметь ревизию сам по себе.
.svn info
, я полагаю, это то, что вы хотите.
Если бы вы просто хотели ревизию, возможно, вы могли бы сделать что-то вроде:
svn info | grep "Revision:"
Используйте нечто подобное, пользуясь XML выходом Subversion:
# parse rev from popen "svn info --xml"
dom = xml.dom.minidom.parse(os.popen('svn info --xml'))
entry = dom.getElementsByTagName('entry')[0]
revision = entry.getAttribute('revision')
Обратите внимание также, что в зависимости от того, для чего вам это нужно, запись
может быть больше того, что вы ищете. Это дает "Last Changed Rev", которая не изменится до тех пор, пока код в текущем дереве не изменится на самом деле, в отличие от "Revision" (то, что дано выше), которая изменит в любой момент, когда что-либо в репозитории изменится (даже ветки), и вы сделаете "svn up", что не то же самое, и не так часто, как полезно.
Думаю, мне нужно сделать svn информацию, а затем получить номер со строковой манипуляцией из "Revision: xxxxxx". Было бы просто здорово, если бы была команда, возвращающая только число :)
.