Browse Source

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
tags/v3.1.0.201309270735-rc1
Jonathan Nieder 11 years ago
parent
commit
cfc15dd9dc

+ 25
- 16
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ArchiveCommand.java View File

@@ -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 {
@@ -217,6 +217,15 @@ public class ArchiveCommand extends GitCommand<OutputStream> {
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

+ 1
- 1
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/TarFormat.java View File

@@ -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);
}

+ 1
- 1
org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/archive/ZipFormat.java View File

@@ -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);
}

Loading…
Cancel
Save