Форум программистов, компьютерный форум, киберфорум
Системы контроля версий
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/26: Рейтинг темы: голосов - 26, средняя оценка - 4.96
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560

TortoiseSVN. Автоматически добавлять номер ревизии в программу

02.09.2014, 13:20. Показов 5839. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день.

Для своего проекта я использую TortoiseSVN. У меня принято такое простое "правило": номер ревизии в базе соответствует номеру версии моей программы. Мне бы хотелось, чтобы этот номер ревизии отображался в программе автоматически, т.е. мне бы не приходилось каждый раз перед фиксацией изменений править его руками в коде.

Вопрос, возможно ли такое? И если возможно, то как это осуществить? Посмотрел справку по командам TortoiseSVN, ничего похожего не нашёл.

Моя идея такая: в событиях после построения должен запускаться некоторый скрипт, который запишет в текстовый файл номер текущей ревизии в рабочей папке. Программа же будет открывать этот файл и отображать его содержимое. Вот какие команды (если они вообще существуют) нужно прописать в этом скрипте для получения желаемого результата?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.09.2014, 13:20
Ответы с готовыми решениями:

Номер ревизии репозитория
Есть ли какая-нибудь команда cmd или powershell, чтобы узнать номер ревизии самого репозитория? Есть svnversion, но он выдает номер...

Автоматически добавлять строки в StringGrid? А здесь смотрели?
Здравствуйте!При выполнении программы как можно добавить строки в Stringgrid?Например в начале stringgrid имеет 2 строки,во время работы я...

TEdit: автоматически добавлять точку после ввода каждых трех цифр
В процессе работы программа считывает IP адрес и выводит в поле TEdit в виде ххх.ххх.ххх.ххх его иногда нужно менять и записывать...

20
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
02.09.2014, 14:39
Цитата Сообщение от John Prick Посмотреть сообщение
Моя идея такая: в событиях после построения должен запускаться некоторый скрипт, который запишет в текстовый файл номер текущей ревизии в рабочей папке.
А как номер ревизии вообще можно получить?

А вторая проблема, которая Вас подстерегает, как этот номер вставить собственно в программу.
Думаю, что тут универсального ответа нет и быть не может - для каждого ЯП и компилятора есть свои пути решения проблемы.
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 14:47  [ТС]
Sergio Leone, спасибо, что задали теже вопросы, что и я. Как получить номер ревизии - это главный вопрос темы. Как его можно вставить в программу, я уже указал начале темы, как один из вариантов. Компилятор не при чём. Во многих IDE есть настройки Post Build Steps.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.09.2014, 14:56
В Subversion такого точно нет, нужно писать отдельный скрипт.

Цитата Сообщение от John Prick Посмотреть сообщение
У меня принято такое простое "правило": номер ревизии в базе соответствует номеру версии моей программы. Мне бы хотелось, чтобы этот номер ревизии отображался в программе автоматически, т.е. мне бы не приходилось каждый раз перед фиксацией изменений править его руками в коде.
Хорошая схема, я тоже использую одну из ее модификаций.
А на счет перед каждой фиксацией (commit) - это лишнее, по-моему.
Инкремент номера версии следует делать только перед выпуском public-сборок.

Добавлено через 3 минуты
Цитата Сообщение от John Prick Посмотреть сообщение
Как получить номер ревизии - это главный вопрос темы.
Можно батник написать, например в нем вызвать 'svn log -r HEAD %RepoURL%', а
затем распарсить вывод команды.

Вообще, большие проекты, как правило, собираются специальными инструментами
типа TeamCity или CruiseControl.NET, там такие вещи делаются автоматом.
Например, у CC.NET есть для этого дела переменная CCNetLabel, а номер версии
формируется так: Major.Minor.Build.Revision: Major и Minor задается вручную в
файле конфигурации, Build инкрементируется при каждой сборке, а Revision
соответствует ревизии репозитория (Subversion или Mercurial), из которого
выполняется сборка.
2
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 15:00  [ТС]
Убежденный, согласен, это нужно не при каждом пострении/фиксации, но почему-то как раз, когда это действительно нужно сделать, это забывается. Да и лазить в журнал, смотреть номер ревизии бывает утомительно.
Цитата Сообщение от Убежденный Посмотреть сообщение
В Subversion такого точно нет, нужно писать отдельный скрипт.
Обидно. Всякие скрипты для меня тёмный лес. Он, видимо, должен лазить в скрытых папках svn для поиска нужной информации.

