diff options
author | Jonathan Nieder <jrn@google.com> | 2013-05-23 16:53:57 -0700 |
---|---|---|
committer | Jonathan Nieder <jrn@google.com> | 2013-05-23 18:09:13 -0700 |
commit | cfc15dd9dce2252baad9dc8ce0828203a205c2cf (patch) | |
tree | ec76d96562d1ff5c864f20169a79ea5268f3ef3a /org.eclipse.jgit.pgm | |
parent | d8177d6e195fad752de69f9bdeacbf6f6e004d2b (diff) | |
download | jgit-cfc15dd9dce2252baad9dc8ce0828203a205c2cf.tar.gz jgit-cfc15dd9dce2252baad9dc8ce0828203a205c2cf.zip |
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
Diffstat (limited to 'org.eclipse.jgit.pgm')
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<OutputStream> { * * 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<OutputStream> { * out.close(); * } */ - public static interface Format { - ArchiveOutputStream createArchiveOutputStream(OutputStream s); - void putEntry(ArchiveOutputStream out, String path, FileMode mode, + public static interface Format<T extends Closeable> { + 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<OutputStream> { } } - private static final ConcurrentMap<String, Format> formats = - new ConcurrentHashMap<String, Format>(); + /** + * Available archival formats (corresponding to values for + * the --format= option) + */ + private static final ConcurrentMap<String, Format<?>> formats = + new ConcurrentHashMap<String, Format<?>>(); 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<OutputStream> { walk.release(); } - /** - * @return the stream to which the archive has been written - */ - @Override - public OutputStream call() throws GitAPIException { + private <T extends Closeable> + OutputStream writeArchive(Format<T> 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 { @@ -218,6 +218,15 @@ public class ArchiveCommand extends GitCommand<OutputStream> { } /** + * @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 * @return this 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<ArchiveOutputStream> { 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<ArchiveOutputStream> { public ArchiveOutputStream createArchiveOutputStream(OutputStream s) { return new ZipArchiveOutputStream(s); } |