From 37e77166356c2a8162dda1f5a16d325f59f41b10 Mon Sep 17 00:00:00 2001 From: Michal Karm Babacek Date: Tue, 28 Jun 2022 22:58:30 +0200 Subject: [PATCH] Simplify Windows path for Docker Desktop and Podman --- .../NativeImageBuildLocalContainerRunner.java | 3 +-- .../pkg/steps/UpxCompressionBuildStep.java | 3 +-- .../io/quarkus/deployment/util/FileUtil.java | 15 ++++++-------- .../quarkus/deployment/util/FileUtilTest.java | 20 +++++++++---------- 4 files changed, 18 insertions(+), 23 deletions(-) diff --git a/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/NativeImageBuildLocalContainerRunner.java b/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/NativeImageBuildLocalContainerRunner.java index 8cabc251e4a3b..da449581e169e 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/NativeImageBuildLocalContainerRunner.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/NativeImageBuildLocalContainerRunner.java @@ -40,8 +40,7 @@ protected List getContainerRuntimeBuildArgs() { List containerRuntimeArgs = super.getContainerRuntimeBuildArgs(); String volumeOutputPath = outputPath; if (SystemUtils.IS_OS_WINDOWS) { - volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath, - containerRuntime == ContainerRuntimeUtil.ContainerRuntime.PODMAN); + volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath); } Collections.addAll(containerRuntimeArgs, "-v", diff --git a/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/UpxCompressionBuildStep.java b/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/UpxCompressionBuildStep.java index a1023f7fd4448..043ff6fd1e38c 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/UpxCompressionBuildStep.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/UpxCompressionBuildStep.java @@ -122,8 +122,7 @@ private boolean runUpxInContainer(NativeImageBuildItem nativeImage, NativeConfig String volumeOutputPath = nativeImage.getPath().toFile().getParentFile().getAbsolutePath(); if (SystemUtils.IS_OS_WINDOWS) { - volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath, - containerRuntime == ContainerRuntimeUtil.ContainerRuntime.PODMAN); + volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath); } else if (SystemUtils.IS_OS_LINUX) { String uid = getLinuxID("-ur"); String gid = getLinuxID("-gr"); diff --git a/core/deployment/src/main/java/io/quarkus/deployment/util/FileUtil.java b/core/deployment/src/main/java/io/quarkus/deployment/util/FileUtil.java index de20b26d2f03f..d976d201a138b 100644 --- a/core/deployment/src/main/java/io/quarkus/deployment/util/FileUtil.java +++ b/core/deployment/src/main/java/io/quarkus/deployment/util/FileUtil.java @@ -65,28 +65,25 @@ public static byte[] readFileContents(InputStream inputStream) throws IOExceptio } /** - * Translates a file path from the Windows Style to a syntax accepted by Docker, - * so that volumes be safely mounted in both Docker for Windows and the legacy - * Docker Toolbox. + * Translates a file path from the Windows Style to a syntax accepted by Docker and Podman, + * so that volumes be safely mounted in both Docker Desktop for Windows and Podman Windows. *

- * docker run -v //c/foo/bar:/somewhere (...) + * docker run -v /c/foo/bar:/somewhere (...) *

* You should only use this method on Windows-style paths, and not Unix-style * paths. * - * @see https://github.com/quarkusio/quarkus/issues/5360 * @param windowsStylePath A path formatted in Windows-style, e.g. "C:\foo\bar". - * @return A translated path accepted by Docker, e.g. "//c/foo/bar". + * @return A translated path accepted by Docker, e.g. "/c/foo/bar". */ - public static String translateToVolumePath(String windowsStylePath, boolean isPodman) { + public static String translateToVolumePath(String windowsStylePath) { String translated = windowsStylePath.replace('\\', '/'); Pattern p = Pattern.compile("^(\\w)(?:$|:(/)?(.*))"); Matcher m = p.matcher(translated); if (m.matches()) { String slash = Optional.ofNullable(m.group(2)).orElse("/"); String path = Optional.ofNullable(m.group(3)).orElse(""); - // Ad `/' and `//' see https://github.com/containers/podman/issues/14414 - return (isPodman ? "/" : "//") + m.group(1).toLowerCase() + slash + path; + return "/" + m.group(1).toLowerCase() + slash + path; } return translated; } diff --git a/core/deployment/src/test/java/io/quarkus/deployment/util/FileUtilTest.java b/core/deployment/src/test/java/io/quarkus/deployment/util/FileUtilTest.java index 97733a37bde7f..228d4676fea00 100644 --- a/core/deployment/src/test/java/io/quarkus/deployment/util/FileUtilTest.java +++ b/core/deployment/src/test/java/io/quarkus/deployment/util/FileUtilTest.java @@ -10,20 +10,20 @@ public class FileUtilTest { @Test public void testTranslateToVolumePath() { // Windows-Style paths are formatted. - assertEquals("/c/tmp/code-with-quarkus", translateToVolumePath("C:\\tmp\\code-with-quarkus", true)); - assertEquals("//c/", translateToVolumePath("C", false)); - assertEquals("//c/", translateToVolumePath("C:", false)); - assertEquals("//c/", translateToVolumePath("C:\\", false)); - assertEquals("//c/Users", translateToVolumePath("C:\\Users", false)); - assertEquals("//c/Users/Quarkus/lambdatest-1.0-SNAPSHOT-native-image-source-jar", - translateToVolumePath("C:\\Users\\Quarkus\\lambdatest-1.0-SNAPSHOT-native-image-source-jar", false)); + assertEquals("/c/tmp/code-with-quarkus", translateToVolumePath("C:\\tmp\\code-with-quarkus")); + assertEquals("/c/", translateToVolumePath("C")); + assertEquals("/c/", translateToVolumePath("C:")); + assertEquals("/c/", translateToVolumePath("C:\\")); + assertEquals("/c/Users", translateToVolumePath("C:\\Users")); + assertEquals("/c/Users/Quarkus/lambdatest-1.0-SNAPSHOT-native-image-source-jar", + translateToVolumePath("C:\\Users\\Quarkus\\lambdatest-1.0-SNAPSHOT-native-image-source-jar")); // Side effect for Unix-style path. - assertEquals("//c/Users/Quarkus", translateToVolumePath("c:/Users/Quarkus", false)); + assertEquals("/c/Users/Quarkus", translateToVolumePath("c:/Users/Quarkus")); // Side effects for fancy inputs - for the sake of documentation. - assertEquals("something/bizarre", translateToVolumePath("something\\bizarre", false)); - assertEquals("something.bizarre", translateToVolumePath("something.bizarre", false)); + assertEquals("something/bizarre", translateToVolumePath("something\\bizarre")); + assertEquals("something.bizarre", translateToVolumePath("something.bizarre")); } }