Добавлено через 1 минуту
Цитата Сообщение от Убежденный Посмотреть сообщение
Можно батник написать, например в нем вызвать 'svn log -r HEAD %RepoURL%', а
затем распарсить вывод команды.
Это уже интересней. Команды svn из командной строки поддерживаются TortoiseSVN?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.09.2014, 15:04
Цитата Сообщение от John Prick Посмотреть сообщение
Это уже интересней. Команды svn из командной строки поддерживаются TortoiseSVN?
А зачем TortoiseSVN ? Командуй сразу svn.exe.
Если не получится, вечером напишу примерчик, сейчас у меня обед закончился и
нужно идти работать
1
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
02.09.2014, 15:19
погодите. насколько я разбираюсь в TortoiseSVN, понятие номера ревизии - это свойство папки.
если у Вас в проекте несколько вложенных каталогов, то каждый из них имеет свой номер ревизии:



Вас какой именно номер ревизии интересует?
0
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 15:26  [ТС]
Цитата Сообщение от Sergio Leone Посмотреть сообщение
насколько я разбираюсь в TortoiseSVN, понятие номера ревизии - это свойство папки.
если у Вас в проекте несколько вложенных каталогов, то каждый из них имеет свой номер ревизии:
Номер ревизии относится к хранилищу в целом. Как правило, на каждый проект создаётся своё хранилище. Бывает, когда проекты содержат какие-то исходные коды других библиотек, которые, в свою очередь, находятся в своих хранилищах, у них свои номера ревизий. Но главный проект всё равно один. Вот его-то номер ревизии меня и интересует. По крайней мере, на данной стадии. Потом можно будет в номер версии добавлять и номера ревизий библиотек: 1.5.1234.567.89 или как-то ещё.

Добавлено через 1 минуту
Цитата Сообщение от Убежденный Посмотреть сообщение
Если не получится, вечером напишу примерчик
Большое спасибо, буду очень признателен.
1
2511 / 1132 / 582
Регистрация: 07.06.2014
Сообщений: 3,286
02.09.2014, 15:35
Цитата Сообщение от Убежденный Посмотреть сообщение
А зачем TortoiseSVN ? Командуй сразу svn.exe.
так это же и входит в состав TortoiseSVN.
По крайней мере, у меня, если в консоли написать SVN (или svn.exe),
то запустится именно отсюда:
Code
1
"C:\Program Files\TortoiseSVN\bin\svn.exe"
John Prick, попробуйте перейти в командную строку и написать для SVN какую-нибудь команду.
ну, например:
Code
1
svn info ПОЛНЫЙ_ПУТЬ_К_ГЛАВНОЙ_ДИРЕКТОРИИ_С_ПРОЕКТОМ
1
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 15:40  [ТС]
Sergio Leone, да, уже пробую. У меня пишет, что svn - неизвестная команда, хотя путь к ней в PATH прописан.

Добавлено через 1 минуту
А, понял. Её там и нет. Видимо, что-то я не установил.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2014, 15:47
В svn (и не только) есть встроенная возможность автоматически прописывать в хранимый файл номер версии при commit'е. На память не помню, дома посмотрю

Добавлено через 2 минуты
Цитата Сообщение от John Prick Посмотреть сообщение
Мне бы хотелось, чтобы этот номер ревизии отображался в программе автоматически, т.е. мне бы не приходилось каждый раз перед фиксацией изменений править его руками в коде
Вот так вроде бы нельзя. Ведь для этого нужно модифицировать файл. А при каждом commit'е автоматически модифицировать файл (в котором нету правок) вроде бы нельзя
1
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 15:50  [ТС]
Evg, так мне и не надо в исходные коды номер версии вставлять. Достаточно в отдельный файл, который будет открываться моей программой при работе. Хотя сейчас я руками прописываю именно в коде, но мог бы также и в отдельном файле писать.

Добавлено через 1 минуту
Обнаружил вот какую утилиту в TortoiseSVN
Глава 5. Программа SubWCRev
SubWCRev - это консольная программа Windows, которая может быть использована для чтения статуса рабочей копии Subversion и, при необходимости, для выполнения подстановки ключевых слов в шаблонных файлах. Это часто используется как часть процесса сборки, в качестве средства для внедрения информации из рабочей копии в собираемый объект. В основном это применяется для включения номера ревизии в диалог «О программе».
По-моему, то, что нужно.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2014, 15:54
Цитата Сообщение от John Prick Посмотреть сообщение
Достаточно в отдельный файл, который будет открываться моей программой при работе
С точки зрения svn'а нет разницы между "исходниками" и "не исходниками". Для него всё, что лежит в репозитории - это файлы. Чтобы в файле автоматически была прописана версия, этот файл после каждого commit'а надо модифицировать
1
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 15:55  [ТС]
Evg, так мне этот файл под репозиторием и не нужен. После сборки он должен появиться в выходном каталоге и всё.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2014, 15:57
Цитата Сообщение от John Prick Посмотреть сообщение
Это часто используется как часть процесса сборки, в качестве средства для внедрения информации из рабочей копии в собираемый объект
Ты же сам говоришь, что не хочешь работать со скриптами. Эта фигня используется как часть процесса сборки (видимо, для генерации опций, которые формируют макрос с номером версии). Это фактически сделать "svn info" и в процессе сборки выдрать номер ревизии

