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 index e9680352..8280d950 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 @@ -26,13 +26,12 @@ import org.tmatesoft.svn.core.wc2.SvnCheckout; import org.tmatesoft.svn.core.wc2.SvnOperationFactory; import org.tmatesoft.svn.core.wc2.SvnTarget; import org.tmatesoft.svn.core.wc2.SvnUpdate; - import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.config.environment.Environment; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.util.Assert; import org.springframework.util.StringUtils; - + import static org.springframework.util.StringUtils.hasText; /** @@ -81,8 +80,21 @@ public class SvnKitEnvironmentRepository extends AbstractScmEnvironmentRepositor private synchronized Environment loadEnvironment(String application, String profile, String label) { final NativeEnvironmentRepository environmentRepository = new NativeEnvironmentRepository( getEnvironment()); - environmentRepository.setSearchLocations(getSearchLocations(getSvnPath( - getWorkingDirectory(), label))); + String[] locations = getSearchLocations(getSvnPath( + getWorkingDirectory(), label)); + boolean exists = false; + for (String location : locations) { + location = location.startsWith("file:") ? location.substring("file:".length()) : location; + location = StringUtils.cleanPath(location); + if (new File(location).exists()) { + exists = true; + break; + } + } + if (!exists) { + throw new NoSuchLabelException("No label found for: " + label); + } + environmentRepository.setSearchLocations(locations); return environmentRepository.findOne(application, profile, label); } diff --git a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryIntegrationTests.java b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryIntegrationTests.java index a88e5ee0..b1200591 100644 --- a/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryIntegrationTests.java +++ b/spring-cloud-config-server/src/test/java/org/springframework/cloud/config/server/SVNKitEnvironmentRepositoryIntegrationTests.java @@ -129,7 +129,7 @@ public class SVNKitEnvironmentRepositoryIntegrationTests { assertEquals("trunk", repository.getDefaultLabel()); } - @Test + @Test(expected=NoSuchLabelException.class) public void invalidLabel() throws Exception { String uri = ConfigServerTestUtils.prepareLocalSvnRepo( "src/test/resources/svn-config-repo", "target/config"); 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 2310e8c8..bd2429a0 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 @@ -91,7 +91,7 @@ public class SVNKitEnvironmentRepositoryTests { .contains("application.yml")); } - @Test + @Test(expected=NoSuchLabelException.class) public void invalidLabel() { Environment environment = repository.findOne("bar", "staging", "unknownlabel"); assertEquals(0, environment.getPropertySources().size());