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 .
The long string following the word commit is called the commit hash.
git log -n 1 [branch_name] branch_name(may be remote or local branch) is optional. Without branch_name it will show the latest commit of current branch.
Hashes are what enable Git to share data efficiently between repositories. If two files are the same, their hashes are guaranteed to be the same. Similarly, if two commits contain the same files and have the same ancestors, their hashes will be the same as well.
A commit in git always has a hash that contains 40 characters. But to make the id:s easier to handle it also supports using a short version of the id. The short commit id can actually be any number of characters as long as it's unique for a commit within the same repo.
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>
This command returns always the working folder's last commit SHA1, useful when you don't always build from HEAD. The command should run both on Windows and *nix systems
<exec executable="git" outputproperty="git.revision"> <arg value="log" /> <arg value="-1" /> <arg value="--pretty=format:%H" /> </exec>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With