This is an automated email from the ASF dual-hosted git repository. bodewig pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/ant.git
commit a0b0b25f61b97d700495e93a8e07189f1dc1e511 Author: Stefan Bodewig <[email protected]> AuthorDate: Sat Feb 7 22:04:13 2026 +0100 help PermissionUtils to tell WIndows junctions from plain directories --- .../org/apache/tools/ant/util/PermissionUtils.java | 2 +- .../apache/tools/ant/util/PermissionUtilsTest.java | 20 +++++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/main/org/apache/tools/ant/util/PermissionUtils.java b/src/main/org/apache/tools/ant/util/PermissionUtils.java index 8e52a16fb..b32e410e7 100644 --- a/src/main/org/apache/tools/ant/util/PermissionUtils.java +++ b/src/main/org/apache/tools/ant/util/PermissionUtils.java @@ -223,7 +223,7 @@ public class PermissionUtils { Files.readAttributes(p, BasicFileAttributes.class, LinkOption.NOFOLLOW_LINKS); if (attrs.isRegularFile()) { return FileType.REGULAR_FILE; - } else if (attrs.isDirectory()) { + } else if (attrs.isDirectory() && !attrs.isOther()) { return FileType.DIR; } else if (attrs.isSymbolicLink()) { return FileType.SYMLINK; diff --git a/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java b/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java index 8152ae477..6fb52d416 100644 --- a/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java +++ b/src/tests/junit/org/apache/tools/ant/util/PermissionUtilsTest.java @@ -32,7 +32,9 @@ import java.nio.file.attribute.PosixFilePermission; import java.util.EnumSet; import java.util.Set; +import org.apache.tools.ant.taskdefs.condition.CanCreateSymbolicLink; import org.apache.tools.ant.taskdefs.condition.Os; +import org.apache.tools.ant.taskdefs.optional.windows.Mklink; import org.apache.tools.ant.types.resources.FileResource; import org.apache.tools.ant.types.resources.TarResource; import org.apache.tools.ant.types.resources.ZipResource; @@ -97,7 +99,7 @@ public class PermissionUtilsTest { @Test public void detectsFileTypeOfSymbolicLinkFromPath() throws IOException { - if (Os.isFamily("unix")) { + if (new CanCreateSymbolicLink().eval()) { Path symlink = folder.getRoot().toPath().resolve("link.tst"); Files.createSymbolicLink(symlink, folder.newFile("ant.tst").toPath()); assertEquals(PermissionUtils.FileType.SYMLINK, @@ -105,6 +107,22 @@ public class PermissionUtilsTest { } } + @Test + public void detectsFileTypeOfWindowsJunctionFromPath() throws IOException { + if (Os.isFamily("windows")) { + Path junction = folder.getRoot().toPath().resolve("link.tst"); + Mklink task = new Mklink(); + Mklink.LinkType linkType = new Mklink.LinkType(); + linkType.setValue("junction"); + task.setLinkType(linkType); + task.setLink(junction.toFile()); + task.setTargetFile(folder.newFolder("ant.tst")); + task.execute(); + assertEquals(PermissionUtils.FileType.OTHER, + PermissionUtils.FileType.of(junction)); + } + } + @Test public void getSetPermissionsWorksForFiles() throws IOException { File f = folder.newFile("ant.tst");
