OK, yeah, I totally don't understand the <buildnumber/> task. It seems simple
enough, but doesn't behave how it should. I started off with major.number set
to 1 and minor.number set to 0. Here's my simple build file:
<project default="main">
<taskdef resource="net/sf/antcontrib/antlib.xml"/>
<taskdef name="unset" classname="ise.antelope.tasks.Unset"/>
<target name="main">
<if>
<equals arg1="${major.increment}" arg2="true"/>
<then>
<buildnumber file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<unset name="build.number"/>
<property file="minor.number"/>
<replace file="minor.number" token="build.number=${build.number}"
value="build.number=0"/>
<unset name="build.number"/>
<property file="minor.number"/>
</then>
<else>
<property file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<unset name="build.number"/>
<buildnumber file="minor.number"/>
</else>
</if>
<propertycopy name="minor.number" from="build.number"/>
<property name="full.buildnumber" value="${major.number}.${minor.number}"/>
<echo>${full.buildnumber}</echo>
</target>
</project>
And here's the results:
C:\TestAnt>ant -f TestBuildNumber.xml
Buildfile: TestBuildNumber.xml
main:
[echo] 1.0
BUILD SUCCESSFUL
Total time: 0 seconds
***I would have expected it to increment minor to get 1.1***
C:\TestAnt>ant -f TestBuildNumber.xml
Buildfile: TestBuildNumber.xml
main:
[echo] 1.1
BUILD SUCCESSFUL
Total time: 0 seconds
***That's what I would have expected***
C:\TestAnt>ant -f TestBuildNumber.xml
Buildfile: TestBuildNumber.xml
main:
[echo] 1.2
BUILD SUCCESSFUL
Total time: 0 seconds
***That's what I would have expected***
C:\TestAnt>ant -f TestBuildNumber.xml -Dmajor.increment=true
Buildfile: TestBuildNumber.xml
main:
[echo] 1.0
BUILD SUCCESSFUL
Total time: 0 seconds
***I would have expected 2.0***
C:\TestAnt>ant -f TestBuildNumber.xml -Dmajor.increment=true
Buildfile: TestBuildNumber.xml
main:
[echo] 2.0
BUILD SUCCESSFUL
Total time: 0 seconds
***That's what I would have expected***
C:\TestAnt>ant -f TestBuildNumber.xml -Dmajor.increment=true
Buildfile: TestBuildNumber.xml
main:
[echo] 3.0
BUILD SUCCESSFUL
Total time: 0 seconds
***That's what I would have expected***
C:\TestAnt>ant -f TestBuildNumber.xml
Buildfile: TestBuildNumber.xml
main:
[echo] 4.0
BUILD SUCCESSFUL
Total time: 0 seconds
***I would have expected it to go to 3.1***
C:\TestAnt>ant -f TestBuildNumber.xml
Buildfile: TestBuildNumber.xml
main:
[echo] 4.1
BUILD SUCCESSFUL
Total time: 0 seconds
***That's what I would have expected***
Can someone explain why it seems to skip the first run of <buildnumber/> and
then work every time afterward?
________________________________
From: Eric Fetzer <[email protected]>
To: Ant Users List <[email protected]>
Sent: Friday, May 1, 2009 10:24:18 AM
Subject: Re: Reset BuildNumber
Yeah, the macrodef was overkill, huh. How about:
<target name="main">
<if>
<equals arg1="${major.increment}" arg2="true"/>
<then>
<buildnumber file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<property file="minor.number"/>
<replace file="${minor.number}" token="build.number=${build.number}"
value="build.number=0"/>
<property file="minor.number"/>
</then>
<else>
<property file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<buildnumber file="minor.number"/>
</else>
</if>
<property name="full.buildnumber" value="${major.number}.${minor.number}"/>
</target>
________________________________
From: Eric Fetzer <[email protected]>
To: Ant Users List <[email protected]>
Sent: Friday, May 1, 2009 10:17:24 AM
Subject: Re: Reset BuildNumber
So, here's how I'd do it. Is there a better way?
<target name="main">
<if>
<equals arg1="${major.increment}" arg2="true"/>
<then>
<buildnumber file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<property file="minor.number"/>
<setPropertyInFile
var.filename="${minor.number}"
var.varname="${build.number}"
var.oldvalue="${build.number}"
var.newvalue="0"
/>
</then>
<else>
<property file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<buildnumber file="minor.number"/>
</else>
</if>
<property name="full.buildnumber" value="${major.number}.${minor.number}"/>
</target>
<macrodef name="setPropertyInFile">
<attribute name="var.filename"/>
<attribute name="var.varname"/>
<attribute name="var.oldvalue"/>
<attribute name="var.newvalue"/>
<sequential>
<replace file="@{var.filename}" token="@{var.varnam...@{var.oldvalue}"
value="@{var.varnam...@{var.newvalue}"/>
</sequential>
</macrodef>
________________________________
From: Eric Fetzer <[email protected]>
To: Ant Users <[email protected]>
Sent: Friday, May 1, 2009 9:31:50 AM
Subject: Reset BuildNumber
What is the prescribed method of setting properties in a property file?
Specifically, I'm speaking of a file that keeps track of one of the build
numbers. Here's a simple example with what I'd like to do in it:
<target name="main">
<if>
<equals arg1="${major.increment}" arg2="true"/>
<then>
<buildnumber file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<!--This would be great, but is my imagination, how would it really
work?-->
<buildnumber file="minor.number" reset="true"/>
<propertycopy name="minor.number" from="build.number"/>
</then>
<else>
<property file="major.number"/>
<propertycopy name="major.number" from="build.number"/>
<buildnumber file="minor.number"/>
<propertycopy name="minor.number" from="build.number"/>
</else>
</if>
<property name="full.buildnumber" value="${major.number}.${minor.number}"/>
</target>
Thanks,
Eric