In ViewFilter, if a revision cannot be found then throw an exception instead of returning null. Change-Id: I9c00409c67688d319f6c440afa4ad73fb5ecb7a9
diff --git a/java/com/google/gitiles/ViewFilter.java b/java/com/google/gitiles/ViewFilter.java index 6f124e5..e3bb71f 100644 --- a/java/com/google/gitiles/ViewFilter.java +++ b/java/com/google/gitiles/ViewFilter.java
@@ -194,7 +194,7 @@ return null; } RevisionParser.Result result = parseRevision(req, path); - if (result == null || result.getOldRevision() != null) { + if (result.getOldRevision() != null) { return null; } return GitilesView.archive() @@ -212,9 +212,6 @@ return null; } RevisionParser.Result result = parseRevision(req, path); - if (result == null) { - return null; - } if (result.getOldRevision() != null) { return parseDiffCommand(repoName, result); } @@ -234,7 +231,7 @@ return null; } RevisionParser.Result result = parseRevision(req, path); - if (result == null || result.getOldRevision() != null || result.getPath().isEmpty()) { + if (result.getOldRevision() != null || result.getPath().isEmpty()) { return null; } return GitilesView.blame() @@ -257,9 +254,6 @@ private @Nullable GitilesView.Builder parseDiffCommand( String repoName, RevisionParser.Result result) { - if (result == null) { - return null; - } return GitilesView.diff() .setRepositoryName(repoName) .setRevision(result.getRevision()) @@ -273,9 +267,6 @@ return GitilesView.log().setRepositoryName(repoName); } RevisionParser.Result result = parseRevision(req, path); - if (result == null) { - return null; - } return GitilesView.log() .setRepositoryName(repoName) .setRevision(result.getRevision()) @@ -294,7 +285,7 @@ private @Nullable GitilesView.Builder parseShowCommand( String repoName, RevisionParser.Result result) { - if (result == null || result.getOldRevision() != null) { + if (result.getOldRevision() != null) { return null; } if (result.getPath().isEmpty()) { @@ -313,7 +304,7 @@ private @Nullable GitilesView.Builder parseDocCommand( String repoName, RevisionParser.Result result) { - if (result == null || result.getOldRevision() != null) { + if (result.getOldRevision() != null) { return null; } GitilesView.Builder b = @@ -332,7 +323,11 @@ accessFactory.forRequest(req), visibilityCache, getBranchRedirect(req)); - return revParser.parse(checkLeadingSlash(path)); + RevisionParser.Result rev = revParser.parse(checkLeadingSlash(path)); + if (rev == null) { + throw new GitilesRequestFailureException(FailureReason.OBJECT_NOT_FOUND); + } + return rev; } private BranchRedirect getBranchRedirect(HttpServletRequest req) {
diff --git a/javatests/com/google/gitiles/ViewFilterTest.java b/javatests/com/google/gitiles/ViewFilterTest.java index 79b0b09..dff1de2 100644 --- a/javatests/com/google/gitiles/ViewFilterTest.java +++ b/javatests/com/google/gitiles/ViewFilterTest.java
@@ -17,6 +17,7 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static com.google.gitiles.MoreAssert.assertThrows; +import static java.lang.String.format; import com.google.common.net.HttpHeaders; import java.io.IOException; @@ -239,6 +240,11 @@ assertThat(view.getRevision().getId()).isEqualTo(master); assertThat(view.getPathPart()).isEqualTo(""); + view = getView(format("/repo/+show/%s/", master.getId().name())); + assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH); + assertThat(view.getRevision().getId()).isEqualTo(master); + assertThat(view.getPathPart()).isEqualTo(""); + view = getView("/repo/+show/master/foo"); assertThat(view.getType()).isEqualTo(GitilesView.Type.PATH); assertThat(view.getRevision().getId()).isEqualTo(master); @@ -259,6 +265,18 @@ } @Test + public void revisionNotFound() throws Exception { + var exception = assertThrows(GitilesRequestFailureException.class, () -> getView("/repo/+show/0123456789abcdef")); + assertThat(exception.getReason()).isEqualTo(GitilesRequestFailureException.FailureReason.OBJECT_NOT_FOUND); + } + + @Test + public void cannotParse() throws Exception { + var exception = assertThrows(GitilesRequestFailureException.class, () -> getView("/repo/+showmaster")); + assertThat(exception.getReason()).isEqualTo(GitilesRequestFailureException.FailureReason.CANNOT_PARSE_GITILES_VIEW); + } + + @Test public void doc() throws Exception { RevCommit master = repo.branch(MASTER).commit().create(); repo.branch("refs/heads/stable").commit().create();