Maintain list of archive formats in one place
Add a static start() method to FormatActivator to allow outside classes such as the Archive subcommand of the jgit program to use it without a BundleContext. This way, the list of formats only has to be maintained in one place. While at it, build a list of registered formats at start() time, so stop() doesn't have to repeat the same list of formats. Suggested-by: Shawn Pearce <spearce@spearce.org> Change-Id: I55cb3095043568740880cc9e4f7cde05f49c363c
This commit is contained in:
parent
f99fa9d23e
commit
68d92182e6
|
@ -42,18 +42,65 @@
|
||||||
*/
|
*/
|
||||||
package org.eclipse.jgit.archive;
|
package org.eclipse.jgit.archive;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.jgit.api.ArchiveCommand;
|
import org.eclipse.jgit.api.ArchiveCommand;
|
||||||
import org.osgi.framework.BundleActivator;
|
import org.osgi.framework.BundleActivator;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This activator registers all format types from the
|
||||||
|
* org.eclipse.jgit.archive package for use via the ArchiveCommand
|
||||||
|
* API.
|
||||||
|
*
|
||||||
|
* This registration happens automatically behind the scenes
|
||||||
|
* when the package is loaded as an OSGi bundle (and the corresponding
|
||||||
|
* deregistration happens when the bundle is unloaded, to avoid
|
||||||
|
* leaks).
|
||||||
|
*
|
||||||
|
* The static start() and stop() methods allow registering the same
|
||||||
|
* list of formats manually in cases where OSGi bundle activation
|
||||||
|
* cannot be used.
|
||||||
|
*/
|
||||||
public class FormatActivator implements BundleActivator {
|
public class FormatActivator implements BundleActivator {
|
||||||
|
private static final List<String> myFormats = new ArrayList<String>();
|
||||||
|
|
||||||
|
private static final void register(String name, ArchiveCommand.Format<?> fmt) {
|
||||||
|
myFormats.add(name);
|
||||||
|
ArchiveCommand.registerFormat(name, fmt);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register all included archive formats so they can be used
|
||||||
|
* as arguments to the ArchiveCommand.setFormat() method.
|
||||||
|
*
|
||||||
|
* Should not be called twice without a call to stop() in between.
|
||||||
|
* Not thread-safe.
|
||||||
|
*/
|
||||||
|
public static void start() {
|
||||||
|
register("tar", new TarFormat());
|
||||||
|
register("zip", new ZipFormat());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clean up by deregistering all formats that were registered
|
||||||
|
* by start().
|
||||||
|
*
|
||||||
|
* Not thread-safe.
|
||||||
|
*/
|
||||||
|
public static void stop() {
|
||||||
|
for (String name : myFormats) {
|
||||||
|
ArchiveCommand.unregisterFormat(name);
|
||||||
|
}
|
||||||
|
myFormats.clear();
|
||||||
|
}
|
||||||
|
|
||||||
public void start(BundleContext context) throws Exception {
|
public void start(BundleContext context) throws Exception {
|
||||||
ArchiveCommand.registerFormat("tar", new TarFormat());
|
start();
|
||||||
ArchiveCommand.registerFormat("zip", new ZipFormat());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void stop(BundleContext context) throws Exception {
|
public void stop(BundleContext context) throws Exception {
|
||||||
ArchiveCommand.unregisterFormat("zip");
|
stop();
|
||||||
ArchiveCommand.unregisterFormat("tar");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,8 +46,7 @@
|
||||||
import org.eclipse.jgit.api.ArchiveCommand;
|
import org.eclipse.jgit.api.ArchiveCommand;
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
import org.eclipse.jgit.archive.TarFormat;
|
import org.eclipse.jgit.archive.FormatActivator;
|
||||||
import org.eclipse.jgit.archive.ZipFormat;
|
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.pgm.TextBuiltin;
|
import org.eclipse.jgit.pgm.TextBuiltin;
|
||||||
import org.eclipse.jgit.pgm.internal.CLIText;
|
import org.eclipse.jgit.pgm.internal.CLIText;
|
||||||
|
@ -57,8 +56,7 @@
|
||||||
@Command(common = true, usage = "usage_archive")
|
@Command(common = true, usage = "usage_archive")
|
||||||
class Archive extends TextBuiltin {
|
class Archive extends TextBuiltin {
|
||||||
static {
|
static {
|
||||||
ArchiveCommand.registerFormat("tar", new TarFormat());
|
FormatActivator.start();
|
||||||
ArchiveCommand.registerFormat("zip", new ZipFormat());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Argument(index = 0, metaVar = "metaVar_treeish")
|
@Argument(index = 0, metaVar = "metaVar_treeish")
|
||||||
|
|
Loading…
Reference in New Issue