Добавлено через 1 минуту
Цитата Сообщение от John Prick Посмотреть сообщение
После сборки он должен появиться в выходном каталоге и всё
Ну так он же сам собой не появится. Нужно svn'у отдать какой-то приказ. Т.е., грубо говоря, сделать какой-то дополнительный скрипт
1
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 16:28  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Ты же сам говоришь, что не хочешь работать со скриптами.
Не хочу, но придётся, видимо. Запишу все команды в Post Build Steps, либо же в батник, который вызывать в Post Build Steps.

Добавлено через 26 минут
Короче, вроде бы всё получилось.
1. Создал файл-шаблон (version.tmpl):
C++
1
Version: $WCREV$
2. В post build steps написал:
C++
1
SubWCRev $(SolutionDir) $(SolutionDir)\version.tmpl $(TargetDir)\version.txt
3. Сделал сборку. Вот выходной файл (version.txt):
C++
1
190
Всё работает! Осталось открыть файл в программе и отобразить содержимое. С этим уж как-нибудь справлюсь.
Всем спасибо за ответы/советы/вопросы!
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2014, 16:29
Цитата Сообщение от John Prick Посмотреть сообщение
Осталось открыть файл в программе и отобразить содержимое
Более правильным было бы подавать в компиляцию опцию типа -DVERSION="<содержимое файла>". Т.е. работая с внятными Makefile'ами сие вообще никакой проблемы не представляет, но как в студии - хз
1
2393 / 1920 / 763
Регистрация: 27.07.2012
Сообщений: 5,560
02.09.2014, 16:33  [ТС]
Evg, возможно. Проект на C#, там я вообще не особо в курсе, как опции компиляции работают. Пока что, на данном этапе мне хватит и этого.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
02.09.2014, 21:48
Ну и вот, на всякий случай. Оно обновляется только после commit'а, но вполне себе нормально завести отдельный файл с номером ревизии и каждый раз при commit'е туда впихивать пробел. Хотя более актуальным является наличие версии только в тех бинарниках, которые отдаются на сторону или консервируются, а потому в промежутках между этими состояниями файл можно не трогать и не париться из-за того, что он не ту версию показывают. А в нормальном состоянии так вообще перед выдачей куда-либо создаётся tag, в котором всё равно будет commit и автоматическое изменение версии

http://svnbook.red-bean.com/ni... words.html
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.09.2014, 22:01
Цитата Сообщение от Убежденный Посмотреть сообщение
вечером напишу примерчик
В общем, что-то типа такого:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@echo off
 
rem Сюда вписать URL репозитория.
set RepoUrl=...
 
set HeadRevision=Undefined
set fDefined=0
 
for /F "eol=- tokens=1,2* delims=r " %%i in ('svn log -r HEAD %RepoUrl%') do call :SetRevision %%i
if not %HeadRevision%==Undefined goto :Finish
 
echo *** ERROR ***
pause
exit 10
 
:SetRevision
if not %fDefined%==0 goto :EOF
set HeadRevision=%1
set fDefined=1
goto :EOF
 
:Finish
echo HeadRevision=%HeadRevision%
Но все-таки я советую не заниматься велосипедостроительством и
попробовать CruiseControl.NET, раз уж такие задачи возникают.
Сам пользуюсь уже года три, наверное.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.09.2014, 22:01
Помогаю со студенческими работами здесь

Как автоматически добавлять всех новых контактеров в черный список скайп
Здравствуйте! Как добавлять всех, абсолютно всех, новых контактеров в черный список скайп автоматически, или отключить прием заявок в...

В "сообщение" автоматически добавлять свойство Title страницы, с которой пришел пользователь
Вообщем такая проблема.. поставил на сайт форму обратной связи :http://demomebel.p.ht/contacts Нужно сделать так, чтобы в...

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

Номер контракта автоматически на PHP Mysql
Здравствуйте, дорогие друзья. Вообщем очередной вопрос. В фирме номера контрактов вставляется следующем образом например 01/04-17. Здесь...

Номер сноски автоматически перескакивает через один
Добрый вечер! Проблема с автоматической нумерацией сносок. На стр. 75 список сносок заканчивается сноской номер 76, на стр. 76 сносок...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru