Автоматическая нумерация версий - PullRequest
3 голосов
/ 04 декабря 2010

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

Сейчас у каждого из моих классов есть функция static void print_info() { cout << "information here" << endl; }, и файл с main () вызывает print_info каждого класса.

Вопрос : Есть ли способ автоматически поддерживать номер версии с изменениями?

Дополнительная информация: Я и моя команда используем NetBeans для разработки. Мы также используем Subversion (svn), и я знаю, что он сохраняет номера ревизий. Проблема только косвенно связана с номером ревизии. Я хочу иметь возможность распространять исполняемый файл, который будет печатать номер версии без доступа к серверу Subversion.

Я буду рад предоставить больше информации, если это несколько расплывчато. Спасибо!

P.S. Мне все равно, что значение версии. Погода - это произвольное число, сгенерированное NetBeans, или соответствующий номер редакции Subversion, или просто дата, когда было сделано последнее изменение.

Ответы [ 3 ]

3 голосов
/ 04 декабря 2010

Вы можете использовать свойство Revision subversion в исходном файле, которое активирует подстановку ключевого слова $Revision$ в файле.

string version = "$Revision:$";

http://svnbook.red -bean.com / ru /1,4 / svn.advanced.props.special.keywords.html

1 голос
/ 04 декабря 2010

Прежде всего, я рекомендую вам сделать что-то иное, чем ваш print_info() подход, так как он не очень гибкий - что, если вы хотите использовать версию, а не просто распечатать ее в STDOUT, или что, если вы хотите сообщить оверсия в сообщении об ошибке STDERR?static метод, возвращающий константную строку символов, был бы более универсальным.

Что касается выбора номера версии, вы, безусловно, можете использовать ключевые слова SVN, которые могут быть подставлены в текст вашего тела.код.Например, (следуя одному из примеров, приведенных в приведенной ссылке), если у вас есть строка

char[] versionString = "commit revision $Rev$";

и вы включили подстановку соответствующего ключевого слова svn propset svn:keywords "Rev" file.cpp, при следующем обновлении клиент SVN выполнит обновлениеизмените текст на что-то вроде

char[] versionString = "commit revision $Rev: 12 $";

, и в следующий раз, когда вы подтвердите его, строка будет перезаписана на новую правильную строку, например

char[] versionString = "commit revision $Rev: 13 $";

Если вы используете SVN хорошо, выдолжны быть ветвления и теги, в этом случае информация о ветвях и тегах (которые являются частью ключевого слова $URL$) являются полезными вещами для включения в строку версии.$Revision$ также полезно для предоставления вам значения, которое меняется между обновлениями.Помните, однако, что ключевые слова обновляются только при выполнении обновления (извлечение, фиксация и т. Д.).Если вы сделаете изменения в своем коде, а затем скомпилируете его, сообщенное значение $Revision$ будет таким же, как при первоначальном извлечении кода.Насколько я знаю, единственный способ избежать этого - принять процедуру выполнения коммита вашего кода перед компиляцией новой версии вашего программного обеспечения - это хорошо работает, если вы комбинируете это с процессом пометки выпусковв пределах SVN.

0 голосов
/ 04 декабря 2010

Если вы хотите сделать это таким образом, я бы выбрал #define в начале каждого исходного файла и обновил бы его до даты последнего изменения файла (либо используя $ Date: $, либо обновив его с собственный сценарий). Затем вы можете очень легко использовать определенную константу в print_info ().

...