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");

Reply via email to