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.

3 Responses to “Magic of svn:keywords”

  1. Прошу прощения за археологию. Прочёл вашу заметку в поисках истины)
    “$Revision$ – вещь действительно удобная, но подставляет лишь последнюю модифицирующую ревизию для данного файла, а как быть если требуется включить номер последней ревизии хранилища?
    P.S. хочу при сборке в About добавить строку “ProductName ver.XX (build YY)”, где YY – последняя ревизия хранилища.
    (С разбором stdout пока не хочу заморачиваться)

  2. У меня было немного подобная задача и лучшего решения чем парсить вывод 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/

    Надеюсь это поможет )

  3. Благодарю вас за отклик!
    да, такая мысль мне в голову приходила, но тогда я ещё не терял надежды найти более элегантное решение)
    пишу на C++ (MSVS2005)под Win, сервер сборки, разумеется, тоже виндовый, но используются bash скрипты (CygWin).
    Видимо придётся поступить аналогичным образом – парсить stdout SVN log-a при выгрузке перед сборкой.
    Спасибо.

Leave a Reply