This can be useful to debug the command catalog. Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx> --- .../services/org.spearce.jgit.pgm.TextBuiltin | 2 + .../src/org/spearce/jgit/pgm/CommandRef.java | 7 ++ .../org/spearce/jgit/pgm/debug/ShowCommands.java | 78 ++++++++++++++++++++ 3 files changed, 87 insertions(+), 0 deletions(-) create mode 100644 org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/debug/ShowCommands.java diff --git a/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin b/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin index 69ef046..1ff5a30 100644 --- a/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin +++ b/org.spearce.jgit.pgm/src/META-INF/services/org.spearce.jgit.pgm.TextBuiltin @@ -10,3 +10,5 @@ org.spearce.jgit.pgm.Push org.spearce.jgit.pgm.RevList org.spearce.jgit.pgm.ShowRev org.spearce.jgit.pgm.Tag + +org.spearce.jgit.pgm.debug.ShowCommands diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/CommandRef.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/CommandRef.java index 40400a7..8bf784b 100644 --- a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/CommandRef.java +++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/CommandRef.java @@ -120,6 +120,13 @@ public class CommandRef { } /** + * @return loader for {@link #getImplementationClassName()}. + */ + public ClassLoader getImplementationClassLoader() { + return impl.getClassLoader(); + } + + /** * @return a new instance of the command implementation. */ public TextBuiltin create() { diff --git a/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/debug/ShowCommands.java b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/debug/ShowCommands.java new file mode 100644 index 0000000..64ecf7f --- /dev/null +++ b/org.spearce.jgit.pgm/src/org/spearce/jgit/pgm/debug/ShowCommands.java @@ -0,0 +1,78 @@ +package org.spearce.jgit.pgm.debug; + +import java.net.URL; + +import org.kohsuke.args4j.Option; +import org.spearce.jgit.pgm.Command; +import org.spearce.jgit.pgm.CommandCatalog; +import org.spearce.jgit.pgm.CommandRef; +import org.spearce.jgit.pgm.TextBuiltin; + +@Command(usage = "Display a list of all registered jgit commands") +class ShowCommands extends TextBuiltin { + @Option(name = "--pretty", usage = "alter the detail shown") + private Format pretty = Format.USAGE; + + @Override + protected void run() throws Exception { + final CommandRef[] list = CommandCatalog.all(); + + int width = 0; + for (final CommandRef c : list) + width = Math.max(width, c.getName().length()); + width += 2; + + for (final CommandRef c : list) { + System.err.print(c.isCommon() ? '*' : ' '); + System.err.print(' '); + + System.err.print(c.getName()); + for (int i = c.getName().length(); i < width; i++) + System.err.print(' '); + + pretty.print(c); + System.err.println(); + } + System.err.println(); + } + + static enum Format { + /** */ + USAGE { + void print(final CommandRef c) { + System.err.print(c.getUsage()); + } + }, + + /** */ + CLASSES { + void print(final CommandRef c) { + System.err.print(c.getImplementationClassName()); + } + }, + + /** */ + URLS { + void print(final CommandRef c) { + final ClassLoader ldr = c.getImplementationClassLoader(); + + String cn = c.getImplementationClassName(); + cn = cn.replace('.', '/') + ".class"; + + final URL url = ldr.getResource(cn); + if (url == null) { + System.err.print("!! NOT FOUND !!"); + return; + } + + String rn = url.toExternalForm(); + if (rn.endsWith(cn)) + rn = rn.substring(0, rn.length() - cn.length()); + + System.err.print(rn); + } + }; + + abstract void print(CommandRef c); + } +} -- 1.6.0.rc0.182.gb96c7 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html