Magic of svn:keywords
Сегодняшний день не прошел без мини откровений – узнала о возможности динамически изменять ревизию/дату изменения в исходниках при коммите. Для этого просто необходимо установить свойство svn:keywords (svn propset svn:keywords “Date Author” source.c) с необходимыми ключевыми словами (напр. Revision, Author и т.д.), а в исходнике добавить что-то вроде “$Revision$”. И при коммите вместо ключевого слова будет вставлен номер ревизии с которой он произведен -“$Revision: 666$”
Одно из применений этого метода для Java – добавить в каждый класс статический блок
static{ System.out.println(”$Revision$ $Source$ $Date$”);}
При загрузке классов будет выводиться указанная информация, которая может быть крайне полезна при отладке – напр. один из классов устаревший.
Детали в svnbook
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
January 22nd, 2010 at 11:17 am
Прошу прощения за археологию. Прочёл вашу заметку в поисках истины)
“$Revision$ – вещь действительно удобная, но подставляет лишь последнюю модифицирующую ревизию для данного файла, а как быть если требуется включить номер последней ревизии хранилища?
P.S. хочу при сборке в About добавить строку “ProductName ver.XX (build YY)”, где YY – последняя ревизия хранилища.
(С разбором stdout пока не хочу заморачиваться)
January 22nd, 2010 at 11:32 am
У меня было немного подобная задача и лучшего решения чем парсить вывод svnversion не нашла
Мне нужно было не в About окошке показывать, а просто слать с крэш-репортом.
Я, увы, не знаю на каком языке/платформе/etc надо. У меня это выглядит как отдельная билд-фаза в XCode (но применимо не только для него)
REV=`/usr/bin/svnversion -nc ${PROJECT_DIR} | /usr/bin/sed -e 's/^[^:]*://;s/[A-Za-z]//'`echo $REV > $BUILT_PRODUCTS_DIR/$PROJECT_NAME.app/Contents/Resources/Rev
Этот код получает ревизию и пишет в файлик Rev расположенный в
$BUILT_PRODUCTS_DIR/$PROJECT_NAME.app/Contents/Resources/Надеюсь это поможет )
January 22nd, 2010 at 2:32 pm
Благодарю вас за отклик!
да, такая мысль мне в голову приходила, но тогда я ещё не терял надежды найти более элегантное решение)
пишу на C++ (MSVS2005)под Win, сервер сборки, разумеется, тоже виндовый, но используются bash скрипты (CygWin).
Видимо придётся поступить аналогичным образом – парсить stdout SVN log-a при выгрузке перед сборкой.
Спасибо.