From aa6d43e8b28ff73d69a920e9b3a7b284cfce00c3 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 29 Nov 2013 11:05:51 -0500
Subject: [PATCH] Extract SessionManager from GitBlit singleton

---
 src/main/java/com/gitblit/DownloadZipServlet.java |   52 +++++++++++++++++++++++++++++++++-------------------
 1 files changed, 33 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/gitblit/DownloadZipServlet.java b/src/main/java/com/gitblit/DownloadZipServlet.java
index 8a4a710..d629dcf 100644
--- a/src/main/java/com/gitblit/DownloadZipServlet.java
+++ b/src/main/java/com/gitblit/DownloadZipServlet.java
@@ -16,11 +16,12 @@
 package com.gitblit;
 
 import java.io.IOException;
-import java.net.SocketException;
 import java.text.MessageFormat;
 import java.text.ParseException;
 import java.util.Date;
 
+import javax.inject.Inject;
+import javax.inject.Singleton;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletResponse;
@@ -30,6 +31,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.gitblit.manager.IRepositoryManager;
+import com.gitblit.manager.IRuntimeManager;
 import com.gitblit.utils.CompressionUtils;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.MarkdownUtils;
@@ -38,25 +41,30 @@
 /**
  * Streams out a zip file from the specified repository for any tree path at any
  * revision.
- * 
+ *
  * @author James Moger
- * 
+ *
  */
+@Singleton
 public class DownloadZipServlet extends HttpServlet {
 
 	private static final long serialVersionUID = 1L;
 
 	private transient Logger logger = LoggerFactory.getLogger(DownloadZipServlet.class);
-	
+
+	private final IStoredSettings settings;
+
+	private final IRepositoryManager repositoryManager;
+
 	public static enum Format {
 		zip(".zip"), tar(".tar"), gz(".tar.gz"), xz(".tar.xz"), bzip2(".tar.bzip2");
-		
+
 		public final String extension;
-		
+
 		Format(String ext) {
 			this.extension = ext;
 		}
-		
+
 		public static Format fromName(String name) {
 			for (Format format : values()) {
 				if (format.name().equalsIgnoreCase(name)) {
@@ -67,13 +75,19 @@
 		}
 	}
 
-	public DownloadZipServlet() {
+	@Inject
+	public DownloadZipServlet(
+			IRuntimeManager runtimeManager,
+			IRepositoryManager repositoryManager) {
+
 		super();
+		this.settings = runtimeManager.getSettings();
+		this.repositoryManager = repositoryManager;
 	}
 
 	/**
 	 * Returns an url to this servlet for the specified parameters.
-	 * 
+	 *
 	 * @param baseURL
 	 * @param repository
 	 * @param objectId
@@ -93,7 +107,7 @@
 
 	/**
 	 * Creates a zip stream from the repository of the requested data.
-	 * 
+	 *
 	 * @param request
 	 * @param response
 	 * @throws javax.servlet.ServletException
@@ -102,12 +116,12 @@
 	private void processRequest(javax.servlet.http.HttpServletRequest request,
 			javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException,
 			java.io.IOException {
-		if (!GitBlit.getBoolean(Keys.web.allowZipDownloads, true)) {
+		if (!settings.getBoolean(Keys.web.allowZipDownloads, true)) {
 			logger.warn("Zip downloads are disabled");
 			response.sendError(HttpServletResponse.SC_FORBIDDEN);
 			return;
 		}
-		
+
 		Format format = Format.zip;
 		String repository = request.getParameter("r");
 		String basePath = request.getParameter("p");
@@ -116,7 +130,7 @@
 		if (!StringUtils.isEmpty(f)) {
 			format = Format.fromName(f);
 		}
-		
+
 		try {
 			String name = repository;
 			if (name.indexOf('/') > -1) {
@@ -130,10 +144,10 @@
 			if (!StringUtils.isEmpty(objectId)) {
 				name += "-" + objectId;
 			}
-						
-			Repository r = GitBlit.self().getRepository(repository);
+
+			Repository r = repositoryManager.getRepository(repository);
 			if (r == null) {
-				if (GitBlit.self().isCollectingGarbage(repository)) {
+				if (repositoryManager.isCollectingGarbage(repository)) {
 					error(response, MessageFormat.format("# Error\nGitblit is busy collecting garbage in {0}", repository));
 					return;
 				} else {
@@ -175,14 +189,14 @@
 					CompressionUtils.bzip2(r, basePath, objectId, response.getOutputStream());
 					break;
 				}
-				
+
 				response.flushBuffer();
-			} catch (SocketException t) {
+			} catch (IOException t) {
 				String message = t.getMessage() == null ? "" : t.getMessage().toLowerCase();
 				if (message.contains("reset") || message.contains("broken pipe")) {
 					logger.error("Client aborted zip download: " + message);
 				} else {
-					logger.error("Failed to write attachment to client", t);	
+					logger.error("Failed to write attachment to client", t);
 				}
 			} catch (Throwable t) {
 				logger.error("Failed to write attachment to client", t);

--
Gitblit v1.9.1