in javatests/com/google/gitiles/ViewFilterTest.java [514:584]
public void autoCommand_branchRedirect() throws Exception {
RevCommit parent = repo.commit().create();
RevCommit master = repo.branch(MASTER).commit().parent(parent).create();
RevCommit main = repo.branch(MAIN).commit().parent(parent).create();
RevCommit someBranch =
repo.branch("refs/heads/some@branch")
.commit()
.parent(main)
.add("README", "This is a test README")
.create();
repo.branch("refs/heads/another@level").commit().parent(someBranch).create();
String hex = master.name();
String hexBranch = hex.substring(0, 10);
repo.branch(hexBranch).commit().create();
BranchRedirect branchRedirect =
new BranchRedirect() {
@Override
protected Optional<String> getRedirectBranch(Repository repo, String sourceBranch) {
if (MASTER.equals(toFullBranchName(sourceBranch))) {
return Optional.of(MAIN);
}
if ("refs/heads/some@branch".equals(toFullBranchName(sourceBranch))) {
return Optional.of(MAIN);
}
return Optional.empty();
}
};
GitilesView view = getView("/repo/+/master", branchRedirect);
assertThat(view.getType()).isEqualTo(Type.REVISION);
assertThat(view.getRevision().getName()).isEqualTo(MAIN);
assertThat(view.getRevision().getId()).isEqualTo(main);
view = getView("/repo/+/master/index.c", branchRedirect);
assertThat(view.getType()).isEqualTo(Type.PATH);
assertThat(view.getPathPart()).isEqualTo("index.c");
assertThat(view.getRevision().getName()).isEqualTo(MAIN);
assertThat(view.getRevision().getId()).isEqualTo(main);
view = getView("/repo/+/some@branch", branchRedirect);
assertThat(view.getType()).isEqualTo(Type.REVISION);
assertThat(view.getRevision().getName()).isEqualTo(MAIN);
assertThat(view.getRevision().getId()).isEqualTo(main);
view = getView("/repo/+/master/master", branchRedirect);
assertThat(view.getType()).isEqualTo(Type.PATH);
assertThat(view.getPathPart()).isEqualTo("master");
assertThat(view.getRevision().getName()).isEqualTo(MAIN);
assertThat(view.getRevision().getId()).isEqualTo(main);
FakeHttpServletResponse response = getResponse("/repo/+/master^1", branchRedirect);
assertThat(response.getHeader(HttpHeaders.LOCATION))
.contains("/b/repo/+/" + parent.toObjectId().name());
response = getResponse("/repo/+/master~1", branchRedirect);
assertThat(response.getHeader(HttpHeaders.LOCATION))
.contains("/b/repo/+/" + parent.toObjectId().name());
response = getResponse("/repo/+/another@level^1~2", branchRedirect);
assertThat(response.getHeader(HttpHeaders.LOCATION))
.contains("/b/repo/+/" + parent.toObjectId().name());
assertThrows(
GitilesRequestFailureException.class,
() -> getView("/repo/+/some@branch:README", branchRedirect));
assertThrows(
GitilesRequestFailureException.class, () -> getView("/repo/+/master@{1}", branchRedirect));
}