LINUX.ORG.RU

subversion — автомагическая генерация номеров версии


0

0
Вероятно, я сам не знаю чего хочу. Но одно я знаю точно: мне нужен строковый параметр для идентификации версии (в C-программе). Я использую subversion (буквально вчера начал). Исходная версия может являться быть извлечённой из svn://.../tags/, из svn://.../branches. или svn://.../trunc. И это *должно* *быть* *отражено* *в* *номере* *версии*. Может не в номере, в чём угодно ещё, но должно быть известно откуда оно взялось.

Вопрос: а откуда я могу знать откуда вот-этот-вот-файл извлекли? SVN такой keywords не предоставляет. То-есть HeadURL вот есть, да. Oн должен получаться одинаковый в различных ветвях в случае, если файл не меняется. Именно это мне и не нужно.

На самом деле вопрос не "как сделать". Сделать можно как угодно, с помощью какой-то матери. Вопрос в том, что, вероятно, существует какая-то отработанная более-менее уже ТЕХНОЛОГИЯ, как подобные вещи делаются. Хотелось бы знать.

Кроме того, хотелось бы автомагическую нумерацию версий. Может и не нумерацию, может и не версий. Просто для любого файла прошивки хотелось бы иметь возможность сказать что это и откуда оно взялось. А если кто-то сделал checkout, покопался в нём ручками и как потом такую версию нумеровать? Впрочем, тут можно иметь автомагический счётчик сборок, или привычку перед любой сборкой "ответвлять" текущее дерево.

★
Ну можно попробовать распарсить .svn/entries, если очень хочется.
kpanic ★★
()
У меня проект собирается ant'ом. Мне надо было сделать чтобы в диалоге about указывался номер ревизии subversion. Я не нашел ничего лучше чем написать небольшой xsl скрипт который преобразует .svn/entries в файл resision.properties, который затем включается в jar проекта. Этот revision.properties содержит всего одну строчку вида revision=xxx. Получить в программе на Java значение такого свойства - раз плюнуть.

Способ неправильный, так как нет никакой гарантии что формат .svn/entries не изменится, но более верного пути я пока не нашел.

anonymous
()
Ответ на: комментарий от anonymous
> eсть подозрение, что у вас каша в голове.

Отбросте подозрения. Это просто факт.

Вот и хотелось бы её разгрести.

fk0 ★
() автор топика
Ответ на: комментарий от anonymous
> У меня проект собирается ant'ом. Мне надо было сделать чтобы в диалоге about указывался номер ревизии subversion. Я не нашел ничего лучше чем написать небольшой xsl скрипт который преобразует .svn/entries в файл resision.properties, который затем включается в jar проекта. Этот revision.properties содержит всего одну строчку вида revision=xxx. Получить в программе на Java значение такого свойства - раз плюнуть.

А чем $Rev$ не нравится?

fk0 ★
() автор топика
Ответ на: комментарий от anonymous
>> А чем $Rev$ не нравится?

>тем что она показывает ревизию файла, а не всего репозитория

Дааааа! А ещё оно $HeadURL$ меняет в checkout-ных копиях а в который switch сделал -- хрен. Показывает на тот откуда его checkout. Может оно верно, поскольку если файл не менялся, ЭТО ОДИН И ТОТ ЖЕ ФАЙЛ.

Но как в такой системе решается тогда исходная задача -- узнать ИЗ ЧЕГО БЫЛО СОБРАНО ВОТ ЭТО ВОТ?

svn info . выдаёт всё что нужно. попробую оттуда брать. (А накой эти keywords волшебные вообще нужны, если от них никакого толку?)

fk0 ★
() автор топика
  Придумал скрипт. Номер версии формируется как номер ревизии для
сборки из trunk, как имя тэга для сборки из tags и как комбинация
номера ветви и ревизии для сборки из branches.

  Что мне ОЧЕНЬ не нравится -- для этого нужен /usr/bin/svn.
Как быть в случае использования TortoiseSVN?
TortoiseProc.exe /command:blablabla там и svn тут. Всё через ()().
:-(

#!/bin/sh

svn info . | (

while read name val; do
	case "$name" in
		URL:) LOCATION=$val;;
		Revision:) REVISION=$val;;
	esac
done

LOCATION=${LOCATION%/fluofot/lowlevel};
case $LOCATION in
	*/trunk)
		version=$REVISION
		;;
	*)
		version=${LOCATION##*/}
		case ${LOCATION%/*} in
			*/tags)
				;;
			*/branches)
				version=$version-$REVISION
				;;
			*)
				echo unknown repository path prefix $LOCATION >&2
				exit 1
				;;
		esac
esac

cat <<END
#define VERSION "$version"
END

)

fk0 ★
() автор топика
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.