Selaa lähdekoodia

Refine branch and pages servlets

tags/v1.6.0
James Moger 10 vuotta sitten
vanhempi
commit
1946fe7633

+ 52
- 15
src/main/java/com/gitblit/servlet/BranchServlet.java Näytä tiedosto

@@ -47,8 +47,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.gitblit.Constants;
import com.gitblit.Keys;
import com.gitblit.dagger.DaggerServlet;
import com.gitblit.manager.IRepositoryManager;
import com.gitblit.manager.IRuntimeManager;
import com.gitblit.models.PathModel;
import com.gitblit.utils.ByteFormat;
import com.gitblit.utils.JGitUtils;
@@ -69,10 +71,13 @@ public class BranchServlet extends DaggerServlet {

private transient Logger logger = LoggerFactory.getLogger(BranchServlet.class);

private IRuntimeManager runtimeManager;

private IRepositoryManager repositoryManager;

@Override
protected void inject(ObjectGraph dagger) {
this.runtimeManager = dagger.get(IRuntimeManager.class);
this.repositoryManager = dagger.get(IRepositoryManager.class);
}

@@ -89,7 +94,12 @@ public class BranchServlet extends DaggerServlet {
if (baseURL.length() > 0 && baseURL.charAt(baseURL.length() - 1) == '/') {
baseURL = baseURL.substring(0, baseURL.length() - 1);
}
return baseURL + Constants.BRANCH + repository + "/" + (branch == null ? "" : (branch + "/" + (path == null ? "" : (path + "/"))));
String encodedPath = path.replace(' ', '-');
try {
encodedPath = URLEncoder.encode(encodedPath, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
return baseURL + Constants.BRANCH + repository + "/" + (branch == null ? "" : (branch + "/" + (path == null ? "" : (encodedPath + "/"))));
}

protected String getBranch(String repository, HttpServletRequest request) {
@@ -210,9 +220,8 @@ public class BranchServlet extends DaggerServlet {
List<PathModel> pathEntries = JGitUtils.getFilesInPath(r, requestedPath, commit);
if (pathEntries.isEmpty()) {
// requested a specific resource
String file = StringUtils.getLastPathElement(requestedPath);
try {
String file = StringUtils.getLastPathElement(requestedPath);

// query Tika for the content type
Tika tika = new Tika();
String contentType = tika.detect(file);
@@ -226,16 +235,20 @@ public class BranchServlet extends DaggerServlet {
contentType = "application/octet-stream";
}
}
response.setContentType(contentType);

setContentType(response, contentType);

if (isTextType(contentType)) {

if (contentType.startsWith("text/")
|| "application/json".equals(contentType)
|| "application/xml".equals(contentType)) {
// load, interpret, and serve text content as UTF-8
String [] encodings = runtimeManager.getSettings().getStrings(Keys.web.blobEncodings).toArray(new String[0]);
String content = JGitUtils.getStringContent(r, commit.getTree(), requestedPath, encodings);

byte [] bytes = content.getBytes(Constants.ENCODING);
response.setContentLength(bytes.length);
ByteArrayInputStream is = new ByteArrayInputStream(bytes);
sendContent(response, JGitUtils.getCommitDate(commit), is);

// serve text content
String encoding = commit.getEncoding().name();
response.setCharacterEncoding(encoding);
} else {
// serve binary content
String filename = StringUtils.getLastPathElement(requestedPath);
@@ -255,10 +268,10 @@ public class BranchServlet extends DaggerServlet {
catch (UnsupportedEncodingException e) {
response.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
}
}

// send content
streamFromRepo(response, r, commit, requestedPath);
// stream binary content directly from the repository
streamFromRepo(response, r, commit, requestedPath);
}
return;
} catch (Exception e) {
logger.error(null, e);
@@ -293,8 +306,8 @@ public class BranchServlet extends DaggerServlet {
fullPath = requestedPath + "/" + fileName;
}

String encoding = commit.getEncoding().name();
String stringContent = JGitUtils.getStringContent(r, commit.getTree(), fullPath, encoding);
String [] encodings = runtimeManager.getSettings().getStrings(Keys.web.blobEncodings).toArray(new String[0]);
String stringContent = JGitUtils.getStringContent(r, commit.getTree(), fullPath, encodings);
if (stringContent == null) {
continue;
}
@@ -306,6 +319,7 @@ public class BranchServlet extends DaggerServlet {

response.setContentType("text/html; charset=" + Constants.ENCODING);
byte [] bytes = content.getBytes(Constants.ENCODING);
response.setContentLength(bytes.length);

ByteArrayInputStream is = new ByteArrayInputStream(bytes);
sendContent(response, JGitUtils.getCommitDate(commit), is);
@@ -371,6 +385,29 @@ public class BranchServlet extends DaggerServlet {
}
}

protected boolean isTextType(String contentType) {
if (contentType.startsWith("text/")
|| "application/json".equals(contentType)
|| "application/xml".equals(contentType)) {
return true;
}
return false;
}

/**
* Override all text types to be plain text.
*
* @param response
* @param contentType
*/
protected void setContentType(HttpServletResponse response, String contentType) {
if (isTextType(contentType)) {
response.setContentType("text/plain");
} else {
response.setContentType(contentType);
}
}

private void streamFromRepo(HttpServletResponse response, Repository repository,
RevCommit commit, String requestedPath) throws IOException {


+ 6
- 0
src/main/java/com/gitblit/servlet/PagesServlet.java Näytä tiedosto

@@ -16,6 +16,7 @@
package com.gitblit.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.gitblit.Constants;
@@ -67,4 +68,9 @@ public class PagesServlet extends BranchServlet {
protected boolean renderIndex() {
return true;
}
@Override
protected void setContentType(HttpServletResponse response, String contentType) {
response.setContentType(contentType);;
}
}

Loading…
Peruuta
Tallenna