Flash / Flex: интеграция ревизии Subversion в файл EXE / SWF? - PullRequest
1 голос
/ 15 апреля 2011

Я недавно следовал этому замечательному руководству , чтобы интегрировать ревизию Subversion в файлы exe / dll, сгенерированные из моих проектов Visual Studio c ++ / c #.Теперь я могу легко щелкнуть правой кнопкой мыши по exe-файлу, чтобы узнать, какая ревизия использовалась для сборки двоичного файла (см. Изображение ниже).Мне нравится эта функция.

Можно ли сделать то же самое во flash / flex при создании воздушных / автономных приложений?Я хотел бы отметить как exe-файл, так и dll.

Подробности с информацией о ревизии svn http://www.zachburlingame.com/wp-content/uploads/2011/03/c_svn_autoversion_version_info.png


Обновление с решением:

Хотя представленные здесь решения на основе ANT не так гладки, как те, в которых информация svn записывается в файлы .exe / .dll (на мой взгляд), она решила мою проблему и теперь применяется в наших проектах.Моя установка основана на ответах Кевина и Фрэнкермеса, но использует файл SubMCRev.exe вместо файлов svn.exe или jar.

В нашей реализации мы при запуске выкидываем версию svn в файл журнала.Вывод из цели SVN ниже выглядит следующим образом:

Built with SVN Revision: 1.0.0.1181 (local modifications found)

Цель SVN:

<target name="SVN Revision">
        <exec executable="subWCRev.exe" outputproperty="revision">
            <arg value="${basedir}\\.." />
            <redirector>
                <outputfilterchain>
                    <linecontainsregexp>
                        <regexp pattern='^([Last]|[Local])' />
                    </linecontainsregexp>
                    <tokenfilter>
                        <replaceregex pattern='[\D]+([\d]+)' replace="Built with SVN Revision: 1.0.0.\1" />
                        <replaceregex pattern='Local modifications found' replace=" (local modifications found)" />
                    </tokenfilter>
                    <striplinebreaks />
                </outputfilterchain>
            </redirector>
        </exec>
    </target>

Цель компиляции:

<target name="compile" depends="init, SVN Revision">
        <mxmlc file="..." output="...">
            <define name="compile::REVISION" value="'${revision}'" />
        ....        
        </mxmlc>
    </target>

Ответы [ 2 ]

4 голосов
/ 15 апреля 2011

Я действительно хотел сделать это сам, поэтому решил, что исследую это. Я использую ANT и mxmlc для сборки. Вот фрагмент ANT, который я нашел здесь , чтобы получить номер ревизии:.

<target name="find_revision" description="Sets property 'revision.number' to the head svn revision">
        <property name="revision" value="HEAD"/>

        <!-- find out revision number of HEAD, need svn.exe installed on local machine -->
   <exec executable="svn" outputproperty="revision.number">
        <arg line="info -r ${revision}"/>
        <redirector>
           <outputfilterchain>
              <linecontainsregexp>
                 <regexp pattern='^Revision' />
              </linecontainsregexp>
              <tokenfilter>
                <replaceregex pattern='[\D]+([\d]+)' replace="\1" />
              </tokenfilter>
           </outputfilterchain>
        </redirector>
   </exec>
</target>

С найденным номером ревизии можно передать переменную как глобальную константу во время компиляции. Это достигается с помощью параметра mxmlc :.

 define=NAMESPACE::variable,value

Эту переменную можно получить в AS3 и использовать любым способом, который вы хотите. См. , используя условную компиляцию n для деталей.

Я еще не нашел способа программно установить дескрипторы приложения AIR, поэтому вам может потребоваться отредактировать / создать файл XML-дескриптора с помощью ANT перед компиляцией.

Дайте мне знать, если этот метод работает для вас, чтобы я мог использовать его сам = D

1 голос
/ 15 апреля 2011

Мы используем следующий метод (и он очень похож на ответ Кевина, но я могу подтвердить, что он работает):

фрагмент из моего build.xml: он использует два файла jar (svnkit и svntask) вместо svn.exe (поэтому он работает кроссплатформенно) - эти jar-файлы также регистрируются через svn, поэтому вы не можете их потерять или удалить.

<!-- SVN revision stuff -->
<typedef resource="com/googlecode/svntask/svntask.xml">
    <classpath>
        <fileset dir="${basedir}/util">
            <include name="svnkit.jar"/>
            <include name="svntask.jar"/>
        </fileset>
    </classpath>
 </typedef>

<target name="revision">
    <svn><info path="${basedir}" revisionProperty="revision" /></svn>
    <echo>${revision}</echo>
</target>
<!-- /SVN revision stuff -->

Теперь у нас есть ревизия в свойстве, которое мы включаем в задачу mxmlc в качестве условной переменной компилятора:

        <mxmlc file="${src.dir}/@{appfile}.@{ext}"
            output="@{output}/@{appfile}.swf"
            debug="@{debug}"
            target-player="${version_major}"
            optimize="true"
            locale=""
            use-network="true"
        >
            <define name="compile::REVISION" value="'${revision}'"/>
            [... rest snipped]
        </mxmlc>

Затем вы можете использовать эту переменную в AS:

var version:String = "1.0."+compile::REVISION;

Чтобы код работал и во Flash Builder, вам необходимо добавить следующую строку в дополнительные аргументы компилятора:

-define+=compile::REVISION,'dev' 

Таким образом, ваш код разработки будет иметь ревизию 'dev', что указывает на то, что он не обязательно был создан из фиксированной версии кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...