diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bede827..0d63dbc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## [0.8.6] 2024-09-11 + +- Fix addOverlay bug on subfolders +- Improve Windows code coverage + ## [0.8.5] 2024-09-10a - Error with packaging subfolders on S3 overlay diff --git a/plugins/nf-quilt/src/main/nextflow/quilt/QuiltObserver.groovy b/plugins/nf-quilt/src/main/nextflow/quilt/QuiltObserver.groovy index ca022c84..903d200c 100644 --- a/plugins/nf-quilt/src/main/nextflow/quilt/QuiltObserver.groovy +++ b/plugins/nf-quilt/src/main/nextflow/quilt/QuiltObserver.groovy @@ -131,12 +131,23 @@ class QuiltObserver implements TraceObserver { } } - void addOverlay(String pkgKey, Path source) { + String pkgRelative(String pkgKey, Path dest) { + String destString = dest.toAbsolutePath().normalize() + // find pkgKey in destination.toString() + int index = destString.indexOf(pkgKey) + // return the portion after the end of pkgKey + if (index >= 0) { + return destString.substring(index + pkgKey.length() + 1) + } + return null + } + + void addOverlay(String pkgKey, Path dest, Path source) { lock.lock() try { Map overlays = packageOverlays.get(pkgKey, [:]) as Map String relPath = workRelative(source) - log.debug("addOverlay[$relPath] = $source") + log.debug("addOverlay[$relPath] = dest:$dest <= source:$source") overlays[relPath] = source packageOverlays[pkgKey] = overlays } finally { @@ -159,7 +170,7 @@ class QuiltObserver implements TraceObserver { log.debug("canOverlayPath: checking key[$key] for $dest") if (dest.toString().contains(key)) { log.debug("canOverlayPath: matched key[$key] to $dest") - addOverlay(key, source) + addOverlay(key, dest, source) return true } } diff --git a/plugins/nf-quilt/src/test/nextflow/quilt/QuiltObserverTest.groovy b/plugins/nf-quilt/src/test/nextflow/quilt/QuiltObserverTest.groovy index 728a1d98..d38ff011 100644 --- a/plugins/nf-quilt/src/test/nextflow/quilt/QuiltObserverTest.groovy +++ b/plugins/nf-quilt/src/test/nextflow/quilt/QuiltObserverTest.groovy @@ -20,6 +20,7 @@ import nextflow.quilt.QuiltSpecification import nextflow.quilt.QuiltObserver import nextflow.quilt.jep.QuiltPackage import nextflow.Session +import spock.lang.Ignore import java.nio.file.Path import java.nio.file.Paths @@ -95,6 +96,19 @@ class QuiltObserverTest extends QuiltSpecification { println('done') } + void 'should return pkgRelative path for dest'() { + given: + QuiltObserver observer = makeObserver() + expect: + Path dest = Paths.get(TEST_KEY, folderPath) + String relPath = observer.pkgRelative(offset, dest) + rc == (relPath == folderPath) + where: + rc | offset | folderPath + true | TEST_KEY | 'output/file.txt' + false | SPEC_KEY | 'output/file.txt' + } + void 'should findOutputParams'() { given: QuiltObserver observer = makeObserver() @@ -150,6 +164,21 @@ class QuiltObserverTest extends QuiltSpecification { false | 'output/not/a/key' } + /// source usually lacks subfolder paths + @Ignore + void 'should addOverlay dest path with subfolders'() { + given: + QuiltObserver observer = makeObserver() + Path dest = Paths.get('output/file.txt') + Path source = Paths.get('file.txt') + String targetKey = QuiltPackage.osConvert('bucket/prefix/suffix') + expect: + !observer.packageOverlays.containsKey(targetKey) + observer.addOverlay(targetKey, dest, source) + observer.packageOverlays.containsKey(targetKey) + observer.packageOverlays[targetKey].containsKey('output/file.txt') + } + void 'should not error on onFlowComplete success'() { given: String quilt_uri = 'quilt+s3://bucket#package=prefix%2fsuffix'