diff options
author | James Moger <james.moger@gitblit.com> | 2011-12-19 17:58:43 -0500 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2011-12-19 17:58:43 -0500 |
commit | 6cc1d4cf3605719af3f9a37ee09cb02519be3571 (patch) | |
tree | 297ba0d726a080985e8122301d12ee1fe244039d /src/com/gitblit/GitServlet.java | |
parent | a50c4afdde37845b94b3545029ed9aac5796fdf7 (diff) | |
download | gitblit-6cc1d4cf3605719af3f9a37ee09cb02519be3571.tar.gz gitblit-6cc1d4cf3605719af3f9a37ee09cb02519be3571.zip |
Server-side hook script selection. Documentation.
Diffstat (limited to 'src/com/gitblit/GitServlet.java')
-rw-r--r-- | 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 b2ee1c79..23fb32a6 100644 --- a/src/com/gitblit/GitServlet.java +++ b/src/com/gitblit/GitServlet.java @@ -26,7 +26,8 @@ import java.io.InputStreamReader; 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 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { private GroovyScriptEngine gse;
+ private File groovyDir;
+
/**
* Configure the servlet from Gitblit's configuration.
*/
@@ -83,9 +86,9 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { @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 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { */
@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 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { 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 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { * @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 @@ public class GitServlet extends org.eclipse.jgit.http.server.GitServlet { 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) {
|