Есть ли команда Subversion для отображения текущего номера версии?
После svn checkout
я хочу запустить script и вам нужен номер версии в переменной. Было бы замечательно, если бы была команда вроде svn info get_revision_number
.
Есть ли команда Subversion для отображения текущего номера версии?
После svn checkout
я хочу запустить script и вам нужен номер версии в переменной. Было бы замечательно, если бы была команда вроде svn info get_revision_number
.
Вы можете использовать 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
Я использую этот фрагмент кода python для извлечения информации о ревизии:
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
, четвертая строка
Теперь каждый раз, когда вы проверяете этот файл, он сам будет иметь ревизию.
REV = svn info svn://svn.code.sf.net/p/retroshare/code/trunk | grep 'Revision:' | cut -d\ -f2
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')
Обратите внимание, что в зависимости от того, для чего вам это нужно, запись <commit revision=...>
может быть больше того, что вы ищете. Это дает "Last Changed Rev", который не изменится, пока код в текущем дереве фактически не изменится, в отличие от "Revision" (что указано выше), который будет меняться в любое время, когда что-либо в репозитории изменяется (даже ветки) и вы делаете "svn up", что не то же самое, и не так часто полезно.
Только что использованный ответ @badcat в модифицированной версии, используя subprocess.check_output()
:
import subprocess
revision = subprocess.check_output("svn info | awk '/^Revision:/ {print $2}'", shell=True).strip()
Я считаю, что вы также можете установить и использовать pysvn, если вы хотите использовать python для взаимодействия с svn.
Никто не упоминает для Windows мир SubWCRev, который, правильно используемый, может автоматически заменить необходимые данные в необходимые места, если script вызовите SubWCRev в форме SubWCRev WC_PATH TPL-FILE READY-FILE
Пример моего крюка после фиксации (часть)
SubWCRev.exe CustomLocations Builder.tpl z:\Builder.bat
...
call z:\Builder.bat
где my Builder.tpl
svn.exe export trunk z:\trunk$WCDATE=%Y%m%d$-r$WCREV$
как результат, у меня есть каждый раз bat файл с переменной part - name dir - который соответствует метаданным Work Copy
Я думаю, что мне нужно сделать svn info, а затем получить номер с помощью манипуляции с строкой из "Редакция: xxxxxx" Было бы неплохо, если бы была команда, которая возвращает только число:)