Как я могу обновить номер редакции в неизмененном файле для каждого коммита, имеющего также этот файл?
У меня есть файл revision.txt в моем проекте SVN.
По сути, я хочу, чтобы этот файл обновлялся автоматически, когда я вызываю svn ci с номером ревизии, которую рабочая копия будет иметь после фиксации.
Например:
- revision.txt содержит "10"
- Я делаю некоторые изменения в моей рабочей копии (другие файлы, не revision.txt)
- SVN CI
- скрипт запуска хука
- читать номер следующей ревизии
- обновить revision.txt
- зафиксировать изменения (также revision.txt)
- сейчас revision.txt уже зафиксирован с редакцией № 11
Я безуспешно пытался с крючком сценария. Я не могу получить следующий номер ревизии и обновить транзакцию перед фиксацией.
Затем попробуйте "auto-props", но они работают только с измененными файлами. Предпочтительным решением является использование только скрипта-хука, а не скрипта-обертки, который проверяет ревизию и обновление.
Возможно? Примеры приветствуются
3 ответа
Вы не можете угадать следующий номер ревизии перед коммитом из-за условий гонки - вы не можете гарантировать, до тех пор, пока кто-нибудь еще не опередил вас. Также очень плохо менять файлы в хуке фиксации SVN - рабочие копии становятся устаревшими и грязными, так как они получают только "сработало" или "не получилось" с сервера, но не "сработало", но то, как этот файл теперь имеет это содержимое... "
Для чего вам это нужно? Возможно, есть другой способ получить то, чего вы пытаетесь достичь.
Вы можете автоматически сгенерировать файл revision.txt непосредственно перед тем, как он понадобится, используя команду " svn info" и отфильтровав строку "Revision: " в файле.
Как вы уже упоминали, на основе ключевых слов svn: можно изменять только измененные файлы. Но я думаю, что вам нужна система сборки, которая обрабатывает такую информацию (может быть сервер сборки / сервер непрерывной интеграции).
Подстановка ключевых слов ближе всего к тому, что вы хотите, но на самом деле это тоже не сработает, потому что дает вам последнюю модификацию файла, а не проекта. Из FAQ по Subversion по этому вопросу:
Требуемая информация (ревизия вашей рабочей копии) доступна из команды svnversion; он дает вам информацию об уровне редакции рабочей копии с указанным путем (подробности см. в svnversion --help).
Вы можете включить его в процесс сборки или выпуска, чтобы получить необходимую информацию в самом источнике.