From db540f5f0253d3ca3490e82bd65d3e92dbbd1733 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 17 Feb 2020 16:48:14 +0100 Subject: [PATCH] Add limit parameter --- .../repository/api/BrowseCommandBuilder.java | 12 ++++++++++ .../repository/spi/BrowseCommandRequest.java | 24 +++++++++++++++++++ .../spi/FileBaseCommandRequest.java | 10 ++++++++ .../repository/spi/GitBrowseCommandTest.java | 13 ++++++++++ 4 files changed, 59 insertions(+) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java index 563557f0c1..53281b52b8 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BrowseCommandBuilder.java @@ -300,6 +300,18 @@ public final class BrowseCommandBuilder return this; } + /** + * Limit the number of result files to limit entries. + * + * @param limit The maximal number of files this request shall return. + * + * @since 2.0.0 + */ + public BrowseCommandBuilder setLimit(int limit) { + request.setLimit(limit); + return this; + } + private void updateCache(BrowserResult updatedResult) { if (!disableCache) { CacheKey key = new CacheKey(repository, request); diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java index 9c23fe93f2..c856421855 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BrowseCommandRequest.java @@ -191,6 +191,17 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest this.recursive = recursive; } + /** + * Limit the number of result files to limit entries. + * + * @param limit The maximal number of files this request shall return. + * + * @since 2.0.0 + */ + public void setLimit(int limit) { + this.limit = limit; + } + //~--- get methods ---------------------------------------------------------- /** @@ -232,6 +243,15 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest return recursive; } + /** + * Returns the limit for the number of result files. + * + * @since 2.0.0 + */ + public int getLimit() { + return limit; + } + public void updateCache(BrowserResult update) { if (updater != null) { updater.accept(update); @@ -249,6 +269,10 @@ public final class BrowseCommandRequest extends FileBaseCommandRequest /** browse file objects recursive */ private boolean recursive = false; + + /** Limit the number of result files to limit entries. */ + private int limit = 1000; + // WARNING / TODO: This field creates a reverse channel from the implementation to the API. This will break // whenever the API runs in a different process than the SPI (for example to run explicit hosts for git repositories). private final transient Consumer updater; diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java b/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java index 9f563345fd..0a2192897a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/FileBaseCommandRequest.java @@ -147,6 +147,10 @@ public abstract class FileBaseCommandRequest this.revision = revision; } + public void setLimit(int limit) { + this.limit = limit; + } + //~--- get methods ---------------------------------------------------------- /** @@ -171,6 +175,10 @@ public abstract class FileBaseCommandRequest return revision; } + public int getLimit() { + return limit; + } + //~--- methods -------------------------------------------------------------- /** @@ -208,4 +216,6 @@ public abstract class FileBaseCommandRequest /** Field description */ private String revision; + + private int limit; } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java index faa8f0c2fa..e45ad0d04b 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBrowseCommandTest.java @@ -236,6 +236,19 @@ public class GitBrowseCommandTest extends AbstractGitCommandTestBase { .containsExactly(of(42L)); } + @Test + public void testBrowseLimit() throws IOException { + BrowseCommandRequest request = new BrowseCommandRequest(); + request.setLimit(2); + FileObject root = createCommand() + .getBrowserResult(request).getFile(); + assertNotNull(root); + + Collection foList = root.getChildren(); + + assertThat(foList).hasSize(2); + } + private FileObject findFile(Collection foList, String name) { return foList.stream() .filter(f -> name.equals(f.getName()))