docs: @Get("/projects/{projectName}/repos/{repoName}/compare")
      public CompletableFuture<?> getDiff(
              @Param("pathPattern") @Default("/**") String pathPattern,
              @Param("from") @Default("1") String from, @Param("to") @Default("head") String to,
              Repository repository,
              @RequestConverter(QueryRequestConverter.class) Optional<Query<?>> query) {
          if (query.isPresent()) {
              return repository.diff(new Revision(from), new Revision(to), query.get())
                               .thenApply(DtoConverter::convert);
          }
          return repository
                  .diff(new Revision(from), new Revision(to), normalizePath(pathPattern))
                  .thenApply(changeMap -> changeMap.values().stream()
                                                   .map(DtoConverter::convert).collect(toImmutableList()));
      }