Запишите текущую версию SVN в текстовый файл - PullRequest
6 голосов
/ 01 декабря 2009

У меня есть сайт рельсов. Я хотел бы при перезапуске mongrel записать текущую версию svn в public / version.txt, чтобы я мог добавить это в комментарий в заголовке страницы.

Проблема в получении текущей локальной версии SVN - я немного запутался.

Если, например, я делаю svn-обновление для файла, который не обновлялся в течение некоторого времени, я получаю «На ревизии 4571.». Тем не менее, если я делаю SVN информацию, я получаю

Путь:.
URL: http://my.url/trunk
Корень хранилища: http://my.url/lesson_planner
UUID репозитория: #########
Редакция: 4570
Вид узла: каталог
График работы: обычный
Последнее изменение Автор: макс
Последнее изменение Rev: 4570
Дата последнего изменения: 2009-11-30 17:14:52 +0000 (пн, 30 ноя 2009)

Обратите внимание, это говорит о версии 4570, на 1 ниже, чем предыдущая команда.

Может кто-нибудь разобраться со мной и показать, как просто получить номер текущей версии?

спасибо, макс.

Ответы [ 5 ]

6 голосов
/ 01 декабря 2009

Subversion поставляется с командой для выполнения именно этого: SVNVERSION.EXE .

использование: svnversion [ОПЦИИ] [WC_PATH [TRAIL_URL]]

Создание компактного «номера версии» для пути к рабочей копии WC_PATH. TRAIL_URL - завершающая часть URL, используемая для определить, включен ли сам WC_PATH (обнаружение переключателей в WC_PATH не полагается на TRAIL_URL). Номер версии записывается в стандартный вывод. Например:

$ svnversion . /repos/svn/trunk 
4168

Номер версии будет одним числом, если рабочий копия однократная, неизмененная, не переключенная и с URL, который соответствует аргументу TRAIL_URL. Если рабочая копия необычная, номер версии будет более сложным:

4123: 4168 рабочая копия смешанной ревизии
4168M модифицированная рабочая копия
Рабочая копия 4123S
4123: смешанная редакция 4168MS, измененная, переключенная рабочая копия

Если вызывается для каталога, который не является рабочей копией, скажем, экспортированный каталог, программа выведет «exported».

Если вызывается без аргументов, WC_PATH будет текущим каталогом.

Допустимые параметры: -n [--no-newline]: не выводить завершающий перевод новой строки -c [--committed]: последнее изменение, а не текущие изменения -h [--help]: показать эту справку --version: показать информацию о версии

4 голосов
/ 01 декабря 2009

Я использую следующий фрагмент сценария оболочки для создания файла заголовка svnversion.h, который определяет несколько константных строк символов, которые я использую в скомпилированном коде. Вы должны быть в состоянии что-то очень похожее:

#!/bin/sh -e

svnversion() {
    svnrevision=`LC_ALL=C svn info | awk '/^Revision:/ {print $2}'`
    svndate=`LC_ALL=C svn info | awk '/^Last Changed Date:/ {print $4,$5}'`

    now=`date`

    cat <<EOF > svnversion.h

// Do not edit!  This file was autogenerated
//      by $0
//      on $now
//
// svnrevision and svndate are as reported by svn at that point in time,
// compiledate and compiletime are being filled gcc at compilation

#include <stdlib.h>

static const char* svnrevision = "$svnrevision";
static const char* svndate = "$svndate";
static const char* compiletime = __TIME__;
static const char* compiledate = __DATE__;

EOF
}

test -f svnversion.h || svnversion

Предполагается, что вы удалите созданный заголовочный файл, чтобы запустить сборку нового.

2 голосов
/ 01 декабря 2009

Если вы просто хотите напечатать последнюю версию хранилища, вы можете использовать что-то вроде этого:

svn info <repository_url> -rHEAD | grep '^Revision: ' | awk '{print $2}'

Вы можете использовать capistrano для развертывания, он создает файл REVISION, который вы можете скопировать в public / version.txt

1 голос
/ 01 декабря 2009

Кажется, что вы запускаете svn info в каталоге, но svn update в определенном файле. Если вы обновите каталог до версии 4571, svn info должно вывести:

Путь:.

URL: http://my.url/trunk

Корень хранилища: http://my.url/lesson%5Fplanner

UUID репозитория: #########

Редакция: 4571

[...]

Последнее изменение Rev: 4571

Обратите внимание, что «последняя измененная ревизия» не обязательно совпадает с последней ревизией репозитория.

0 голосов
/ 02 декабря 2009

Спасибо всем, кто предложил capistrano и svninfo.

На самом деле мы используем capistrano, и он действительно создает этот файл REVISION, который, я думаю, я видел раньше, но не обращал на это внимания. Однако, как это бывает, это не совсем то, что мне нужно, потому что оно обновляется только при развертывании, тогда как иногда мы можем незаметно обновить пару файлов, а затем перезапустить, вместо того, чтобы делать полное развертывание.

Я закончил тем, что делал свой собственный файл, используя svninfo, grep и awk, как многие предлагали здесь, и выкладывал его в открытый доступ. Это создается при запуске mongrel, которая является частью процесса развертывания, и процесс перезапуска выполняется оба раза.

спасибо всем!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...