From ca0c5ecf1bd6a22a85c179376877426408d5f72d Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 13 Jul 2015 11:49:11 +0100 Subject: [PATCH] Add spring.cloud.config.server.git.timeout (default infinite) Sets the undlerlying timeout for the HTTP/SSH connection if applicable in JGit. See gh-141 --- .../server/JGitEnvironmentRepository.java | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java index e7083ce5..b0a86f46 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/JGitEnvironmentRepository.java @@ -62,6 +62,11 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository private static final String DEFAULT_LABEL = "master"; private static final String FILE_URI_PREFIX = "file:"; + /** + * Timeout (in seconds) for obtaining HTTP or SSH connection (if applicable) + */ + private int timeout = 0; + private boolean initialized; private boolean cloneOnStart = false; @@ -81,6 +86,10 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository this.cloneOnStart = cloneOnStart; } + public void setTimeout(int timeout) { + this.timeout = timeout; + } + public JGitFactory getGitFactory() { return this.gitFactory; } @@ -187,6 +196,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository */ private void pull(Git git, String label, Ref ref) { PullCommand pull = git.pull(); + setTimeout(pull); try { if (hasText(getUsername())) { setCredentialsProvider(pull); @@ -245,6 +255,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository private Git cloneToBasedir() throws GitAPIException { CloneCommand clone = this.gitFactory.getCloneCommandByCloneRepository() .setURI(getUri()).setDirectory(getBasedir()); + setTimeout(clone); if (hasText(getUsername())) { setCredentialsProvider(clone); } @@ -254,6 +265,7 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository private void tryFetch(Git git) { try { FetchCommand fetch = git.fetch(); + setTimeout(fetch); if (hasText(getUsername())) { setCredentialsProvider(fetch); } @@ -292,6 +304,10 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository getPassword())); } + private void setTimeout(TransportCommand pull) { + pull.setTimeout(this.timeout); + } + private void trackBranch(Git git, CheckoutCommand checkout, String label) { checkout.setCreateBranch(true).setName(label) .setUpstreamMode(SetupUpstreamMode.TRACK) @@ -329,11 +345,13 @@ public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository static class JGitFactory { public Git getGitByOpen(File file) throws IOException { - return Git.open(file); + Git git = Git.open(file); + return git; } public CloneCommand getCloneCommandByCloneRepository() { - return Git.cloneRepository(); + CloneCommand command = Git.cloneRepository(); + return command; } } }