Skip to content

Commit cd0abc6

Browse files
authored
Merge pull request #297 from cloudogu/feature/refactor_content_hooks
Content Repos: Refactoring + Fixes
2 parents 43642f7 + 62531f0 commit cd0abc6

File tree

18 files changed

+550
-328
lines changed

18 files changed

+550
-328
lines changed

src/main/groovy/com/cloudogu/gitops/Application.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ class Application {
2626
log.debug("Starting Application")
2727

2828
setNamespaceListToConfig(config)
29+
30+
features.forEach(feature -> {
31+
feature.validate()
32+
})
2933
features.forEach(feature -> {
3034
feature.install()
3135
})

src/main/groovy/com/cloudogu/gitops/Feature.groovy

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,19 @@ abstract class Feature {
7171
}
7272

7373
abstract boolean isEnabled()
74-
74+
75+
76+
7577
/*
7678
* Hooks for enabling or disabling a feature. Both optional, because not always needed.
7779
*/
7880
protected void enable() {}
7981
protected void disable() {}
82+
83+
/*
84+
* Hook for special feature validation. Optional.
85+
* Feature should throw RuntimeException to stop immediately.
86+
*/
87+
protected void validate() { }
88+
8089
}

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

Lines changed: 179 additions & 95 deletions
Large diffs are not rendered by default.

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: 174 additions & 176 deletions
Large diffs are not rendered by default.

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)
File renamed without changes.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
copyRepo1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
copyRepo1
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
copyRepo2

0 commit comments

Comments
 (0)