Accept first-parent parameter in LogServlet The parameter "first-parent" is now accepted for +log. Providing first-parent will result in +log returning commits from walking only along first-parents when merge commits are encountered. first-parent can be provided with the other currently supported parameters, topo-order and reverse. Signed-off-by: Alex Spradlin <[email protected]> Change-Id: Ie9b8ed3c4ac9cbb4f192615048861b58b17b655b
diff --git a/java/com/google/gitiles/LogServlet.java b/java/com/google/gitiles/LogServlet.java index 4d038ae..c738f0e 100644 --- a/java/com/google/gitiles/LogServlet.java +++ b/java/com/google/gitiles/LogServlet.java
@@ -71,6 +71,9 @@ private static final String FOLLOW_PARAM = "follow"; private static final String NAME_STATUS_PARAM = "name-status"; private static final String PRETTY_PARAM = "pretty"; + private static final String TOPO_ORDER_PARAM = "topo-order"; + private static final String REVERSE_PARAM = "reverse"; + private static final String FIRST_PARENT_PARAM = "first-parent"; private static final int DEFAULT_LIMIT = 100; private static final int MAX_LIMIT = 10000; @@ -223,6 +226,15 @@ private static RevWalk newWalk(Repository repo, GitilesView view, GitilesAccess access) throws MissingObjectException, IOException { RevWalk walk = new RevWalk(repo); + if (isTrue(view, FIRST_PARENT_PARAM)) { + walk.setFirstParent(true); + } + if (isTrue(view, TOPO_ORDER_PARAM)) { + walk.sort(RevSort.TOPO, true); + } + if (isTrue(view, REVERSE_PARAM)) { + walk.sort(RevSort.REVERSE, true); + } try { walk.markStart(walk.parseCommit(view.getRevision().getId())); if (!Revision.isNull(view.getOldRevision())) { @@ -233,12 +245,6 @@ } setTreeFilter(walk, view, access); setRevFilter(walk, view); - if (isTrue(view, "topo-order")) { - walk.sort(RevSort.TOPO, true); - } - if (isTrue(view, "reverse")) { - walk.sort(RevSort.REVERSE, true); - } return walk; }
diff --git a/javatests/com/google/gitiles/LogServletTest.java b/javatests/com/google/gitiles/LogServletTest.java index 06ddaf4..7232439 100644 --- a/javatests/com/google/gitiles/LogServletTest.java +++ b/javatests/com/google/gitiles/LogServletTest.java
@@ -67,6 +67,19 @@ } @Test + public void firstParentLog() throws Exception { + RevCommit p1 = repo.update("master", repo.commit().add("foo", "foo\n")); + RevCommit p2 = repo.update("master", repo.commit().add("foo", "foo2\n")); + RevCommit c = repo.update("master", repo.commit().parent(p1).parent(p2).add("foo", "foo3\n")); + + Log response = buildJson(LOG, "/repo/+log/master", "first-parent"); + assertThat(response.log).hasSize(2); + + verifyJsonCommit(response.log.get(0), c); + verifyJsonCommit(response.log.get(1), p1); + } + + @Test public void follow() throws Exception { String contents = "contents"; RevCommit c1 = repo.branch("master").commit().add("foo", contents).create();