Skip to content

Commit

Permalink
Merge pull request quarkusio#25867 from Karm/issue-25865
Browse files Browse the repository at this point in the history
Podman on Windows needs one /, not two // prefix
  • Loading branch information
Sanne authored Jun 8, 2022
2 parents 6ff2fb4 + db7ab71 commit 1e25972
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,8 @@ protected List<String> getContainerRuntimeBuildArgs() {
List<String> containerRuntimeArgs = super.getContainerRuntimeBuildArgs();
String volumeOutputPath = outputPath;
if (SystemUtils.IS_OS_WINDOWS) {
volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath);
volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath,
containerRuntime == ContainerRuntimeUtil.ContainerRuntime.PODMAN);
}

Collections.addAll(containerRuntimeArgs, "-v",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,8 @@ private boolean runUpxInContainer(NativeImageBuildItem nativeImage, NativeConfig

String volumeOutputPath = nativeImage.getPath().toFile().getParentFile().getAbsolutePath();
if (SystemUtils.IS_OS_WINDOWS) {
volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath);
volumeOutputPath = FileUtil.translateToVolumePath(volumeOutputPath,
containerRuntime == ContainerRuntimeUtil.ContainerRuntime.PODMAN);
} else if (SystemUtils.IS_OS_LINUX) {
String uid = getLinuxID("-ur");
String gid = getLinuxID("-gr");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,14 +78,15 @@ public static byte[] readFileContents(InputStream inputStream) throws IOExceptio
* @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".
*/
public static String translateToVolumePath(String windowsStylePath) {
public static String translateToVolumePath(String windowsStylePath, boolean isPodman) {
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("");
return "//" + m.group(1).toLowerCase() + slash + path;
// Ad `/' and `//' see https://github.com/containers/podman/issues/14414
return (isPodman ? "/" : "//") + m.group(1).toLowerCase() + slash + path;
}
return translated;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,20 @@ public class FileUtilTest {
@Test
public void testTranslateToVolumePath() {
// Windows-Style paths are formatted.
assertEquals("//c/", translateToVolumePath("C"));
assertEquals("//c/", translateToVolumePath("C:"));
assertEquals("//c/", translateToVolumePath("C:\\"));
assertEquals("//c/Users", translateToVolumePath("C:\\Users"));
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"));
translateToVolumePath("C:\\Users\\Quarkus\\lambdatest-1.0-SNAPSHOT-native-image-source-jar", false));

// Side effect for Unix-style path.
assertEquals("//c/Users/Quarkus", translateToVolumePath("c:/Users/Quarkus"));
assertEquals("//c/Users/Quarkus", translateToVolumePath("c:/Users/Quarkus", false));

// Side effects for fancy inputs - for the sake of documentation.
assertEquals("something/bizarre", translateToVolumePath("something\\bizarre"));
assertEquals("something.bizarre", translateToVolumePath("something.bizarre"));
assertEquals("something/bizarre", translateToVolumePath("something\\bizarre", false));
assertEquals("something.bizarre", translateToVolumePath("something.bizarre", false));
}

}

0 comments on commit 1e25972

Please sign in to comment.