Author: bodewig
Date: Tue Aug 25 03:30:17 2009
New Revision: 807464

URL: http://svn.apache.org/viewvc?rev=807464&view=rev
Log:
port preserve0permissions from core <zip>

Modified:
    
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
    ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml
    ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml
    ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml
    ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml

Modified: 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java?rev=807464&r1=807463&r2=807464&view=diff
==============================================================================
--- 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
 (original)
+++ 
ant/sandbox/antlibs/compress/trunk/src/main/org/apache/ant/compress/taskdefs/ArchiveBase.java
 Tue Aug 25 03:30:17 2009
@@ -59,6 +59,7 @@
 import org.apache.tools.ant.types.resources.ArchiveResource;
 import org.apache.tools.ant.types.resources.FileResource;
 import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.zip.UnixStat;
 
 /**
  * Base implementation of tasks creating archives.
@@ -72,6 +73,7 @@
     private Mode mode = new Mode();
     private String encoding;
     private boolean filesOnly = true;
+    private boolean preserve0permissions = false;
 
     protected ArchiveBase(StreamFactory factory, EntryBuilder builder) {
         this.factory = factory;
@@ -124,6 +126,15 @@
         filesOnly = b;
     }
 
+    /**
+     * Whether 0 permissions read from an archive should be considered
+     * real permissions (that should be preserved) or missing
+     * permissions (which is the default).
+     */
+    public void setPreserve0permissions(boolean b) {
+        preserve0permissions = b;
+    }
+
     public void execute() {
         validate();
         if (!dest.isExists()) {
@@ -428,7 +439,7 @@
     /**
      * Ensures a forward slash is used as file separator.
      */
-    protected static String bendSlashesForward(String s) {
+    protected String bendSlashesForward(String s) {
         if (s != null) {
             s = s.replace('\\', '/');
             if (File.separatorChar != '/' && File.separatorChar != '\\') { 
@@ -472,8 +483,9 @@
      * Various flags a (archive) resource may hold in addition to
      * being a plain resource.
      */
-    public static class ResourceFlags {
+    public class ResourceFlags {
         private final int mode;
+        private final boolean modeSet;
         private final int gid;
         private final int uid;
         private final ZipExtraField[] extraFields;
@@ -511,9 +523,11 @@
             this.uid = uid;
             this.userName = userName;
             this.groupName = groupName;
+            int m = mode & UnixStat.PERM_MASK;
+            modeSet = mode >= 0 && (m > 0 || (m == 0 && preserve0permissions));
         }
 
-        public boolean hasModeBeenSet() { return mode >= 0; }
+        public boolean hasModeBeenSet() { return modeSet; }
         public int getMode() { return mode; }
 
         public ZipExtraField[] getZipExtraFields() { return extraFields; }
@@ -538,7 +552,7 @@
     /**
      * Various flags a (archive) resource collection may hold.
      */
-    public static class ResourceCollectionFlags extends ResourceFlags {
+    public class ResourceCollectionFlags extends ResourceFlags {
         private final String prefix, fullpath;
         private final int dirMode;
 
@@ -589,7 +603,7 @@
     /**
      * Binds a resource to additional data that may be present.
      */
-    public static class ResourceWithFlags {
+    public class ResourceWithFlags {
         private final Resource r;
         private final ResourceCollectionFlags rcFlags;
         private final ResourceFlags rFlags;

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml?rev=807464&r1=807463&r2=807464&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml (original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/ar-test.xml Tue Aug 25 
03:30:17 2009
@@ -261,4 +261,32 @@
     </assertResourceDoesntExist>
   </target>
 
+  <target name="-setUp0Permissions" depends="setUp">
+    <property name="src" location="${input}/src.ar"/>
+    <cmp:ar destfile="${src}" preserve0permissions="true">
+      <cmp:arfileset src="../resources/asf-logo.gif.ar"
+                     filemode="0"
+                     includes="asf-logo.gif"/>
+    </cmp:ar>
+  </target>
+
+  <target name="test0PermissionsGetReplaced"
+                     depends="-setUp0Permissions">
+    <cmp:ar destfile="${dest}">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:ar>
+    <checkProperties dateTime="2009-07-31-20:11:13 +0200" mode="644"
+                     uid="1000" gid="1000"/>
+  </target>
+
+  <target name="testPreserve0Permissions"
+                     depends="-setUp0Permissions">
+    <cmp:ar destfile="${dest}" preserve0permissions="true">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:ar>
+    <checkProperties dateTime="2009-07-31-20:11:13 +0200" mode="0"
+                     uid="1000" gid="1000"/>
+  </target>
 </project>

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml?rev=807464&r1=807463&r2=807464&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml 
(original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/cpio-test.xml Tue Aug 
25 03:30:17 2009
@@ -293,4 +293,32 @@
     </assertResourceDoesntExist>
   </target>
 
+  <target name="-setUp0Permissions" depends="setUp">
+    <property name="src" location="${input}/src.ar"/>
+    <cmp:ar destfile="${src}" preserve0permissions="true">
+      <cmp:arfileset src="../resources/asf-logo.gif.ar"
+                     filemode="0"
+                     includes="asf-logo.gif"/>
+    </cmp:ar>
+  </target>
+
+  <target name="test0PermissionsGetReplaced"
+                     depends="-setUp0Permissions">
+    <cmp:cpio destfile="${dest}">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:cpio>
+    <checkProperties dateTime="2009-07-31-20:11:13 +0200" mode="644"
+                     uid="1000" gid="1000"/>
+  </target>
+
+  <target name="testPreserve0Permissions"
+                     depends="-setUp0Permissions">
+    <cmp:cpio destfile="${dest}" preserve0permissions="true">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:cpio>
+    <checkProperties dateTime="2009-07-31-20:11:13 +0200" mode="0"
+                     uid="1000" gid="1000"/>
+  </target>
 </project>

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml?rev=807464&r1=807463&r2=807464&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml (original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/tar-test.xml Tue Aug 
25 03:30:17 2009
@@ -309,4 +309,32 @@
     </assertResourceDoesntExist>
   </target>
 
+  <target name="-setUp0Permissions" depends="setUp">
+    <property name="src" location="${input}/src.ar"/>
+    <cmp:ar destfile="${src}" preserve0permissions="true">
+      <cmp:arfileset src="../resources/asf-logo.gif.ar"
+                     filemode="0"
+                     includes="asf-logo.gif"/>
+    </cmp:ar>
+  </target>
+
+  <target name="test0PermissionsGetReplaced"
+                     depends="-setUp0Permissions">
+    <cmp:tar destfile="${dest}">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:tar>
+    <checkProperties dateTime="2009-07-31-20:11:13 +0200" mode="644"
+                     uid="1000" gid="1000"/>
+  </target>
+
+  <target name="testPreserve0Permissions"
+                     depends="-setUp0Permissions">
+    <cmp:tar destfile="${dest}" preserve0permissions="true">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:tar>
+    <checkProperties dateTime="2009-07-31-20:11:13 +0200" mode="0"
+                     uid="1000" gid="1000"/>
+  </target>
 </project>

Modified: ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml
URL: 
http://svn.apache.org/viewvc/ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml?rev=807464&r1=807463&r2=807464&view=diff
==============================================================================
--- ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml (original)
+++ ant/sandbox/antlibs/compress/trunk/src/tests/antunit/zip-test.xml Tue Aug 
25 03:30:17 2009
@@ -276,4 +276,37 @@
     </assertResourceDoesntExist>
   </target>
 
+  <target name="-setUp0Permissions" depends="setUp">
+    <property name="src" location="${input}/src.ar"/>
+    <cmp:ar destfile="${src}" preserve0permissions="true">
+      <cmp:arfileset src="../resources/asf-logo.gif.ar"
+                     filemode="0"
+                     includes="asf-logo.gif"/>
+    </cmp:ar>
+    <au:assertTrue>
+      <cmp:hasmode mode="0">
+        <cmp:arentry name="asf-logo.gif">
+          <file file="${src}"/>
+        </cmp:arentry>
+      </cmp:hasmode>
+    </au:assertTrue>
+  </target>
+
+  <target name="test0PermissionsGetReplaced"
+                     depends="-setUp0Permissions">
+    <cmp:zip destfile="${dest}">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:zip>
+    <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="644"/>
+  </target>
+
+  <target name="testPreserve0Permissions"
+                     depends="-setUp0Permissions">
+    <cmp:zip destfile="${dest}" preserve0permissions="true">
+      <cmp:arfileset src="${src}"
+                     includes="asf-logo.gif"/>
+    </cmp:zip>
+    <checkProperties dateTime="2009-07-31-20:11:12 +0200" mode="0"/>
+  </target>
 </project>


Reply via email to