From 13a3f5bc3e2d25fc76850f86070dc34efe60d77a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 07 Sep 2012 22:06:15 -0400
Subject: [PATCH] Draft project pages, project metadata, and RSS feeds

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