So what do you think about this?

<project default="setBuildNumber">
  <taskdef resource="net/sf/antcontrib/antlib.xml"/>
  <taskdef name="unset" classname="ise.antelope.tasks.Unset"/>

    <target name="setBuildNumber" depends="initBuildNum,getBuildNum">
      <!--First save the build number properties-->
      <propertyfile file="build.number">
        <entry key="major.number" value="${next.major}"/>
        <entry key="minor.number" value="${next.minor}"/>
        <entry key="hotfix.number" value="${next.hotfix}"/>
        <entry key="revision.number" value="${next.revision}"/>
        <entry key="continuous.number" value="${next.continuous}"/>
      </propertyfile>
      <!--Unset the properties so that we can change their values-->
      <unset name="major.number"/>
      <unset name="minor.number"/>
      <unset name="hotfix.number"/>
      <unset name="revision.number"/>
      <unset name="continuous.number"/>
      <property file="build.number"/>
      <!--set the full.buildnumber property to be used by the build-->
      <if>
        <or>
          <equals arg1="${increment}" arg2="continuous"/>
          <equals arg1="${increment}" arg2="contReset"/>
        </or>
        <then>
          <property name="full.buildnumber" 
value="${major.number}.${minor.number}.${hotfix.number}.${revision.number}.${continuous.number}"/>
        </then>
        <else>
          <property name="full.buildnumber" 
value="${major.number}.${minor.number}.${hotfix.number}.${revision.number}"/>
        </else>
      </if>
      <echo>${full.buildnumber}</echo>
  </target>

    <target name="initBuildNum" description="Get current build number 
properties">
      <property file="build.number"/>
      <var name="next.major" value="${major.number}"/>
      <var name="next.minor" value="${minor.number}"/>
      <var name="next.hotfix" value="${hotfix.number}"/>
      <var name="next.revision" value="${revision.number}"/>
      <var name="next.continuous" value="${continuous.number}"/>
    </target>

    <target name="getBuildNum">
      <switch value="${increment}">
        <case value="rebuild"/>
        <case value="major">
          <!--Increment major, minor to 1, hotfix to 0, revision to 1-->
          <math result="next.major" operand1="${next.major}" operation="+" 
operand2="1" datatype="int"/>
          <var name="next.minor" value="1" />
          <var name="next.hotfix" value="0" />
          <var name="next.revision" value="1" />
        </case>
        <case value="minor">
          <!--Major stays the same, minor increments, hotfix goes to 0, 
revision to 1-->
          <math result="next.minor" operand1="${next.minor}" operation="+" 
operand2="1" datatype="int"/>
          <var name="next.hotfix" value="0" />
          <var name="next.revision" value="1" />
        </case>
        <case value="hotfix">
          <!--Major stays the same, minor stays the same, hotfix increments, 
revision goes to 1-->
          <math result="next.hotfix" operand1="${next.hotfix}" operation="+" 
operand2="1" datatype="int"/>
          <var name="next.revision" value="1" />
        </case>
        <case value="continuous">
          <!--For continuous integration don't change anything but 5th build 
digit-->
          <math result="next.continuous" operand1="${next.continuous}" 
operation="+" operand2="1" datatype="int"/>
        </case>
        <case value="contReset">
          <!--Continuous build, but they want the 5th digit reset (i.e. new 
week)-->
          <var name="next.continuous" value="1"/>
        </case>
        <default>
          <!--Update revision number only, they didn't ask for anything 
special-->
          <math result="next.revision" operand1="${next.revision}" 
operation="+" operand2="1" datatype="int"/>
        </default>
      </switch>
    </target>

</project>

 



________________________________
From: Francis Galiegue <f...@one2team.com>
To: Ant Users List <user@ant.apache.org>
Sent: Wednesday, May 6, 2009 3:23:37 PM
Subject: Re: Reset BuildNumber

Le Wednesday 06 May 2009 19:17:25 Eric Fetzer, vous avez écrit :
> Get sidetracked?
>

Yup, but I got the result ;)

Here it is. Feel free to ask questions. This file is based on a build.number 
file which contains the major.number, minor.number, etc properties, and 
rewrites said file with the new values when it is done. Curiously, you don't 
reset hotfix if you update revision... I let it as is. I think you'll see 
where to reset hotfix otherwise.

It may be longer than your solution, but I think it is more legible - and more 
easily extensible.

Have fun!

----
<project name="test" basedir="." default="updateBuildNumber">
<!-- vim:set ts=4 noexpandtab syn=ant: -->

    <taskdef resource="net/sf/antcontrib/antlib.xml"/>
    <property file="build.number"/>

    <macrodef name="increment">
        <attribute name="victim"/>
        <sequential>
            <math result="ne...@{victim}" operand1="$...@{victim}.number}"
                operation="+" operand2="1" datatype="int"/>
        </sequential>
    </macrodef>


    <target name="init">
        <var name="next.major" value="${major.number}"/>
        <var name="next.minor" value="${minor.number}"/>
        <var name="next.hotfix" value="${hotfix.number}"/>
        <var name="next.revision" value="${revision.number}"/>
        <var name="next.continuous" value="${continuous.number}"/>
    </target>

    <target name="andwhat" if="rebuild" depends="init">
        <property name="done" value="true"/>
    </target>

    <target name="majorIncrement" if="majorIncrement" unless="done"
        depends="andwhat">
        <increment victim="major"/>
        <var name="next.minor" value="1"/>
        <var name="next.hotfix" value="1"/>
        <var name="next.revision" value="1"/>
        <var name="next.continuous" value="1"/>
        <property name="done" value="true"/>
    </target>

    <target name="minorIncrement" if="minorIncrement" unless="done"
        depends="majorIncrement">
        <increment victim="minor"/>
        <var name="next.hotfix" value="1"/>
        <var name="next.revision" value="1"/>
        <var name="next.continuous" value="1"/>
        <property name="done" value="true"/>
    </target>

    <target name="hotfixIncrement" if="hotfixIncrement" unless="done"
        depends="minorIncrement">
        <increment victim="hotfix"/>
        <var name="next.revision" value="1"/>
        <var name="next.continuous" value="1"/>
        <property name="done" value="true"/>
    </target>

    <target name="continuousIncrement" if="continuous" unless="done"
        depends="hotfixIncrement">
        <if>
            <equals arg1="${cont.reset}" arg2="true"/>
            <then>
                <var name="next.continuous" value="1"/>
            </then>
            <else>
                <increment victim="continuous"/>
            </else>
        </if>
        <property name="done" value="true"/>
    </target>

    <target name="revisionIncrement" unless="done"
        depends="continuousIncrement">
        <increment victim="revision"/>
        <property name="done" value="true"/>
    </target>

    <target name="updateBuildNumber" depends="revisionIncrement">
        <propertyfile file="build.number">
            <entry key="major.number" value="${next.major}"/>
            <entry key="minor.number" value="${next.minor}"/>
            <entry key="hotfix.number" value="${next.hotfix}"/>
            <entry key="revision.number" value="${next.revision}"/>
            <entry key="continuous.number" value="${next.continuous}"/>
        </propertyfile>
    </target>

</project>
----

-- 
Francis Galiegue
f...@one2team.com
Ingénieur système
Mob : +33 (0) 683 877 875
Tel : +33 (0) 178 945 552
One2team
40 avenue Raymond Poincaré
75116 Paris

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscr...@ant.apache.org
For additional commands, e-mail: user-h...@ant.apache.org


      

Reply via email to