Поместить вывод 'git description' в шаблон, используя игровую среду? - PullRequest
4 голосов
/ 17 марта 2011

Я хотел бы показать вывод 'git description' на мой взгляд.Нужно ли мне писать плагин, который обновляет значение и устанавливает его для всего приложения?Или есть более простой способ сделать это?

Ответы [ 2 ]

3 голосов
/ 17 марта 2011

Я только что прочитал о игровых модулях и решил написать один (https://github.com/killdashnine/play-git-plugin), чтобы посмотреть, смогу ли я решить мою проблему:

import java.io.BufferedReader;
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 BufferedReader reader = new BufferedReader(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());
        }
}

Что приводит к:

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

В моем контроллере:

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

Конечно, это не очень переносимо и может быть улучшено. Возможное улучшение будет заключаться в том, чтобы разрешить выполнение пользовательской команды через настройки в вашем файле конфигурации.

1 голос
/ 17 ноября 2011

Если вы не запускаете свой код из git-репо, вы можете делать это как я, у меня есть скрипт сборки, который создает файл войны, и в этом скрипте я сделаю:

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

И в классе @OnApplicationStart я добавляю свойства

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))
        }
    }
}

А из контроллера

object ApplicationVersion extends Controller {
    def version = {
        Json("{iamVersion: '"+configuration.getProperty("application.version")+"', buildTime: '"+configuration.getProperty("application.buildtime")+"'}")
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...