From cb8c951cb8530eaa78324ee5f21ecc69aacd4e73 Mon Sep 17 00:00:00 2001 From: Rene Pfeuffer Date: Thu, 23 Feb 2023 12:38:26 +0100 Subject: [PATCH] Set the HEAD in Git pull command MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Committed-by: Eduard Heimbuch Co-authored-by: René Pfeuffer --- .../changelog/default_branch_after_import.yaml | 2 ++ .../sonia/scm/repository/spi/GitPullCommand.java | 6 +++++- .../repository/spi/GitIncomingCommandTest.java | 16 +++++----------- .../spi/GitModificationsCommandTest.java | 7 ++++--- 4 files changed, 16 insertions(+), 15 deletions(-) create mode 100644 gradle/changelog/default_branch_after_import.yaml diff --git a/gradle/changelog/default_branch_after_import.yaml b/gradle/changelog/default_branch_after_import.yaml new file mode 100644 index 0000000000..f30ac011d8 --- /dev/null +++ b/gradle/changelog/default_branch_after_import.yaml @@ -0,0 +1,2 @@ +- type: fixed + description: Set the default branch in imported Git repositories correctly to the HEAD of the source repository diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java index ba63d7e0ba..8b062badd6 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitPullCommand.java @@ -39,6 +39,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ContextEntry; import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider; +import sonia.scm.repository.GitHeadModifier; import sonia.scm.repository.GitRepositoryHandler; import sonia.scm.repository.GitUtil; import sonia.scm.repository.Repository; @@ -62,6 +63,7 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand private final LfsLoader lfsLoader; private final PullHttpConnectionProvider pullHttpConnectionProvider; private final GitRepositoryConfigStoreProvider storeProvider; + private final GitHeadModifier gitHeadModifier; @Inject public GitPullCommand(GitRepositoryHandler handler, @@ -69,12 +71,13 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand PostReceiveRepositoryHookEventFactory postReceiveRepositoryHookEventFactory, LfsLoader lfsLoader, PullHttpConnectionProvider pullHttpConnectionProvider, - GitRepositoryConfigStoreProvider storeProvider) { + GitRepositoryConfigStoreProvider storeProvider, GitHeadModifier gitHeadModifier) { super(handler, context); this.postReceiveRepositoryHookEventFactory = postReceiveRepositoryHookEventFactory; this.lfsLoader = lfsLoader; this.pullHttpConnectionProvider = pullHttpConnectionProvider; this.storeProvider = storeProvider; + this.gitHeadModifier = gitHeadModifier; } @Override @@ -217,6 +220,7 @@ public class GitPullCommand extends AbstractGitPushOrPullCommand Ref head = result.getAdvertisedRef("HEAD").getLeaf(); if (head.getName().startsWith("refs/heads/")) { String newDefaultBranch = head.getName().substring("refs/heads/".length()); + gitHeadModifier.ensure(repository, newDefaultBranch); storeProvider.setDefaultBranch(repository, newDefaultBranch); } } diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java index 3c95ec52a8..20c2c31f0e 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitIncomingCommandTest.java @@ -24,8 +24,6 @@ package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- - import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.revwalk.RevCommit; import org.junit.Ignore; @@ -33,6 +31,7 @@ import org.junit.Test; import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider; import sonia.scm.repository.ChangesetPagingResult; import sonia.scm.repository.GitConfig; +import sonia.scm.repository.GitHeadModifier; import sonia.scm.repository.GitTestHelper; import sonia.scm.store.InMemoryConfigurationStoreFactory; @@ -42,18 +41,12 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.Mockito.mock; -//~--- JDK imports ------------------------------------------------------------ - /** * @author Sebastian Sdorra */ public class GitIncomingCommandTest extends AbstractRemoteCommandTestBase { - private final LfsLoader lfsLoader = mock(LfsLoader.class); - private final PullHttpConnectionProvider pullHttpConnectionProvider = mock(PullHttpConnectionProvider.class); - private final GitRepositoryConfigStoreProvider storeProvider = mock(GitRepositoryConfigStoreProvider.class); - /** * Method description * @@ -105,9 +98,10 @@ public class GitIncomingCommandTest handler, context, postReceiveRepositoryHookEventFactory, - lfsLoader, - pullHttpConnectionProvider, - storeProvider); + mock(LfsLoader.class), + mock(PullHttpConnectionProvider.class), + mock(GitRepositoryConfigStoreProvider.class), + mock(GitHeadModifier.class)); PullCommandRequest req = new PullCommandRequest(); req.setRemoteRepository(outgoingRepository); pull.pull(req); diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java index f1fb421098..06d777e1f9 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitModificationsCommandTest.java @@ -35,6 +35,7 @@ import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import sonia.scm.api.v2.resources.GitRepositoryConfigStoreProvider; import sonia.scm.repository.GitConfig; +import sonia.scm.repository.GitHeadModifier; import sonia.scm.repository.Modifications; import java.io.File; @@ -42,6 +43,7 @@ import java.io.IOException; import java.util.function.Consumer; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; @@ -55,8 +57,6 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase { private LfsLoader lfsLoader; @Mock private PullHttpConnectionProvider pullHttpConnectionProvider; - @Mock - private GitRepositoryConfigStoreProvider storeProvider; @Before public void init() { @@ -183,7 +183,8 @@ public class GitModificationsCommandTest extends AbstractRemoteCommandTestBase { postReceiveRepositoryHookEventFactory, lfsLoader, pullHttpConnectionProvider, - storeProvider); + mock(GitRepositoryConfigStoreProvider.class), + mock(GitHeadModifier.class)); PullCommandRequest pullRequest = new PullCommandRequest(); pullRequest.setRemoteRepository(incomingRepository); pullCommand.pull(pullRequest);