Генерация номера сборки для проекта

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

Трюк
Для начала создадим класс Build, содержащий следующий код:

package ;
class Build {
    public static var number:Int = 1;
}

Теперь, в любом месте нашего проекта, мы можем узнать номер сборки, обратившись к полю number класса Build.
Например:
new Label(this, 10, height-20, Config.version+"."+Build.number, Colors.white, 12);

Следующим, моим шагом стала автоматизация инкрементации номера сборки. Создадим файл .build, в корне проекта, данный файл будет содержать единственную строку num=1 (либо то число, с которого надо начать счет).

num=1

А теперь, скрипт prebuild.bat, который будет делать за меня "чёрную работу". Разместим скрипт рядом с файлом .build. Этот сценарий будет создавать класс Build, содержащий номер текущей сборки, основываясь на номере, который уже содержится в файле .build. А затем, увеличивать его на единицу и перезаписывать .build.

@echo off

set filename=.build
set hxclass=.\src\build.hx
call :read_settings %filename% || exit /b 1

set /a RESULT=NUM + 1

echo Build : %RESULT%

echo num=%RESULT%>%filename%
rem код класса можно заменить на любой удобный
echo package ; class Build { public static var number:Int = %RESULT%; }>%hxclass%
echo

exit /b 0

rem
rem Функция для чтения настроек из файла.
rem Ввод:
rem       %1           - Имя файла с настройками
:read_settings

set fname=%1

rem Проверка существования файла
if not exist %fname% (
    echo FAIL: Файл с настройками отсутствует
    exit /b 1
)

for /f "eol=# delims== tokens=1,2" %%i in (%fname%) do (
    set %%i=%%j
)

exit /b 0

Осталось ответить на вопрос: "Как выполнить prebuild.bat перед общей сборкой проекта?".
Для FlashDevelop (для других IDE по аналогии) это делается так: открываем меню Project->Properties, далее закладка Build и поле Pre-build command line, в котором прописываем следующее $(ProjectDir)\prebuild.bat.

На этом, трюк выполнен. Перед каждой сборкой, класс Build будет перезаписываться с новым значением поля number, что и обеспечит требуемый результат.

P.S. Код функции read_setting взят с сайта rsdn.ru.

Комментарии

Полезно

Спасибо, очень вовремя, как раз думал над тем, как бы извратиться... (:
Три замечания:
1. Имя файла класса всё-таки должно быть с большой буквы. Так, для порядка. (:
2. При записи в файл .build нужно поставить в конце пробел (echo num=%RESULT% >%filename%). Не знаю как в XP, но в W7 работает только с пробелом.
3. Команду $(ProjectDir)\prebuild.bat заменить на "$(ProjectDir)\prebuild.bat", т.к. если $(ProjectDir) содержит пробелы, то будет ошибка.
___
Тихо, идёт запись!

спасибо!

вот это точно пригодится на каждый день.
не раз уже приходила мысль, что неплохо бы было автоматом номера версий обновлять, но все как-то лениво было разбираться в вопросе. теперь вопрос решен.

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <blockcode> <dd>
  • Строки и параграфы переносятся автоматически.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>. The supported tag styles are: <foo>, [foo].
  • Use [gist:####] where #### is your gist number to embed the gist.

Подробнее о форматировании

CAPTCHA
Для отсева спамеров)
m
s
E
p
9
r
Enter the code without spaces and pay attention to upper/lower case.