You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by jh...@apache.org on 2016/04/29 11:52:13 UTC

[2/2] ant git commit: Files.setPermission may throw additional exceptions (e.g. on Win7-NTFS)

Files.setPermission may throw additional exceptions (e.g. on Win7-NTFS)


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/a80c75af
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/a80c75af
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/a80c75af

Branch: refs/heads/master
Commit: a80c75af5556ff31eac7607a0ed8715acf111ef5
Parents: 75f1237
Author: Jan Matèrne <jh...@apache.org>
Authored: Fri Apr 29 11:51:04 2016 +0200
Committer: Jan Matèrne <jh...@apache.org>
Committed: Fri Apr 29 11:51:04 2016 +0200

----------------------------------------------------------------------
 .../tools/ant/taskdefs/SetPermissions.java      | 38 +++++++++++++-------
 1 file changed, 26 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/a80c75af/src/main/org/apache/tools/ant/taskdefs/SetPermissions.java
----------------------------------------------------------------------
diff --git a/src/main/org/apache/tools/ant/taskdefs/SetPermissions.java b/src/main/org/apache/tools/ant/taskdefs/SetPermissions.java
index b417060..b1ccc5a 100644
--- a/src/main/org/apache/tools/ant/taskdefs/SetPermissions.java
+++ b/src/main/org/apache/tools/ant/taskdefs/SetPermissions.java
@@ -31,6 +31,7 @@ import org.apache.tools.ant.types.Resource;
 import org.apache.tools.ant.types.ResourceCollection;
 import org.apache.tools.ant.types.resources.Resources;
 import org.apache.tools.ant.util.PermissionUtils;
+import org.apache.tools.ant.util.StringUtils;
 
 /**
  * Sets {@link PosixFilePermission}s for resources.
@@ -95,18 +96,31 @@ public class SetPermissions extends Task {
         if (resources == null) {
             throw new BuildException("At least one resource-collection is required");
         }
-        for (Resource r : resources) {
-            try {
-                PermissionUtils.setPermissions(r, permissions);
-            } catch (IOException ioe) {
-                String msg = "Failed to set permissions on " + r + " due to "
-                    + ioe.getMessage();
-                if (failonerror) {
-                    throw new BuildException(msg, ioe);
-                } else {
-                    log("Warning: " + msg, Project.MSG_ERR);
-                }
-            }
+        Resource currentResource = null;
+        try {
+	        for (Resource r : resources) {
+	        	currentResource = r;
+	            try {
+	                PermissionUtils.setPermissions(r, permissions);
+	            } catch (IOException ioe) {
+	                maybeThrowException(ioe, "Failed to set permissions on '%s' due to %s", r, ioe.getMessage());
+	            }
+	        }
+        } catch (UnsupportedOperationException uoe) {
+        	maybeThrowException(null, "the associated file system of resource '%s' does not support the PosixFileAttributeView", currentResource);
+        } catch (ClassCastException uoe) {
+        	maybeThrowException(null, "some specified permissions are not of type PosixFilePermission: %s", StringUtils.join(permissions, ", "));
+        } catch (SecurityException uoe) {
+        	maybeThrowException(null, "the SecurityManager denies role accessUserInformation or write access for SecurityManager.checkWrite for resource '%s'", currentResource);
         }
     }
+
+	private void maybeThrowException(Exception ioe, String msgFormat, Object... msgArgs) {
+		String msg = String.format(msgFormat, msgArgs);
+		if (failonerror) {
+		    throw new BuildException(msg, ioe);
+		} else {
+		    log("Warning: " + msg, Project.MSG_ERR);
+		}
+	}
 }