Как я могу обновить номер редакции в неизмененном файле для каждого коммита, имеющего также этот файл?

У меня есть файл revision.txt в моем проекте SVN.

По сути, я хочу, чтобы этот файл обновлялся автоматически, когда я вызываю svn ci с номером ревизии, которую рабочая копия будет иметь после фиксации.

Например:

  1. revision.txt содержит "10"
  2. Я делаю некоторые изменения в моей рабочей копии (другие файлы, не revision.txt)
  3. SVN CI
    • скрипт запуска хука
    • читать номер следующей ревизии
    • обновить revision.txt
    • зафиксировать изменения (также revision.txt)
  4. сейчас revision.txt уже зафиксирован с редакцией № 11

Я безуспешно пытался с крючком сценария. Я не могу получить следующий номер ревизии и обновить транзакцию перед фиксацией.

Затем попробуйте "auto-props", но они работают только с измененными файлами. Предпочтительным решением является использование только скрипта-хука, а не скрипта-обертки, который проверяет ревизию и обновление.

Возможно? Примеры приветствуются

3 ответа

Решение

Вы не можете угадать следующий номер ревизии перед коммитом из-за условий гонки - вы не можете гарантировать, до тех пор, пока кто-нибудь еще не опередил вас. Также очень плохо менять файлы в хуке фиксации SVN - рабочие копии становятся устаревшими и грязными, так как они получают только "сработало" или "не получилось" с сервера, но не "сработало", но то, как этот файл теперь имеет это содержимое... "

Для чего вам это нужно? Возможно, есть другой способ получить то, чего вы пытаетесь достичь.

Вы можете автоматически сгенерировать файл revision.txt непосредственно перед тем, как он понадобится, используя команду " svn info" и отфильтровав строку "Revision: " в файле.

Как вы уже упоминали, на основе ключевых слов svn: можно изменять только измененные файлы. Но я думаю, что вам нужна система сборки, которая обрабатывает такую ​​информацию (может быть сервер сборки / сервер непрерывной интеграции).

Подстановка ключевых слов ближе всего к тому, что вы хотите, но на самом деле это тоже не сработает, потому что дает вам последнюю модификацию файла, а не проекта. Из FAQ по Subversion по этому вопросу:

Требуемая информация (ревизия вашей рабочей копии) доступна из команды svnversion; он дает вам информацию об уровне редакции рабочей копии с указанным путем (подробности см. в svnversion --help).

Вы можете включить его в процесс сборки или выпуска, чтобы получить необходимую информацию в самом источнике.

Другие вопросы по тегам