From cfc15dd9dce2252baad9dc8ce0828203a205c2cf Mon Sep 17 00:00:00 2001 From: Jonathan Nieder Date: Thu, 23 May 2013 16:53:57 -0700 Subject: [PATCH] Drop dependency by ArchiveCommand.Format interface on commons-compress Otherwise, anyone trying to implement a new format would have to depend on commons-compress, even if using a different underlying library to write the archive. Change-Id: I301a1997e3b48aa7e32d693fd8f4b2d436c9b3a7 --- .../jgit/pgm/archive/ArchiveCommand.java | 41 +++++++++++-------- .../eclipse/jgit/pgm/archive/TarFormat.java | 2 +- .../eclipse/jgit/pgm/archive/ZipFormat.java | 2 +- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ArchiveCommand.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ArchiveCommand.java index ad1daebd42..437c613a34 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ArchiveCommand.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ArchiveCommand.java @@ -42,13 +42,13 @@ */ package org.eclipse.jgit.pgm.archive; +import java.io.Closeable; import java.io.IOException; import java.io.OutputStream; import java.text.MessageFormat; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; -import org.apache.commons.compress.archivers.ArchiveOutputStream; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.GitCommand; import org.eclipse.jgit.api.errors.GitAPIException; @@ -103,7 +103,7 @@ public class ArchiveCommand extends GitCommand { * * Usage: * Repository repo = git.getRepository(); - * ArchiveOutputStream out = format.createArchiveOutputStream(System.out); + * T out = format.createArchiveOutputStream(System.out); * try { * for (...) { * format.putEntry(out, path, mode, repo.open(objectId)); @@ -112,9 +112,9 @@ public class ArchiveCommand extends GitCommand { * out.close(); * } */ - public static interface Format { - ArchiveOutputStream createArchiveOutputStream(OutputStream s); - void putEntry(ArchiveOutputStream out, String path, FileMode mode, + public static interface Format { + T createArchiveOutputStream(OutputStream s); + void putEntry(T out, String path, FileMode mode, ObjectLoader loader) throws IOException; } @@ -143,16 +143,20 @@ public class ArchiveCommand extends GitCommand { } } - private static final ConcurrentMap formats = - new ConcurrentHashMap(); + /** + * Available archival formats (corresponding to values for + * the --format= option) + */ + private static final ConcurrentMap> formats = + new ConcurrentHashMap>(); static { formats.put("zip", new ZipFormat()); formats.put("tar", new TarFormat()); } - private static Format lookupFormat(String formatName) throws UnsupportedFormatException { - Format fmt = formats.get(formatName); + private static Format lookupFormat(String formatName) throws UnsupportedFormatException { + Format fmt = formats.get(formatName); if (fmt == null) throw new UnsupportedFormatException(formatName); return fmt; @@ -180,14 +184,10 @@ public class ArchiveCommand extends GitCommand { walk.release(); } - /** - * @return the stream to which the archive has been written - */ - @Override - public OutputStream call() throws GitAPIException { + private + OutputStream writeArchive(Format fmt) throws GitAPIException { final MutableObjectId idBuf = new MutableObjectId(); - final Format fmt = lookupFormat(format); - final ArchiveOutputStream outa = fmt.createArchiveOutputStream(out); + final T outa = fmt.createArchiveOutputStream(out); final ObjectReader reader = walk.getObjectReader(); try { @@ -217,6 +217,15 @@ public class ArchiveCommand extends GitCommand { return out; } + /** + * @return the stream to which the archive has been written + */ + @Override + public OutputStream call() throws GitAPIException { + final Format fmt = lookupFormat(format); + return writeArchive(fmt); + } + /** * @param tree * the tag, commit, or tree object to produce an archive for diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/TarFormat.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/TarFormat.java index a0bbd52403..52252593d5 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/TarFormat.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/TarFormat.java @@ -52,7 +52,7 @@ import org.apache.commons.compress.archivers.tar.TarConstants; import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectLoader; -class TarFormat implements ArchiveCommand.Format { +class TarFormat implements ArchiveCommand.Format { public ArchiveOutputStream createArchiveOutputStream(OutputStream s) { return new TarArchiveOutputStream(s); } diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ZipFormat.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ZipFormat.java index a85ae3bfa8..d264161c5b 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ZipFormat.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ZipFormat.java @@ -51,7 +51,7 @@ import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream; import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectLoader; -class ZipFormat implements ArchiveCommand.Format { +class ZipFormat implements ArchiveCommand.Format { public ArchiveOutputStream createArchiveOutputStream(OutputStream s) { return new ZipArchiveOutputStream(s); } -- 2.39.5