Skip to content

Commit 5e3b970

Browse files
committed
Content: No longer init repos with main branch
MIRROR mode had two flaws: Source repos without main branch ended up with a main branch. Source repos with default branch != main: Main was not mirrored but only contained a README (created by SCMM init). Without the main Branch ScmmRepo.clone() ran into errors because it explicitly checked out main. Turn out without setNoCheckout(true) this is not possible. setNoCheckout(true) lead to all files being marked as deleted right after git clone. Without it, the default branch is checkout out just like "git clone" on CLI.
1 parent 123aff2 commit 5e3b970

File tree

4 files changed

+13
-57
lines changed

4 files changed

+13
-57
lines changed

src/main/groovy/com/cloudogu/gitops/features/Content.groovy

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -540,12 +540,12 @@ class Content extends Feature {
540540
* Checks whether the repo already exists and overwrite Mode matches.
541541
*/
542542
boolean isValidForPush(ScmmRepo repo, RepoCoordinate repoCoordinate) {
543-
def isRepoCreated = repo.create('', scmmApiClient)
543+
def isRepoCreated = repo.create('', scmmApiClient, false)
544544
if (!isRepoCreated && OverwriteMode.INIT == repoCoordinate.repoConfig.overwriteMode) {
545545
log.warn("OverwriteMode ${OverwriteMode.INIT} set for repo '${repoCoordinate.fullRepoName}' " +
546546
"and repo already exists in target: Not pushing content!" +
547547
"If you want to override, set ${OverwriteMode.UPGRADE} or ${OverwriteMode.RESET} .")
548-
return false;
548+
return false
549549
}
550550
return true
551551
}

src/main/groovy/com/cloudogu/gitops/scmm/ScmmRepo.groovy

Lines changed: 7 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -95,24 +95,26 @@ class ScmmRepo {
9595
}
9696
}
9797

98-
9998
void cloneRepo() {
10099
log.debug("Cloning $scmmRepoTarget repo")
101-
gitClone()
102-
checkoutOrCreateBranch('main')
100+
Git.cloneRepository()
101+
.setURI(getGitRepositoryUrl())
102+
.setDirectory(new File(absoluteLocalRepoTmpDir))
103+
.setCredentialsProvider(getCredentialProvider())
104+
.call()
103105
}
104106

105107
/**
106108
* @return true if created, false if already exists. Throw exception on all other errors
107109
*/
108-
boolean create(String description, ScmmApiClient scmmApiClient) {
110+
boolean create(String description, ScmmApiClient scmmApiClient, boolean initialize = true) {
109111
def namespace = scmmRepoTarget.split('/', 2)[0]
110112
def repoName = scmmRepoTarget.split('/', 2)[1]
111113

112114
def repositoryApi = scmmApiClient.repositoryApi()
113115
def repo = new Repository(namespace, repoName, description)
114116
log.debug("Creating repo: ${namespace}/${repoName}")
115-
def createResponse = repositoryApi.create(repo, true).execute()
117+
def createResponse = repositoryApi.create(repo, initialize).execute()
116118
handleResponse(createResponse, repo)
117119

118120
def permission = new Permission(config.scmm.gitOpsUsername as String, Permission.Role.WRITE)
@@ -218,33 +220,6 @@ class ScmmRepo {
218220
.setCredentialsProvider(getCredentialProvider())
219221
}
220222

221-
void checkoutOrCreateBranch(String branch) {
222-
log.debug("Checking out $branch for repo $scmmRepoTarget")
223-
getGit()
224-
.checkout()
225-
.setCreateBranch(!branchExists(branch))
226-
.setName(branch)
227-
.call()
228-
}
229-
230-
private boolean branchExists(String branch) {
231-
return getGit()
232-
.branchList()
233-
.call()
234-
.collect { it.name.replace("refs/heads/", "") }
235-
.contains(branch)
236-
}
237-
238-
protected Git gitClone() {
239-
Git.cloneRepository()
240-
.setURI(getGitRepositoryUrl())
241-
.setDirectory(new File(absoluteLocalRepoTmpDir))
242-
.setNoCheckout(true)
243-
.setCredentialsProvider(getCredentialProvider())
244-
.call()
245-
246-
}
247-
248223
private CredentialsProvider getCredentialProvider() {
249224
if (scmProvider == "gitlab") {
250225
username = "oauth2"

src/test/groovy/com/cloudogu/gitops/features/ContentTest.groovy

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,7 @@ class ContentTest {
578578
try (def git = Git.cloneRepository().setURI(url).setBranch('main').setDirectory(tmpDir).call()) {
579579

580580

581-
verify(repo).create(eq(''), any(ScmmApiClient))
581+
verify(repo).create(eq(''), any(ScmmApiClient), eq(false))
582582

583583
def commitMsg = git.log().call().iterator().next().getFullMessage()
584584
assertThat(commitMsg).isEqualTo("Initialize content repo ${expectedRepo}".toString())
@@ -639,7 +639,7 @@ class ContentTest {
639639
try (def git = Git.cloneRepository().setURI(url).setBranch('main').setDirectory(tmpDir).call()) {
640640

641641

642-
verify(repo).create(eq(''), any(ScmmApiClient))
642+
verify(repo).create(eq(''), any(ScmmApiClient), eq(false))
643643

644644
def commitMsg = git.log().call().iterator().next().getFullMessage()
645645
assertThat(commitMsg).isEqualTo("Initialize content repo ${expectedRepo}".toString())
@@ -700,7 +700,7 @@ class ContentTest {
700700
// clone repo, to ensure, changes in remote repo.
701701
try (def git = Git.cloneRepository().setURI(url).setBranch('main').setDirectory(tmpDir).call()) {
702702

703-
verify(repo).create(eq(''), any(ScmmApiClient))
703+
verify(repo).create(eq(''), any(ScmmApiClient), eq(false))
704704

705705
def commitMsg = git.log().call().iterator().next().getFullMessage()
706706
assertThat(commitMsg).isEqualTo("Initialize content repo ${expectedRepo}".toString())

src/test/groovy/com/cloudogu/gitops/utils/TestScmmRepoProvider.groovy

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@ import com.cloudogu.gitops.config.Config
44
import com.cloudogu.gitops.scmm.ScmmRepo
55
import com.cloudogu.gitops.scmm.ScmmRepoProvider
66
import org.apache.commons.io.FileUtils
7-
import org.eclipse.jgit.api.Git
87

9-
import static org.mockito.Mockito.spy
8+
import static org.mockito.Mockito.spy
109

1110
class TestScmmRepoProvider extends ScmmRepoProvider {
1211
Map<String, ScmmRepo> repos = [:]
@@ -45,24 +44,6 @@ class TestScmmRepoProvider extends ScmmRepoProvider {
4544
return remoteGitRepopUrl
4645
}
4746

48-
@Override
49-
protected Git gitClone() {
50-
// Cloning from filepath does not work without setting branch
51-
try {
52-
Git.cloneRepository()
53-
.setURI(getGitRepositoryUrl())
54-
.setDirectory(new File(absoluteLocalRepoTmpDir))
55-
.setNoCheckout(true)
56-
.setBranch('main')
57-
.call()
58-
59-
} catch (Exception e) {
60-
// test workaround for testing same repo again. Clean folder with .git and do it again.
61-
// it need 2-3 tries
62-
fileSystemUtils.deleteFilesExcept(new File(absoluteLocalRepoTmpDir))
63-
gitClone()
64-
}
65-
}
6647
}
6748
// Create a spy to enable verification while keeping real behavior
6849
ScmmRepo spyRepo = spy(repoNew)

0 commit comments

Comments
 (0)