From 4bcaea2e40ab1ee192888f7d29c334a2a3cd3699 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 17 Aug 2012 15:49:44 -0400
Subject: [PATCH] Fix performance logging null pointer on anonymous repository browsing
---
src/com/gitblit/GitServlet.java | 46 ++++++++++++++++++++++++----------------------
1 files changed, 24 insertions(+), 22 deletions(-)
diff --git a/src/com/gitblit/GitServlet.java b/src/com/gitblit/GitServlet.java
index 3b60e9f..d81703d 100644
--- a/src/com/gitblit/GitServlet.java
+++ b/src/com/gitblit/GitServlet.java
@@ -50,6 +50,7 @@
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
+import com.gitblit.utils.ClientLogger;
import com.gitblit.utils.HttpUtils;
import com.gitblit.utils.StringUtils;
@@ -77,7 +78,12 @@
public void init(ServletConfig config) throws ServletException {
groovyDir = GitBlit.getGroovyScriptsFolder();
try {
- gse = new GroovyScriptEngine(groovyDir.getAbsolutePath());
+ // set Grape root
+ File grapeRoot = new File(GitBlit.getString(Keys.groovy.grapeFolder, "groovy/grape")).getAbsoluteFile();
+ grapeRoot.mkdirs();
+ System.setProperty("grape.root", grapeRoot.getAbsolutePath());
+
+ gse = new GroovyScriptEngine(groovyDir.getAbsolutePath());
} catch (IOException e) {
throw new ServletException("Failed to instantiate Groovy Script Engine!", e);
}
@@ -87,9 +93,16 @@
@Override
public ReceivePack create(HttpServletRequest req, Repository db)
throws ServiceNotEnabledException, ServiceNotAuthorizedException {
- ReceivePack rp = super.create(req, db);
+
+ // determine repository name from request
+ String repositoryName = req.getPathInfo().substring(1);
+ repositoryName = GitFilter.getRepositoryName(repositoryName);
+
GitblitReceiveHook hook = new GitblitReceiveHook();
+ hook.repositoryName = repositoryName;
hook.gitblitUrl = HttpUtils.getGitblitURL(req);
+
+ ReceivePack rp = super.create(req, db);
rp.setPreReceiveHook(hook);
rp.setPostReceiveHook(hook);
return rp;
@@ -151,6 +164,8 @@
protected final Logger logger = LoggerFactory.getLogger(GitblitReceiveHook.class);
+ protected String repositoryName;
+
protected String gitblitUrl;
/**
@@ -160,12 +175,12 @@
*/
@Override
public void onPreReceive(ReceivePack rp, Collection<ReceiveCommand> commands) {
- RepositoryModel repository = getRepositoryModel(rp);
+ RepositoryModel repository = GitBlit.self().getRepositoryModel(repositoryName);
Set<String> scripts = new LinkedHashSet<String>();
scripts.addAll(GitBlit.self().getPreReceiveScriptsInherited(repository));
scripts.addAll(repository.preReceiveScripts);
UserModel user = getUserModel(rp);
- runGroovy(repository, user, commands, scripts);
+ runGroovy(repository, user, commands, rp, scripts);
for (ReceiveCommand cmd : commands) {
if (!Result.NOT_ATTEMPTED.equals(cmd.getResult())) {
logger.warn(MessageFormat.format("{0} {1} because \"{2}\"", cmd.getNewId()
@@ -188,30 +203,15 @@
logger.info("skipping post-receive hooks, no refs created, updated, or removed");
return;
}
- RepositoryModel repository = getRepositoryModel(rp);
+ RepositoryModel repository = GitBlit.self().getRepositoryModel(repositoryName);
Set<String> scripts = new LinkedHashSet<String>();
scripts.addAll(GitBlit.self().getPostReceiveScriptsInherited(repository));
scripts.addAll(repository.postReceiveScripts);
UserModel user = getUserModel(rp);
- runGroovy(repository, user, commands, scripts);
+ runGroovy(repository, user, commands, rp, scripts);
// Experimental
// runNativeScript(rp, "hooks/post-receive", commands);
- }
-
- /**
- * Returns the RepositoryModel for the repository we are pushing into.
- *
- * @param rp
- * @return a RepositoryModel
- */
- protected RepositoryModel getRepositoryModel(ReceivePack rp) {
- Repository repository = rp.getRepository();
- String rootPath = GitBlit.getRepositoriesFolder().getAbsolutePath();
- String repositoryName = StringUtils.getRelativePath(rootPath, repository.getDirectory()
- .getAbsolutePath());
- RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName);
- return model;
}
/**
@@ -226,6 +226,7 @@
if (user == null) {
// anonymous push, create a temporary usermodel
user = new UserModel(person.getName());
+ user.isAuthenticated = false;
}
return user;
}
@@ -239,7 +240,7 @@
* @param scripts
*/
protected void runGroovy(RepositoryModel repository, UserModel user,
- Collection<ReceiveCommand> commands, Set<String> scripts) {
+ Collection<ReceiveCommand> commands, ReceivePack rp, Set<String> scripts) {
if (scripts == null || scripts.size() == 0) {
// no Groovy scripts to execute
return;
@@ -252,6 +253,7 @@
binding.setVariable("commands", commands);
binding.setVariable("url", gitblitUrl);
binding.setVariable("logger", logger);
+ binding.setVariable("clientLogger", new ClientLogger(rp));
for (String script : scripts) {
if (StringUtils.isEmpty(script)) {
continue;
--
Gitblit v1.9.1