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