*/
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;
*
* 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));
* 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;
}
}
}
- 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;
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 {
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