LogServlet: Default to follow=1 Although not the default in `git log`, there is a significant usability improvement to defaulting to follow, particularly because we don't expose a link in the UI to turn this on. There might still be performance concerns with this default, so allow it to be configured in gitiles.config, using the same log.follow option as in core Git. Change-Id: I43fe926e0a22bf2f7e48cc5ab0194eb14d82fdd6
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java index bcc09eb..ae6219f 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/LogServlet.java
@@ -256,11 +256,16 @@ } walk.setRewriteParents(false); String path = view.getPathPart(); - if (isTrue(Iterables.getFirst(view.getParameters().get(FOLLOW_PARAM), null))) { + + List<String> followParams = view.getParameters().get(FOLLOW_PARAM); + boolean follow = !followParams.isEmpty() + ? isTrue(followParams.get(0)) + : access.getConfig().getBoolean("log", null, "follow", true); + if (follow) { walk.setTreeFilter(FollowFilter.create(path, access.getConfig().get(DiffConfig.KEY))); } else { walk.setTreeFilter(AndTreeFilter.create( - PathFilterGroup.createFromStrings(view.getPathPart()), + PathFilterGroup.createFromStrings(path), TreeFilter.ANY_DIFF)); } }
diff --git a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java index 56f1c29..2eadf54 100644 --- a/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java +++ b/gitiles-servlet/src/test/java/com/google/gitiles/LogServletTest.java
@@ -83,11 +83,11 @@ repo.getRevWalk().parseBody(c1); repo.getRevWalk().parseBody(c2); - Log response = buildJson(LOG, "/repo/+log/master/bar"); + Log response = buildJson(LOG, "/repo/+log/master/bar", "follow=0"); assertThat(response.log).hasSize(1); verifyJsonCommit(response.log.get(0), c2); - response = buildJson(LOG, "/repo/+log/master/bar", "follow=1"); + response = buildJson(LOG, "/repo/+log/master/bar"); assertThat(response.log).hasSize(2); verifyJsonCommit(response.log.get(0), c2); verifyJsonCommit(response.log.get(1), c1);