gitant

How to lookup the latest git commit hash from an ant build script


How can I lookup the latest git commit hash from an ant build script?

I am currently working on a new open source project which I store on github. I would like to extend my existing ANT build file to allow me to create numbered builds. I am imagining that I would launch the build with something like "ant buildnum -Dnum=12".

I would like the resulting jar to have two crucial bits of information in it's manifest file:

I know how to create the build.number line. However, I am unsure of the best ant plumbing to lookup the latest git commit hash which is the value I want to fill in for .


Solution

  • I wrote the following ant target for a project on github. Usage:


    <available file=".git" type="dir" property="git.present"/>
    
    <target name="git.revision" description="Store git revision in ${repository.version}" if="git.present">
        <exec executable="git" outputproperty="git.revision" failifexecutionfails="false" errorproperty="">
            <arg value="describe"/>
            <arg value="--tags"/>
            <arg value="--always"/>
            <arg value="HEAD"/>
        </exec>
        <condition property="repository.version" value="${git.revision}" else="unknown">
            <and>
                <isset property="git.revision"/>
                <length string="${git.revision}" trim="yes" length="0" when="greater"/>
            </and>
        </condition>
    </target>
    

    It e.g. be used for expanding the token @repository.version@ in a template file:

    <target name="index.html" depends="git.revision" description="build index.html from template">
        <copy file="index.html.template" tofile="index.html" overwrite="yes">
            <filterchain>
                <replacetokens>
                    <token key="repository.version" value="${repository.version}" />
                </replacetokens>
            </filterchain>
        </copy>
    </target>