diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/AbstractSCMEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/AbstractScmEnvironmentRepository.java similarity index 85% rename from spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/AbstractSCMEnvironmentRepository.java rename to spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/AbstractScmEnvironmentRepository.java index 8fba81b6..43d4e129 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/AbstractSCMEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/AbstractScmEnvironmentRepository.java @@ -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 locations = new ArrayList(); 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]); diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerConfiguration.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerConfiguration.java index a7f14baf..7d7587dd 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerConfiguration.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/ConfigServerConfiguration.java @@ -62,7 +62,7 @@ public class ConfigServerConfiguration { @Bean public EnvironmentRepository environmentRepository() { - return new SVNKitEnvironmentRepository(environment); + return new SvnKitEnvironmentRepository(environment); } } 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 6ad3b19f..43543012 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 @@ -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); diff --git a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepository.java b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/SvnKitEnvironmentRepository.java similarity index 93% rename from spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepository.java rename to spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/SvnKitEnvironmentRepository.java index 848c66b9..e4a2effc 100644 --- a/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepository.java +++ b/spring-cloud-config-server/src/main/java/org/springframework/cloud/config/server/SvnKitEnvironmentRepository.java @@ -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); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java index 1875b562..5b667c7b 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/JGitEnvironmentRepositoryTests.java @@ -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); diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryTests.java index 69253059..c25bc4df 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryTests.java @@ -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");