¿Cómo puedo get la última identificación de confirmación de la twig actualmente desprotegida en git, usando ANT, sin tener una installation de git activa?

He utilizado los siguientes detalles de la ant para recuperar la última identificación de confirmación de la twig desprotegida, ¿qué advertencias debo preocuparme por usar este método?

¿Hay casos extremos en los que no recuperaría los valores esperados?

<scriptdef name="substring" language="javascript"> <attribute name="text" /> <attribute name="start" /> <attribute name="end" /> <attribute name="property" /> <![CDATA[ var text = attributes.get("text"); var start = attributes.get("start"); var end = attributes.get("end") || (text.length() - 1); project.setProperty(attributes.get("property"), text.substring(start, end)); ]]> </scriptdef> <loadfile property="head.branch" srcfile="${basedir}/.git/HEAD" /> <substring text="${head.branch}" start="5" property="branch" /> <loadfile property="head.commitId" srcfile="${basedir}/.git/${branch}"/> 

puedes leer los contenidos de .git/HEAD , luego leer el contenido del file que obtienes de eso.

La advertencia con la que te encontrarás es que el SHA-1 que obtienes de los pasos anteriores puede estar en un file pack (la forma en que git comprime varios cambios para ahorrar espacio). Yo recomendaría usar git en lugar de tratar de manipular el contenido de la carpeta .git usted mismo.

JGIT se puede utilizar para proporcionar un cliente de git dentro de su compilation

Ejemplo

 $ ant clone print-latest-commit-id .. .. clone-repo: [git-clone] Cloning repository https://github.com/myproj/myrepo.git resolve: get-commit-id: print-commit-id: [echo] head.commitId = 9e3e8358f2b31507b13f5def69627da422e1656b 

build.xml

 <project name="build" default="clone" xmlns:ivy="antlib:org.apache.ivy.ant"> <target name="resolve" description="Resolve 3rd party dependencies"> <ivy:cachepath pathid="build.path"> <dependency org="org.codehaus.groovy" name="groovy-all" rev="2.1.0-rc-2" conf="default"/> <dependency org="org.eclipse.jgit" name="org.eclipse.jgit.ant" rev="2.1.0.201209190230-r" conf="default"/> <exclude org="org.apache.ant"/> </ivy:cachepath> </target> <target name="clone-repo" depends="resolve" description="Pull code from SCM repository"> <taskdef resource="org/eclipse/jgit/ant/ant-tasks.properties" classpathref="build.path"/> <git-clone uri="https://github.com/myproj/myrepo.git" dest="build/repo" branch="???"/> </target> <target name="get-commit-id" depends="resolve" description="Print git log"> <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/> <groovy> import org.eclipse.jgit.api.Git Git git = Git.open(new File("build/repo")) properties["head.commitId"] = git.log().call().first().name() </groovy> </target> <target name="print-commit-id" depends="get-commit-id" description="Print commit id"> <echo message="head.commitId = ${head.commitId}"/> </target> <target name="clean" description="Cleanup build files"> <delete dir="build"/> </target> </project> 

NOTA:

  • La hiedra Apache se usa para administrar tarros de terceros
  • Prefiero usar Groovy para scripts embeddeds