Only apply permission to files with +x

Change-Id: Ied3304a0f9687b601666c4ec7ce7a34157254d7c
diff --git a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java
index 41443ad..e7239d3 100755
--- a/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java
+++ b/tools/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/repository/Archive.java
@@ -807,8 +807,12 @@
                 }

 

                 // if needed set the permissions.

-                if (usingUnixPerm) {

-                    setPermission(destFile, entry.getUnixMode());

+                if (usingUnixPerm && destFile.isFile()) {

+                    // get the mode and test if it contains the executable bit

+                    int mode = entry.getUnixMode();

+                    if ((mode & 0111) != 0) {

+                        setExecutablePermission(destFile);

+                    }

                 }

 

                 // Increment progress bar to match. We update only between files.

@@ -928,19 +932,14 @@
     }

 

     /**

-     * Sets the Unix permission on a file or folder.

+     * Sets the executable Unix permission (0777) on a file or folder.

      * @param file The file to set permissions on.

      * @param unixMode the permissions as received from {@link ZipArchiveEntry#getUnixMode()}.

      * @throws IOException

      */

-    private void setPermission(File file, int unixMode) throws IOException {

-        // permissions contains more than user/group/all, and we need the 777 display mode, so we

-        // convert it in octal string and take the last 3 digits.

-        String permission = String.format("%o", unixMode);

-        permission = permission.substring(permission.length() - 3, permission.length());

-

+    private void setExecutablePermission(File file) throws IOException {

         Runtime.getRuntime().exec(new String[] {

-           "chmod", permission, file.getAbsolutePath()

+           "chmod", "777", file.getAbsolutePath()

         });

     }

 }