/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html.
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.cli.svnsync;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList;
import org.tmatesoft.svn.cli.AbstractSVNCommand;
import org.tmatesoft.svn.cli.SVNCommandUtil;
import org.tmatesoft.svn.core.SVNException;
/**
* @version 1.3
* @author TMate Software Ltd.
*/
public class SVNSyncHelpCommand extends SVNSyncCommand {
private static final String GENERIC_HELP_HEADER =
"general usage: {0} SUBCOMMAND DEST_URL [ARGS & OPTIONS ...]\n" +
"Type ''{0} help <subcommand>'' for help on a specific subcommand.\n" +
"Type ''{0} --version'' to see the program version and RA modules.\n" +
"\n" +
"Available subcommands:";
private static final String VERSION_HELP_FOOTER =
"\nThe following repository access (RA) modules are available:\n\n" +
"* org.tmatesoft.svn.core.internal.io.dav : Module for accessing a repository via WebDAV protocol.\n" +
" - handles 'http' scheme\n" +
" - handles 'https' scheme\n" +
"* org.tmatesoft.svn.core.internal.io.svn: Module for accessing a repository using the svn network protocol.\n" +
" - handles 'svn' scheme\n" +
"* org.tmatesoft.svn.core.internal.io.fs: Module for accessing a repository on local disk.\n" +
" - handles 'file' scheme (only FSFS repositories are supported)\n";
public SVNSyncHelpCommand() {
super("help", new String[] {"?", "h"}, 2);
}
protected Collection createSupportedOptions() {
return new LinkedList();
}
public void run() throws SVNException {
if (!getSVNSyncEnvironment().getArguments().isEmpty()) {
for (Iterator commands = getSVNSyncEnvironment().getArguments().iterator(); commands.hasNext();) {
String commandName = (String) commands.next();
AbstractSVNCommand command = AbstractSVNCommand.getCommand(commandName);
if (command == null) {
getSVNSyncEnvironment().getErr().println("\"" + commandName + "\": unknown command.\n");
continue;
}
String help = SVNCommandUtil.getCommandHelp(command, getEnvironment().getProgramName(), true);
getSVNSyncEnvironment().getOut().println(help);
}
} else if (getSVNSyncEnvironment().isVersion()) {
String version = SVNCommandUtil.getVersion(getEnvironment(), getSVNSyncEnvironment().isQuiet());
getEnvironment().getOut().println(version);
getEnvironment().getOut().println(VERSION_HELP_FOOTER);
} else if (getSVNSyncEnvironment().getArguments().isEmpty()) {
Comparator commandComparator = new Comparator() {
public int compare(Object o1, Object o2) {
AbstractSVNCommand c1 = (AbstractSVNCommand) o1;
AbstractSVNCommand c2 = (AbstractSVNCommand) o2;
if (c1 instanceof SVNSyncCommand && c2 instanceof SVNSyncCommand) {
SVNSyncCommand syncCommand1 = (SVNSyncCommand) c1;
SVNSyncCommand syncCommand2 = (SVNSyncCommand) c2;
if (syncCommand1.getOutputPriority() != syncCommand2.getOutputPriority()) {
return syncCommand1.getOutputPriority() < syncCommand2.getOutputPriority() ? -1 : 1;
}
}
return c1.getName().compareTo(c2.getName());
}
};
String help = SVNCommandUtil.getGenericHelp(getEnvironment().getProgramName(), GENERIC_HELP_HEADER,
null, commandComparator);
getSVNSyncEnvironment().getOut().print(help);
} else {
String message = MessageFormat.format("Type ''{0} help'' for usage.", new Object[] {
getSVNSyncEnvironment().getProgramName() });
getSVNSyncEnvironment().getOut().println(message);
}
}
}