Allow patterns in repository search paths
User can now specify spring.cloud.config.server.git.searchPaths as a list of patterns (instead of a list of subdirectory names). See gh-97
This commit is contained in:
@@ -29,15 +29,16 @@ import org.springframework.cloud.config.environment.Environment;
|
||||
import org.springframework.cloud.config.environment.PropertySource;
|
||||
import org.springframework.core.env.ConfigurableEnvironment;
|
||||
import org.springframework.core.io.UrlResource;
|
||||
import org.springframework.util.PatternMatchUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
* @author Dave Syer
|
||||
* @author Michael Prankl
|
||||
*/
|
||||
public abstract class AbstractSCMEnvironmentRepository implements EnvironmentRepository,
|
||||
public abstract class AbstractScmEnvironmentRepository implements EnvironmentRepository,
|
||||
InitializingBean {
|
||||
private static Log logger = LogFactory.getLog(AbstractSCMEnvironmentRepository.class);
|
||||
private static Log logger = LogFactory.getLog(AbstractScmEnvironmentRepository.class);
|
||||
|
||||
protected File basedir;
|
||||
protected String uri;
|
||||
@@ -46,7 +47,7 @@ public abstract class AbstractSCMEnvironmentRepository implements EnvironmentRep
|
||||
protected String password;
|
||||
private String[] searchPaths = new String[0];
|
||||
|
||||
public AbstractSCMEnvironmentRepository(ConfigurableEnvironment environment) {
|
||||
public AbstractScmEnvironmentRepository(ConfigurableEnvironment environment) {
|
||||
this.environment = environment;
|
||||
this.basedir = createBaseDir();
|
||||
}
|
||||
@@ -130,10 +131,13 @@ public abstract class AbstractSCMEnvironmentRepository implements EnvironmentRep
|
||||
protected String[] getSearchLocations(File dir) {
|
||||
List<String> locations = new ArrayList<String>();
|
||||
locations.add(dir.toURI().toString());
|
||||
for (String path : searchPaths) {
|
||||
File file = new File(getWorkingDirectory(), path);
|
||||
if (file.isDirectory()) {
|
||||
locations.add(file.toURI().toString());
|
||||
String[] list = dir.list();
|
||||
if (list!=null) {
|
||||
for (String path : list) {
|
||||
File file = new File(dir, path);
|
||||
if (file.isDirectory() && PatternMatchUtils.simpleMatch(searchPaths, path)) {
|
||||
locations.add(file.toURI().toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
return locations.toArray(new String[0]);
|
||||
@@ -62,7 +62,7 @@ public class ConfigServerConfiguration {
|
||||
|
||||
@Bean
|
||||
public EnvironmentRepository environmentRepository() {
|
||||
return new SVNKitEnvironmentRepository(environment);
|
||||
return new SvnKitEnvironmentRepository(environment);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ import static org.springframework.util.StringUtils.hasText;
|
||||
* @author Dave Syer
|
||||
*
|
||||
*/
|
||||
public class JGitEnvironmentRepository extends AbstractSCMEnvironmentRepository {
|
||||
public class JGitEnvironmentRepository extends AbstractScmEnvironmentRepository {
|
||||
|
||||
private static Log logger = LogFactory.getLog(JGitEnvironmentRepository.class);
|
||||
|
||||
|
||||
@@ -41,9 +41,9 @@ import static org.springframework.util.StringUtils.hasText;
|
||||
* @author Michael Prankl
|
||||
*/
|
||||
@ConfigurationProperties("spring.cloud.config.server.svn")
|
||||
public class SVNKitEnvironmentRepository extends AbstractSCMEnvironmentRepository {
|
||||
public class SvnKitEnvironmentRepository extends AbstractScmEnvironmentRepository {
|
||||
|
||||
private static Log logger = LogFactory.getLog(SVNKitEnvironmentRepository.class);
|
||||
private static Log logger = LogFactory.getLog(SvnKitEnvironmentRepository.class);
|
||||
|
||||
@Override
|
||||
public Environment findOne(String application, String profile, String label) {
|
||||
@@ -110,7 +110,7 @@ public class SVNKitEnvironmentRepository extends AbstractSCMEnvironmentRepositor
|
||||
|
||||
}
|
||||
|
||||
public SVNKitEnvironmentRepository(ConfigurableEnvironment environment) {
|
||||
public SvnKitEnvironmentRepository(ConfigurableEnvironment environment) {
|
||||
super(environment);
|
||||
}
|
||||
|
||||
@@ -72,6 +72,18 @@ public class JGitEnvironmentRepositoryTests {
|
||||
.getPropertySources().get(0).getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nestedPattern() throws IOException {
|
||||
String uri = ConfigServerTestUtils.prepareLocalRepo("another-config-repo");
|
||||
repository.setUri(uri);
|
||||
repository.setSearchPaths(new String[] {"sub*"});
|
||||
repository.findOne("bar", "staging", "master");
|
||||
Environment environment = repository.findOne("bar", "staging", "master");
|
||||
assertEquals(2, environment.getPropertySources().size());
|
||||
assertEquals(repository.getUri() + "/sub/application.yml", environment
|
||||
.getPropertySources().get(0).getName());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void branch() {
|
||||
repository.setBasedir(basedir);
|
||||
|
||||
@@ -23,7 +23,7 @@ import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.springframework.cloud.config.environment.Environment;
|
||||
import org.springframework.cloud.config.server.ConfigServerTestUtils;
|
||||
import org.springframework.cloud.config.server.SVNKitEnvironmentRepository;
|
||||
import org.springframework.cloud.config.server.SvnKitEnvironmentRepository;
|
||||
import org.springframework.core.env.StandardEnvironment;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@@ -36,7 +36,7 @@ import static org.junit.Assert.assertEquals;
|
||||
public class SVNKitEnvironmentRepositoryTests {
|
||||
|
||||
private StandardEnvironment environment = new StandardEnvironment();
|
||||
private SVNKitEnvironmentRepository repository = new SVNKitEnvironmentRepository(
|
||||
private SvnKitEnvironmentRepository repository = new SvnKitEnvironmentRepository(
|
||||
environment);
|
||||
|
||||
private File basedir = new File("target/config");
|
||||
|
||||
Reference in New Issue
Block a user