]> source.dussan.org Git - jgit.git/commitdiff
[RFC] archive: Switch to commons-compress as ZIP archiver 07/9007/2
authorJonathan Nieder <jrn@google.com>
Mon, 3 Dec 2012 17:55:02 +0000 (09:55 -0800)
committerJonathan Nieder <jrn@google.com>
Mon, 3 Dec 2012 18:49:06 +0000 (10:49 -0800)
The Apache Commons Compress library provides a similar interface to
java.util.zip with some features not found in java.util.zip, including
support for inclusion of metadata (file mode and symlink targets) and
support for multiple file formats (zip, .tar.xz, etc).

Use it, in preparation for making use of these features.  No
functional change intended yet.

A previous version of this patch used plexus-archiver.  That is a
heavier-weight dependency and offers a less convenient interface.

Thanks to James Moger and Chris Aniszczyk for advice.

Change-Id: Id01146950bb9c18dae0169311e3cde2c3bfa675e

org.eclipse.jgit.pgm/META-INF/MANIFEST.MF
org.eclipse.jgit.pgm/pom.xml
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Archive.java
pom.xml

index df026e02cb0894e1805f44326e956ed72704e18c..57b59afbc0ef59aaf62398ddd0d84de0ac202334 100644 (file)
@@ -6,7 +6,8 @@ Bundle-Version: 2.2.0.qualifier
 Bundle-Vendor: %provider_name
 Bundle-Localization: plugin
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
-Import-Package: org.eclipse.jgit.api;version="[2.2.0,2.3.0)",
+Import-Package: org.apache.commons.compress.archivers.zip;version="[1.3,2.0)",
+ org.eclipse.jgit.api;version="[2.2.0,2.3.0)",
  org.eclipse.jgit.api.errors;version="[2.2.0,2.3.0)",
  org.eclipse.jgit.awtui;version="[2.2.0,2.3.0)",
  org.eclipse.jgit.blame;version="[2.2.0,2.3.0)",
index 02d346365aab9bddd41816161050fb09da6d81a5..5cf108420dac2b175e7326003e3275f90a47336f 100644 (file)
       <artifactId>args4j</artifactId>
     </dependency>
 
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+    </dependency>
+
     <dependency>
       <groupId>org.eclipse.jgit</groupId>
       <artifactId>org.eclipse.jgit</artifactId>
index 786524eca22332032be1892301a10ebc4575627d..ec937a3cc33d7dc46bfbed1027bb4b719ab98b94 100644 (file)
@@ -46,9 +46,9 @@ package org.eclipse.jgit.pgm;
 import java.lang.String;
 import java.lang.System;
 import java.text.MessageFormat;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
 
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
 import org.eclipse.jgit.lib.FileMode;
 import org.eclipse.jgit.lib.MutableObjectId;
 import org.eclipse.jgit.lib.ObjectLoader;
@@ -69,7 +69,7 @@ class Archive extends TextBuiltin {
                final TreeWalk walk = new TreeWalk(db);
                final ObjectReader reader = walk.getObjectReader();
                final MutableObjectId idBuf = new MutableObjectId();
-               final ZipOutputStream out = new ZipOutputStream(outs);
+               final ZipArchiveOutputStream out = new ZipArchiveOutputStream(outs);
 
                if (tree == null)
                        throw die(CLIText.get().treeIsRequired);
@@ -87,11 +87,12 @@ class Archive extends TextBuiltin {
                                continue;
 
                        walk.getObjectId(idBuf, 0);
-                       final ZipEntry entry = new ZipEntry(name);
+                       final ZipArchiveEntry entry = new ZipArchiveEntry(name);
                        final ObjectLoader loader = reader.open(idBuf);
                        entry.setSize(loader.getSize());
-                       out.putNextEntry(entry);
+                       out.putArchiveEntry(entry);
                        loader.copyTo(out);
+                       out.closeArchiveEntry();
 
                        if (mode != FileMode.REGULAR_FILE)
                                System.err.println(MessageFormat.format( //
diff --git a/pom.xml b/pom.xml
index 891a023c0986f40cafc9eb6c2ff63614fd04e1ee..085e00fefb3ff2a921ebc1484f0fff3375c311a3 100644 (file)
--- a/pom.xml
+++ b/pom.xml
     <jsch-version>0.1.44-1</jsch-version>
     <junit-version>4.5</junit-version>
     <args4j-version>2.0.12</args4j-version>
+    <commons-compress-version>1.3</commons-compress-version>
     <servlet-api-version>2.5</servlet-api-version>
     <jetty-version>7.6.0.v20120127</jetty-version>
     <clirr-version>2.4</clirr-version>
         <version>${servlet-api-version}</version>
       </dependency>
 
+      <dependency>
+        <groupId>org.apache.commons</groupId>
+        <artifactId>commons-compress</artifactId>
+        <version>${commons-compress-version}</version>
+      </dependency>
+
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-servlet</artifactId>