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:
Dave Syer
2015-03-16 11:01:21 +00:00
parent 4ae639c351
commit ee4717bbab
6 changed files with 30 additions and 14 deletions

View File

@@ -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]);

View File

@@ -62,7 +62,7 @@ public class ConfigServerConfiguration {
@Bean
public EnvironmentRepository environmentRepository() {
return new SVNKitEnvironmentRepository(environment);
return new SvnKitEnvironmentRepository(environment);
}
}

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -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");