Fix initial mirror sync if empty (#1842)

Fixes an error, when the initial synchronization of a git mirror had no branches.
This commit is contained in:
René Pfeuffer
2021-11-03 10:51:06 +01:00
committed by GitHub
parent b896df5046
commit cab09680f8
3 changed files with 149 additions and 55 deletions

View File

@@ -82,6 +82,7 @@ import static org.mockito.Mockito.when;
import static sonia.scm.repository.api.MirrorCommandResult.ResultType.FAILED;
import static sonia.scm.repository.api.MirrorCommandResult.ResultType.OK;
import static sonia.scm.repository.api.MirrorCommandResult.ResultType.REJECTED_UPDATES;
import static sonia.scm.repository.spi.GitMirrorCommand.RefType.BRANCH;
public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
@@ -164,6 +165,58 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
}
}
@Test
public void shouldAcceptEmptyInitialMirror() throws IOException, GitAPIException {
MirrorCommandResult result = callMirrorCommand(repositoryDirectory.getAbsolutePath(), c -> {
c.setFilter(new MirrorFilter() {
@Override
public Filter getFilter(FilterContext context) {
return new Filter() {
@Override
public Result acceptBranch(BranchUpdate branch) {
return Result.reject("nothing accepted");
}
@Override
public Result acceptTag(TagUpdate tag) {
return Result.reject("nothing accepted");
}
};
}
});
});
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).contains("Branches:")
.contains("- 000000000..fcd0ef183 master (nothing accepted)")
.contains("- 000000000..3f76a12f0 test-branch (nothing accepted)")
.contains("Tags:")
.contains("- 000000000..86a6645ec test-tag (nothing accepted)");
try (Git createdMirror = Git.open(clone)) {
assertThat(createdMirror.branchList().call()).isEmpty();
assertThat(createdMirror.tagList().call()).isEmpty();
}
}
@Test
public void shouldAcceptOnlyTagInInitialMirror() {
assertThrows(IllegalStateException.class, () ->
callMirrorCommand(repositoryDirectory.getAbsolutePath(), c -> {
c.setFilter(new MirrorFilter() {
@Override
public Filter getFilter(FilterContext context) {
return new Filter() {
@Override
public Result acceptBranch(BranchUpdate branch) {
return Result.reject("nothing accepted");
}
};
}
});
}));
}
@Test
public void shouldFilterMasterBranchWhenFilteredOnInitialMirror() throws IOException, GitAPIException {
MirrorCommandResult result = callMirrorCommand(repositoryDirectory.getAbsolutePath(), c -> {
@@ -356,7 +409,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Branches:",
"- 000000000..fcd0ef183 added-branch (rejected due to filter)"
"- 000000000..fcd0ef183 added-branch (rejected due to filter)",
"No effective changes detected"
);
try (Git updatedMirror = Git.open(clone)) {
@@ -378,7 +432,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Branches:",
"- 3f76a12f0..9e93d8631 test-branch (rejected due to filter)"
"- 3f76a12f0..9e93d8631 test-branch (rejected due to filter)",
"No effective changes detected"
);
try (Git updatedMirror = Git.open(clone)) {
@@ -400,7 +455,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Branches:",
"- 3f76a12f0..000000000 test-branch (rejected due to filter)"
"- 3f76a12f0..000000000 test-branch (rejected due to filter)",
"No effective changes detected"
);
try (Git updatedMirror = Git.open(clone)) {
@@ -423,7 +479,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Tags:",
"- 000000000..9e93d8631 added-tag (rejected due to filter)"
"- 000000000..9e93d8631 added-tag (rejected due to filter)",
"No effective changes detected"
);
try (Git updatedMirror = Git.open(clone)) {
@@ -446,7 +503,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Tags:",
"- 86a6645ec..9e93d8631 test-tag (rejected due to filter)"
"- 86a6645ec..9e93d8631 test-tag (rejected due to filter)",
"No effective changes detected"
);
try (Git updatedMirror = Git.open(clone)) {
@@ -468,7 +526,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Tags:",
"- 86a6645ec..000000000 test-tag (rejected due to filter)"
"- 86a6645ec..000000000 test-tag (rejected due to filter)",
"No effective changes detected"
);
try (Git updatedMirror = Git.open(clone)) {
@@ -490,7 +549,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getResult()).isEqualTo(REJECTED_UPDATES);
assertThat(result.getLog()).containsExactly(
"Tags:",
"- 86a6645ec..000000000 test-tag (thou shalt not pass)"
"- 86a6645ec..000000000 test-tag (thou shalt not pass)",
"No effective changes detected"
);
}
@@ -508,7 +568,8 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
assertThat(result.getLog()).containsExactly(
"! got error checking filter for update: this tag creates an exception",
"Tags:",
"- 86a6645ec..000000000 test-tag (exception in filter)"
"- 86a6645ec..000000000 test-tag (exception in filter)",
"No effective changes detected"
);
}
@@ -777,10 +838,10 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", emptyList());
selector.accepted("master");
selector.accepted("something");
selector.accepted(BRANCH, "master");
selector.accepted(BRANCH, "something");
assertThat(selector.newDefault()).isEmpty();
assertThat(selector.newDefaultBranch()).isEmpty();
}
@Test
@@ -788,10 +849,10 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", BRANCHES);
selector.accepted("new");
selector.deleted("two");
selector.accepted(BRANCH, "new");
selector.deleted(BRANCH, "two");
assertThat(selector.newDefault()).isEmpty();
assertThat(selector.newDefaultBranch()).isEmpty();
}
@Test
@@ -799,9 +860,9 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", BRANCHES);
selector.deleted("master");
selector.deleted(BRANCH, "master");
assertThat(selector.newDefault()).get().isIn("one", "two", "three");
assertThat(selector.newDefaultBranch()).get().isIn("one", "two", "three");
}
@Test
@@ -809,11 +870,11 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", BRANCHES);
selector.deleted("master");
selector.deleted("one");
selector.deleted("three");
selector.deleted(BRANCH, "master");
selector.deleted(BRANCH, "one");
selector.deleted(BRANCH, "three");
assertThat(selector.newDefault()).get().isEqualTo("two");
assertThat(selector.newDefaultBranch()).get().isEqualTo("two");
}
@Test
@@ -821,11 +882,11 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", BRANCHES);
selector.deleted("master");
selector.deleted("one");
selector.deleted("three");
selector.deleted(BRANCH, "master");
selector.deleted(BRANCH, "one");
selector.deleted(BRANCH, "three");
assertThat(selector.newDefault()).get().isEqualTo("two");
assertThat(selector.newDefaultBranch()).get().isEqualTo("two");
}
@Test
@@ -833,13 +894,13 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", BRANCHES);
selector.deleted("master");
selector.deleted("one");
selector.deleted("two");
selector.accepted("new");
selector.deleted("three");
selector.deleted(BRANCH, "master");
selector.deleted(BRANCH, "one");
selector.deleted(BRANCH, "two");
selector.accepted(BRANCH, "new");
selector.deleted(BRANCH, "three");
assertThrows(IllegalStateException.class, selector::newDefault);
assertThrows(IllegalStateException.class, selector::newDefaultBranch);
}
@Test
@@ -847,10 +908,10 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", emptyList());
selector.accepted("main");
selector.deleted("master");
selector.accepted(BRANCH, "main");
selector.deleted(BRANCH, "master");
assertThat(selector.newDefault()).get().isEqualTo("main");
assertThat(selector.newDefaultBranch()).get().isEqualTo("main");
}
@Test
@@ -858,9 +919,9 @@ public class GitMirrorCommandTest extends AbstractGitCommandTestBase {
GitMirrorCommand.DefaultBranchSelector selector =
new GitMirrorCommand.DefaultBranchSelector("master", emptyList());
selector.accepted("main");
selector.accepted(BRANCH, "main");
assertThat(selector.newDefault()).get().isEqualTo("main");
assertThat(selector.newDefaultBranch()).get().isEqualTo("main");
}
}