From 6cc1d4cf3605719af3f9a37ee09cb02519be3571 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 19 Dec 2011 17:58:43 -0500 Subject: [PATCH] Server-side hook script selection. Documentation. --- src/com/gitblit/GitServlet.java | 26 ++++++++++++++++++++------ 1 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/com/gitblit/GitServlet.java b/src/com/gitblit/GitServlet.java index b2ee1c7..23fb32a 100644 --- a/src/com/gitblit/GitServlet.java +++ b/src/com/gitblit/GitServlet.java @@ -26,7 +26,8 @@ import java.io.OutputStreamWriter; import java.text.MessageFormat; import java.util.Collection; -import java.util.List; +import java.util.LinkedHashSet; +import java.util.Set; import javax.servlet.ServletConfig; import javax.servlet.ServletException; @@ -68,6 +69,8 @@ private GroovyScriptEngine gse; + private File groovyDir; + /** * Configure the servlet from Gitblit's configuration. */ @@ -83,9 +86,9 @@ @Override public void init(ServletConfig config) throws ServletException { - String groovyRoot = GitBlit.getString(Keys.groovy.scriptsFolder, "groovy"); + groovyDir = GitBlit.getGroovyScriptsFolder(); try { - gse = new GroovyScriptEngine(groovyRoot); + gse = new GroovyScriptEngine(groovyDir.getAbsolutePath()); } catch (IOException e) { throw new ServletException("Failed to instantiate Groovy Script Engine!", e); } @@ -127,7 +130,8 @@ */ @Override public void onPreReceive(ReceivePack rp, Collection<ReceiveCommand> commands) { - List<String> scripts = GitBlit.getStrings(Keys.groovy.preReceiveScripts); + Set<String> scripts = new LinkedHashSet<String>(); + scripts.addAll(GitBlit.getStrings(Keys.groovy.preReceiveScripts)); RepositoryModel repository = getRepositoryModel(rp); scripts.addAll(repository.preReceiveScripts); UserModel user = getUserModel(rp); @@ -154,7 +158,8 @@ logger.info("skipping post-receive hooks, no refs created, updated, or removed"); return; } - List<String> scripts = GitBlit.getStrings(Keys.groovy.postReceiveScripts); + Set<String> scripts = new LinkedHashSet<String>(); + scripts.addAll(GitBlit.getStrings(Keys.groovy.postReceiveScripts)); RepositoryModel repository = getRepositoryModel(rp); scripts.addAll(repository.postReceiveScripts); UserModel user = getUserModel(rp); @@ -204,7 +209,7 @@ * @param scripts */ protected void runGroovy(RepositoryModel repository, UserModel user, - Collection<ReceiveCommand> commands, List<String> scripts) { + Collection<ReceiveCommand> commands, Set<String> scripts) { if (scripts == null || scripts.size() == 0) { // no Groovy scripts to execute return; @@ -221,6 +226,15 @@ if (StringUtils.isEmpty(script)) { continue; } + // allow script to be specified without .groovy extension + // this is easier to read in the settings + File file = new File(groovyDir, script); + if (!file.exists() && !script.toLowerCase().endsWith(".groovy")) { + file = new File(groovyDir, script + ".groovy"); + if (file.exists()) { + script = file.getName(); + } + } try { Object result = gse.run(script, binding); if (result instanceof Boolean) { -- Gitblit v1.9.1