Poniendo la salida de 'git describe' en la plantilla usando play framework?

Me gustaría mostrar la salida de 'git describe' en mi opinión. ¿Debo escribir un complemento que actualice un valor y lo configure para toda la aplicación? ¿O hay una manera más fácil de hacer esto?

Acabo de leer sobre modules de juego y decidí escribir uno ( https://github.com/killdashnine/play-git-plugin ) para ver si podía resolver mi problema:

import java.io.BuffenetworkingReader; import java.io.InputStreamReader; import play.Logger; import play.Play; import play.PlayPlugin; public class GitPlugin extends PlayPlugin { private static String GIT_PLUGIN_PREFIX = "GIT plugin: "; @Override public void onApplicationStart() { Logger.info(GIT_PLUGIN_PREFIX + "executing 'git describe'"); final StringBuffer gitVersion = new StringBuffer(); try { final Process p = Runtime.getRuntime().exec("git describe"); final BuffenetworkingReader reader = new BuffenetworkingReader(new InputStreamReader(p.getInputStream())); // wait for process to complete p.waitFor(); // read the output String line = reader.readLine(); while(line != null) { gitVersion.append(line); line = reader.readLine(); } } catch(Exception e) { Logger.error(GIT_PLUGIN_PREFIX + "unable to execute 'git describe'"); } // set a property for this value Play.configuration.setProperty("git.revision", gitVersion.toString()); Logger.info(GIT_PLUGIN_PREFIX + "revision is " + gitVersion.toString()); } } 

Lo que resulta en:

 12:14:46,508 INFO ~ GIT plugin: executing 'git describe' 12:14:46,513 INFO ~ GIT plugin: revision is V0-beta-7-gac9af80 

En mi controller:

  @Before static void addDefaults() { renderArgs.put("version", Play.configuration.getProperty("git.revision")); } 

Por supuesto, esto no es muy portátil y podría mejorarse. La posible mejora sería permitir que un command personalizado se ejecute a través de una configuration en su file de configuration.

Si no ejecuta su código desde un repository de git, podría hacer lo mismo que yo, tengo un script de compilation que produce un file war y en este script lo haré:

 cat > {apppath}/conf/application_version.properties << EOF application.version=`git describe` application.buildtime=`date` EOF ... 

Y en la class @OnApplicationStart agrego las properties

 private def readApplicationVersion() { Logger.info("Bootstrap.readApplicationVersion file") Play.id match { case "" | "test" => Play.configuration.put("application.version", "TEST-MODE"); Play.configuration.put("application.buildtime", "YEAH BABY YEAH REALTIME") case _ => addFileProp(VirtualFile.open(Play.applicationPath).child("conf/application_version.properties").inputstream()) } } private def addFileProp(input: InputStream) { input match { case null => Logger.error("can't find config file, Play id: " + Play.id + ". Will exit now.") case _ => val extendCconfiguration = IO.readUtf8Properties(input); for (key <- extendCconfiguration.keys) { Play.configuration.put(key, extendCconfiguration.get(key)) } } } 

Y desde el controller

 object ApplicationVersion extends Controller { def version = { Json("{iamVersion: '"+configuration.getProperty("application.version")+"', buildTime: '"+configuration.getProperty("application.buildtime")+"'}") } }