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