Redirect gitiles url using Repo's branch redirect config when format type is default (not provided in gitiles url).
PiperOrigin-RevId: 355896835
Change-Id: Ia6d0bb48ba1f5b3ff7176de5b1c0dab0b662562d
diff --git a/java/com/google/gitiles/BranchRedirectFilter.java b/java/com/google/gitiles/BranchRedirectFilter.java
index 48ff35b..12dc2b4 100644
--- a/java/com/google/gitiles/BranchRedirectFilter.java
+++ b/java/com/google/gitiles/BranchRedirectFilter.java
@@ -107,6 +107,15 @@
}
private static boolean isForAutomation(HttpServletRequest req) {
- return !FormatType.getFormatType(req).orElse(HTML).equals(HTML);
+ FormatType formatType = FormatType.getFormatType(req).orElse(HTML);
+ switch (formatType) {
+ case HTML:
+ case DEFAULT:
+ return false;
+ case JSON:
+ case TEXT:
+ default:
+ return true;
+ }
}
}
diff --git a/javatests/com/google/gitiles/BranchRedirectFilterTest.java b/javatests/com/google/gitiles/BranchRedirectFilterTest.java
index c994038..fbf0ff4 100644
--- a/javatests/com/google/gitiles/BranchRedirectFilterTest.java
+++ b/javatests/com/google/gitiles/BranchRedirectFilterTest.java
@@ -19,8 +19,10 @@
import static javax.servlet.http.HttpServletResponse.SC_MOVED_TEMPORARILY;
import static javax.servlet.http.HttpServletResponse.SC_OK;
+import com.google.common.base.Strings;
import com.google.common.net.HttpHeaders;
import java.util.Optional;
+import javax.annotation.Nullable;
import org.eclipse.jgit.internal.storage.dfs.DfsRepository;
import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
@@ -94,6 +96,19 @@
}
@Test
+ public void show_withRedirect_onDefaultFormatType() throws Exception {
+ repo.branch(MASTER).commit().add("foo", "contents").create();
+
+ String path = "/repo/+/refs/heads/master/foo";
+ FakeHttpServletRequest req = newHttpRequest(path, ORIGIN, null);
+ FakeHttpServletResponse res = new FakeHttpServletResponse();
+
+ servlet.service(req, res);
+ assertThat(res.getStatus()).isEqualTo(SC_MOVED_PERMANENTLY);
+ assertThat(res.getHeader(HttpHeaders.LOCATION)).isEqualTo("/b/repo/+/refs/heads/main/foo");
+ }
+
+ @Test
public void show_onAutomationRequest() throws Exception {
repo.branch(MASTER).commit().add("foo", "contents").create();
@@ -235,11 +250,13 @@
}
private static FakeHttpServletRequest newHttpRequest(
- String path, String origin, String queryString) {
+ String path, String origin, @Nullable String queryString) {
FakeHttpServletRequest req = FakeHttpServletRequest.newRequest();
req.setHeader(HttpHeaders.ORIGIN, origin);
req.setPathInfo(path);
- req.setQueryString(queryString);
+ if (!Strings.isNullOrEmpty(queryString)) {
+ req.setQueryString(queryString);
+ }
return req;
}
}