Запишите текущую svn версию в текстовый файл

Можно выполнить метод объекта на любом объекте, независимо от того, имеет ли он тот метод или нет. Конечно, это не могло бы всегда работать (если метод предполагает, что объект имеет что-то, что это не делает), но это может быть чрезвычайно полезно. Например:

function(){
    arguments.push('foo') // This errors, arguments is not a proper array and has no push method
    Array.prototype.push.apply(arguments, ['foo']) // Works!
}
6
задан Max Williams 1 December 2009 в 11:48
поделиться

5 ответов

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

использование: svnversion [OPTIONS] [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 смешанная ревизия, измененная, переключенная рабочая копия

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

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

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

6
ответ дан 8 December 2019 в 18:37
поделиться

Я использую следующий фрагмент сценария оболочки для создания файла заголовка 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

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

4
ответ дан 8 December 2019 в 18:37
поделиться

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

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

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

2
ответ дан 8 December 2019 в 18:37
поделиться

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

Путь:.

URL: http: //my.url/trunk

Корень репозитория: http: //my.url/lesson%5Fplanner

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

Версия: 4571

[...]

Последняя измененная версия: 4571

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

1
ответ дан 8 December 2019 в 18:37
поделиться

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

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

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

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

0
ответ дан 8 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: