diff --git a/liquibase-core/src/main/java/liquibase/resource/URIResource.java b/liquibase-core/src/main/java/liquibase/resource/URIResource.java index 14275103673..2984e379923 100644 --- a/liquibase-core/src/main/java/liquibase/resource/URIResource.java +++ b/liquibase-core/src/main/java/liquibase/resource/URIResource.java @@ -25,7 +25,7 @@ public Resource resolve(String other) { @Override public Resource resolveSibling(String other) { - return new URIResource(resolveSiblingPath(other), URI.create(getUri().toString().replaceFirst("/.*?$", "") + "/" + other)); + return new URIResource(resolveSiblingPath(other), URI.create(getUri().toString().replaceFirst("/[^/]*$", "") + "/" + other)); } @Override diff --git a/liquibase-core/src/main/java/liquibase/resource/ZipResourceAccessor.java b/liquibase-core/src/main/java/liquibase/resource/ZipResourceAccessor.java index 568a227203b..81da1cbd1d1 100644 --- a/liquibase-core/src/main/java/liquibase/resource/ZipResourceAccessor.java +++ b/liquibase-core/src/main/java/liquibase/resource/ZipResourceAccessor.java @@ -4,10 +4,10 @@ import java.io.File; import java.io.FileNotFoundException; -import java.io.IOException; import java.net.URI; import java.nio.file.*; import java.util.Collections; +import java.util.List; public class ZipResourceAccessor extends AbstractPathResourceAccessor { @@ -64,4 +64,8 @@ protected Resource createResource(Path file, String pathToAdd) { return new PathResource(pathToAdd, file); } + @Override + public List describeLocations() { + return Collections.singletonList(fileSystem.toString()); + } } diff --git a/liquibase-core/src/test/groovy/liquibase/resource/URIResourceAccessorTest.groovy b/liquibase-core/src/test/groovy/liquibase/resource/URIResourceAccessorTest.groovy index d507cf8c9b8..34dd51e5e3c 100644 --- a/liquibase-core/src/test/groovy/liquibase/resource/URIResourceAccessorTest.groovy +++ b/liquibase-core/src/test/groovy/liquibase/resource/URIResourceAccessorTest.groovy @@ -1,10 +1,23 @@ package liquibase.resource import spock.lang.Specification +import spock.lang.Unroll class URIResourceAccessorTest extends Specification { -// "file:/c:/" | "file:/c:/" -// "http://example.local/nowhere.txt" | "http://example.local/nowhere.txt" + @Unroll + def resolveSibling() { + when: + def newResource = new URIResource(path, URI.create(uri)).resolveSibling(input) + then: + newResource.uri.toString() == expectedUri + newResource.path == expectedPath + + where: + path | uri | input | expectedUri | expectedPath + "my/file.xml" | "file:/local/my/file.xml" | "other.csv" | "file:/local/my/other.csv" | "my/other.csv" + "liquibase/harness/data/changelogs/loadData.xml" | "jar:file:/C:/Users/example/liquibase-test-harness-1.0.6.jar!/liquibase/harness/data/changelogs/loadData.xml" | "load.csv" | "jar:file:/C:/Users/example/liquibase-test-harness-1.0.6.jar!/liquibase/harness/data/changelogs/load.csv" | "liquibase/harness/data/changelogs/load.csv" + "my/file.xml" | "http:/local/my/file.xml" | "other.csv" | "http:/local/my/other.csv" | "my/other.csv" + } } diff --git a/liquibase-core/src/test/groovy/liquibase/resource/ZipResourceAccessorTest.groovy b/liquibase-core/src/test/groovy/liquibase/resource/ZipResourceAccessorTest.groovy index 8dce82d68fe..4c267232ff3 100644 --- a/liquibase-core/src/test/groovy/liquibase/resource/ZipResourceAccessorTest.groovy +++ b/liquibase-core/src/test/groovy/liquibase/resource/ZipResourceAccessorTest.groovy @@ -69,4 +69,10 @@ class ZipResourceAccessorTest extends Specification { ] } + def describeLocations() { + expect: + simpleTestAccessor.describeLocations().size() == 1 + simpleTestAccessor.describeLocations()[0].replace("\\", "/").endsWith("target/test-classes/simple-files.jar") + } + }