Skip to content

Commit da9bdd0

Browse files
committed
Add support for updating submodules on cloud config server repo refresh
- if cloneSubmodules is enabled, when repo is being refreshed, also properly fetch submodule updates - move cloneSubmodules boolean outside of JGitFactory because this property can be changed during runtime and there is no reason for this boolean to be copied inside Closes spring-cloud#1924 Signed-off-by: Tomas Slusny <[email protected]>
1 parent a034251 commit da9bdd0

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/environment/JGitEnvironmentRepository.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository
113113
*/
114114
private boolean cloneOnStart;
115115

116-
private JGitEnvironmentRepository.JGitFactory gitFactory;
116+
private JGitEnvironmentRepository.JGitFactory gitFactory = new JGitFactory();
117117

118118
private String defaultLabel;
119119

@@ -146,6 +146,8 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository
146146
*/
147147
private boolean skipSslValidation;
148148

149+
private boolean cloneSubmodules;
150+
149151
private boolean tryMasterBranch;
150152

151153
private final ObservationRegistry observationRegistry;
@@ -167,11 +169,19 @@ public JGitEnvironmentRepository(ConfigurableEnvironment environment, JGitEnviro
167169
this.deleteUntrackedBranches = properties.isDeleteUntrackedBranches();
168170
this.refreshRate = properties.getRefreshRate();
169171
this.skipSslValidation = properties.isSkipSslValidation();
170-
this.gitFactory = new JGitFactory(properties.isCloneSubmodules());
172+
this.cloneSubmodules = properties.isCloneSubmodules();
171173
this.tryMasterBranch = properties.isTryMasterBranch();
172174
this.observationRegistry = observationRegistry;
173175
}
174176

177+
public boolean isCloneSubmodules() {
178+
return this.cloneSubmodules;
179+
}
180+
181+
public void setCloneSubmodules(boolean cloneSubmodules) {
182+
this.cloneSubmodules = cloneSubmodules;
183+
}
184+
175185
public boolean isTryMasterBranch() {
176186
return tryMasterBranch;
177187
}
@@ -315,6 +325,11 @@ public String refresh(String label) {
315325
if (this.deleteUntrackedBranches && fetchStatus != null) {
316326
deleteUntrackedLocalBranches(fetchStatus.getTrackingRefUpdates(), git);
317327
}
328+
329+
// update submodules if needed
330+
if (cloneSubmodules) {
331+
git.submoduleUpdate().setFetch(true).call();
332+
}
318333
}
319334

320335
// checkout after fetch so we can get any new branches, tags, ect.
@@ -669,6 +684,7 @@ private Git copyFromLocalRepository() throws IOException {
669684

670685
private Git cloneToBasedir() throws GitAPIException {
671686
CloneCommand clone = this.gitFactory.getCloneCommandByCloneRepository()
687+
.setCloneSubmodules(cloneSubmodules)
672688
.setURI(getUri())
673689
.setDirectory(getBasedir());
674690
configureCommand(clone);
@@ -776,23 +792,13 @@ public void setLastRefresh(long lastRefresh) {
776792
*/
777793
public static class JGitFactory {
778794

779-
private final boolean cloneSubmodules;
780-
781-
public JGitFactory() {
782-
this(false);
783-
}
784-
785-
public JGitFactory(boolean cloneSubmodules) {
786-
this.cloneSubmodules = cloneSubmodules;
787-
}
788-
789795
public Git getGitByOpen(File file) throws IOException {
790796
Git git = Git.open(file);
791797
return git;
792798
}
793799

794800
public CloneCommand getCloneCommandByCloneRepository() {
795-
CloneCommand command = Git.cloneRepository().setCloneSubmodules(cloneSubmodules);
801+
CloneCommand command = Git.cloneRepository();
796802
return command;
797803
}
798804

0 commit comments

Comments
 (0)