Implement new limit/offset rule for git and svn

Directories shall no longer be taken into account for limit/offset
calculations.
This commit is contained in:
Rene Pfeuffer
2020-03-03 17:06:55 +01:00
parent fa80c83109
commit cf43e3bc84
4 changed files with 11 additions and 8 deletions

View File

@@ -278,7 +278,7 @@ public class GitBrowseCommand extends AbstractGitCommand
convertToFileObject(fileObject, repo, request, revId, entry.getChildren()); convertToFileObject(fileObject, repo, request, revId, entry.getChildren());
} }
if (resultCount > request.getOffset() || fileObject.isDirectory()) { if (resultCount > request.getOffset() || (request.getOffset() == 0 && fileObject.isDirectory())) {
files.add(fileObject); files.add(fileObject);
} }
} }

View File

@@ -280,7 +280,7 @@ public class GitBrowseCommandTest extends AbstractGitCommandTestBase {
Collection<FileObject> foList = root.getChildren(); Collection<FileObject> foList = root.getChildren();
assertThat(foList).extracting("name").contains("f.txt"); assertThat(foList).extracting("name").containsExactly("f.txt");
assertFalse("result should not be marked as trunctated", root.isTruncated()); assertFalse("result should not be marked as trunctated", root.isTruncated());
} }

View File

@@ -136,15 +136,18 @@ public class SvnBrowseCommand extends AbstractSvnCommand
List<SVNDirEntry> entries = new ArrayList<>(svnRepository.getDir(parent.getPath(), revisionNumber, null, (Collection) null)); List<SVNDirEntry> entries = new ArrayList<>(svnRepository.getDir(parent.getPath(), revisionNumber, null, (Collection) null));
sort(entries, entry -> entry.getKind() == SVNNodeKind.DIR, SVNDirEntry::getName); sort(entries, entry -> entry.getKind() == SVNNodeKind.DIR, SVNDirEntry::getName);
for (Iterator<SVNDirEntry> iterator = entries.iterator(); resultCount < request.getLimit() + request.getOffset() && iterator.hasNext(); ) { for (Iterator<SVNDirEntry> iterator = entries.iterator(); resultCount < request.getLimit() + request.getOffset() && iterator.hasNext(); ) {
++resultCount;
SVNDirEntry entry = iterator.next(); SVNDirEntry entry = iterator.next();
FileObject child = createFileObject(request, svnRepository, revisionNumber, entry, basePath); FileObject child = createFileObject(request, svnRepository, revisionNumber, entry, basePath);
if (!child.isDirectory()) {
++resultCount;
}
if (child.isDirectory() && request.isRecursive()) { if (child.isDirectory() && request.isRecursive()) {
traverse(svnRepository, revisionNumber, request, child, createBasePath(child.getPath())); traverse(svnRepository, revisionNumber, request, child, createBasePath(child.getPath()));
} }
if (resultCount > request.getOffset()) { if (resultCount > request.getOffset() || (request.getOffset() == 0 && child.isDirectory())) {
parent.addChild(child); parent.addChild(child);
} }
} }

View File

@@ -189,7 +189,7 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase
Collection<FileObject> foList = result.getFile().getChildren(); Collection<FileObject> foList = result.getFile().getChildren();
assertThat(foList).extracting("name").containsExactly("c"); assertThat(foList).extracting("name").containsExactly("c", "a.txt");
assertThat(result.getFile().isTruncated()).isTrue(); assertThat(result.getFile().isTruncated()).isTrue();
} }
@@ -203,7 +203,7 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase
Collection<FileObject> foList = result.getFile().getChildren(); Collection<FileObject> foList = result.getFile().getChildren();
assertThat(foList).extracting("name").containsExactly("a.txt"); assertThat(foList).isEmpty();
} }
@Test @Test
@@ -233,7 +233,7 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase
public void testRecursiveLimitInSubDir() throws IOException { public void testRecursiveLimitInSubDir() throws IOException {
BrowseCommandRequest request = new BrowseCommandRequest(); BrowseCommandRequest request = new BrowseCommandRequest();
request.setLimit(2); request.setLimit(1);
request.setRecursive(true); request.setRecursive(true);
FileObject root = createCommand().getBrowserResult(request).getFile(); FileObject root = createCommand().getBrowserResult(request).getFile();
@@ -256,7 +256,7 @@ public class SvnBrowseCommandTest extends AbstractSvnCommandTestBase
public void testRecursiveOffset() throws IOException { public void testRecursiveOffset() throws IOException {
BrowseCommandRequest request = new BrowseCommandRequest(); BrowseCommandRequest request = new BrowseCommandRequest();
request.setOffset(2); request.setOffset(1);
request.setRecursive(true); request.setRecursive(true);
FileObject root = createCommand().getBrowserResult(request).getFile(); FileObject root = createCommand().getBrowserResult(request).getFile();