Feature Partial Diff (#1581)

With this pull request, diffs for Git are loaded in chunks. This means, that for diffs with a lot of files only a part of them are loaded. In the UI a button will be displayed to load more. In the REST API, the number of files can be specified. This only works for diffs, that are delivered as "parsed" diffs. Currently, this is only available for Git.

Co-authored-by: Sebastian Sdorra <sebastian.sdorra@cloudogu.com>
This commit is contained in:
René Pfeuffer
2021-03-12 13:52:17 +01:00
committed by GitHub
parent e66553705f
commit 84c8e02bf1
37 changed files with 900 additions and 223 deletions

View File

@@ -55,6 +55,8 @@ public class GitDiffResultCommandTest extends AbstractGitCommandTestBase {
DiffFile b = iterator.next();
assertThat(b.getOldPath()).isEqualTo("b.txt");
assertThat(b.getNewPath()).isEqualTo("/dev/null");
assertThat(diffResult.isPartial()).isFalse();
}
@Test
@@ -69,6 +71,8 @@ public class GitDiffResultCommandTest extends AbstractGitCommandTestBase {
DiffFile b = iterator.next();
assertThat(b.getOldRevision()).isEqualTo("61780798228d17af2d34fce4cfbdf35556832472");
assertThat(b.getNewRevision()).isEqualTo("0000000000000000000000000000000000000000");
assertThat(iterator.hasNext()).isFalse();
}
@Test
@@ -119,10 +123,55 @@ public class GitDiffResultCommandTest extends AbstractGitCommandTestBase {
assertThat(renameB.iterator().hasNext()).isFalse();
}
@Test
public void shouldLimitResult() throws IOException {
DiffResult diffResult = createDiffResult("3f76a12f08a6ba0dc988c68b7f0b2cd190efc3c4", null, 1);
Iterator<DiffFile> iterator = diffResult.iterator();
DiffFile a = iterator.next();
assertThat(a.getNewPath()).isEqualTo("a.txt");
assertThat(a.getOldPath()).isEqualTo("a.txt");
assertThat(iterator.hasNext()).isFalse();
assertThat(diffResult.isPartial()).isTrue();
assertThat(diffResult.getLimit()).get().isEqualTo(1);
assertThat(diffResult.getOffset()).isZero();
}
@Test
public void shouldSetOffsetForResult() throws IOException {
DiffResult diffResult = createDiffResult("3f76a12f08a6ba0dc988c68b7f0b2cd190efc3c4", 1, null);
Iterator<DiffFile> iterator = diffResult.iterator();
DiffFile b = iterator.next();
assertThat(b.getOldPath()).isEqualTo("b.txt");
assertThat(b.getNewPath()).isEqualTo("/dev/null");
assertThat(iterator.hasNext()).isFalse();
assertThat(diffResult.isPartial()).isFalse();
}
@Test
public void shouldNotBePartialWhenResultCountMatchesLimit() throws IOException {
DiffResult diffResult = createDiffResult("3f76a12f08a6ba0dc988c68b7f0b2cd190efc3c4", 0, 2);
assertThat(diffResult.isPartial()).isFalse();
assertThat(diffResult.getLimit()).get().isEqualTo(2);
assertThat(diffResult.getOffset()).isZero();
}
private DiffResult createDiffResult(String s) throws IOException {
return createDiffResult(s, null, null);
}
private DiffResult createDiffResult(String s, Integer offset, Integer limit) throws IOException {
GitDiffResultCommand gitDiffResultCommand = new GitDiffResultCommand(createContext());
DiffCommandRequest diffCommandRequest = new DiffCommandRequest();
DiffResultCommandRequest diffCommandRequest = new DiffResultCommandRequest();
diffCommandRequest.setRevision(s);
diffCommandRequest.setOffset(offset);
diffCommandRequest.setLimit(limit);
return gitDiffResultCommand.getDiffResult(diffCommandRequest);
}