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

Введение
В настоящее время, я работаю над проектом, одним из основных инструментов, в котором является язык 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>.

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

CAPTCHA
Этот вопрос помогает предотвратить автоматический спам
Image CAPTCHA
Enter the characters shown in the image without spaces, also respect upper and lower case.
To prevent automated spam submissions leave this field empty.