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
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.