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
This commit is contained in:
parent
d8177d6e19
commit
cfc15dd9dc
|
@ -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 String getFormat() {
|
|||
}
|
||||
}
|
||||
|
||||
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 void release() {
|
|||
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 {
|
||||
|
@ -217,6 +217,15 @@ public OutputStream call() throws GitAPIException {
|
|||
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
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
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);
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@
|
|||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue