SSH: Inherit some commands from SshCommand
Some SSH command classes were unnecessary inherited from BaseCommand and were doing stdout/stderr initialization on their own. That's what SshCommand class is for. Change-Id: Ia31f1dedbc46b0e19019c905d6b3fad1d87ba7a0
This commit is contained in:
@@ -29,11 +29,7 @@ import com.google.inject.Inject;
|
|||||||
|
|
||||||
import org.kohsuke.args4j.Option;
|
import org.kohsuke.args4j.Option;
|
||||||
|
|
||||||
import java.io.BufferedWriter;
|
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.io.OutputStreamWriter;
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -66,27 +62,12 @@ public class ListPlugins implements RestReadView<TopLevelResource> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object apply(TopLevelResource resource)
|
public Object apply(TopLevelResource resource) {
|
||||||
throws UnsupportedEncodingException {
|
|
||||||
format = OutputFormat.JSON;
|
format = OutputFormat.JSON;
|
||||||
return display(null);
|
return display(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public JsonElement display(OutputStream displayOutputStream)
|
public JsonElement display(PrintWriter stdout) {
|
||||||
throws UnsupportedEncodingException {
|
|
||||||
PrintWriter stdout = null;
|
|
||||||
if (displayOutputStream != null) {
|
|
||||||
try {
|
|
||||||
stdout = new PrintWriter(new BufferedWriter(
|
|
||||||
new OutputStreamWriter(displayOutputStream, "UTF-8")));
|
|
||||||
} catch (UnsupportedEncodingException e) {
|
|
||||||
throw new RuntimeException("JVM lacks UTF-8 encoding", e);
|
|
||||||
}
|
|
||||||
} else if (!format.isJson()) {
|
|
||||||
throw new IllegalStateException(
|
|
||||||
"Text output requires that a display OutputStream is provided.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Map<String, PluginInfo> output = Maps.newTreeMap();
|
Map<String, PluginInfo> output = Maps.newTreeMap();
|
||||||
List<Plugin> plugins = Lists.newArrayList(pluginLoader.getPlugins(all));
|
List<Plugin> plugins = Lists.newArrayList(pluginLoader.getPlugins(all));
|
||||||
Collections.sort(plugins, new Comparator<Plugin>() {
|
Collections.sort(plugins, new Comparator<Plugin>() {
|
||||||
|
|||||||
@@ -24,16 +24,13 @@ import com.google.gerrit.reviewdb.client.Project;
|
|||||||
import com.google.gerrit.server.git.GarbageCollection;
|
import com.google.gerrit.server.git.GarbageCollection;
|
||||||
import com.google.gerrit.server.project.ProjectCache;
|
import com.google.gerrit.server.project.ProjectCache;
|
||||||
import com.google.gerrit.server.project.ProjectControl;
|
import com.google.gerrit.server.project.ProjectControl;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
|
||||||
import com.google.gerrit.sshd.CommandMetaData;
|
import com.google.gerrit.sshd.CommandMetaData;
|
||||||
|
import com.google.gerrit.sshd.SshCommand;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
|
||||||
import org.kohsuke.args4j.Argument;
|
import org.kohsuke.args4j.Argument;
|
||||||
import org.kohsuke.args4j.Option;
|
import org.kohsuke.args4j.Option;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -41,7 +38,7 @@ import java.util.List;
|
|||||||
@RequiresCapability(GlobalCapability.RUN_GC)
|
@RequiresCapability(GlobalCapability.RUN_GC)
|
||||||
@CommandMetaData(name = "gc", description = "Run Git garbage collection",
|
@CommandMetaData(name = "gc", description = "Run Git garbage collection",
|
||||||
runsAt = MASTER_OR_SLAVE)
|
runsAt = MASTER_OR_SLAVE)
|
||||||
public class GarbageCollectionCommand extends BaseCommand {
|
public class GarbageCollectionCommand extends SshCommand {
|
||||||
|
|
||||||
@Option(name = "--all", usage = "runs the Git garbage collection for all projects")
|
@Option(name = "--all", usage = "runs the Git garbage collection for all projects")
|
||||||
private boolean all;
|
private boolean all;
|
||||||
@@ -59,23 +56,10 @@ public class GarbageCollectionCommand extends BaseCommand {
|
|||||||
@Inject
|
@Inject
|
||||||
private GarbageCollection.Factory garbageCollectionFactory;
|
private GarbageCollection.Factory garbageCollectionFactory;
|
||||||
|
|
||||||
private PrintWriter stdout;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(Environment env) throws IOException {
|
|
||||||
startThread(new CommandRunnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
stdout = toPrintWriter(out);
|
|
||||||
try {
|
|
||||||
parseCommandLine();
|
|
||||||
verifyCommandLine();
|
verifyCommandLine();
|
||||||
runGC();
|
runGC();
|
||||||
} finally {
|
|
||||||
stdout.flush();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void verifyCommandLine() throws UnloggedFailure {
|
private void verifyCommandLine() throws UnloggedFailure {
|
||||||
|
|||||||
@@ -28,40 +28,33 @@ import com.google.gerrit.server.group.GroupJson;
|
|||||||
import com.google.gerrit.server.group.GroupJson.GroupInfo;
|
import com.google.gerrit.server.group.GroupJson.GroupInfo;
|
||||||
import com.google.gerrit.server.group.ListGroups;
|
import com.google.gerrit.server.group.ListGroups;
|
||||||
import com.google.gerrit.server.ioutil.ColumnFormatter;
|
import com.google.gerrit.server.ioutil.ColumnFormatter;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
|
||||||
import com.google.gerrit.sshd.CommandMetaData;
|
import com.google.gerrit.sshd.CommandMetaData;
|
||||||
|
import com.google.gerrit.sshd.SshCommand;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.google.inject.Provider;
|
import com.google.inject.Provider;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
|
||||||
import org.kohsuke.args4j.Option;
|
import org.kohsuke.args4j.Option;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
|
|
||||||
@CommandMetaData(name = "ls-groups", description = "List groups visible to the caller",
|
@CommandMetaData(name = "ls-groups", description = "List groups visible to the caller",
|
||||||
runsAt = MASTER_OR_SLAVE)
|
runsAt = MASTER_OR_SLAVE)
|
||||||
public class ListGroupsCommand extends BaseCommand {
|
public class ListGroupsCommand extends SshCommand {
|
||||||
@Inject
|
@Inject
|
||||||
private MyListGroups impl;
|
private MyListGroups impl;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(final Environment env) {
|
|
||||||
startThread(new CommandRunnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
parseCommandLine(impl);
|
|
||||||
if (impl.getUser() != null && !impl.getProjects().isEmpty()) {
|
if (impl.getUser() != null && !impl.getProjects().isEmpty()) {
|
||||||
throw new UnloggedFailure(1, "fatal: --user and --project options are not compatible.");
|
throw new UnloggedFailure(1, "fatal: --user and --project options are not compatible.");
|
||||||
}
|
}
|
||||||
final PrintWriter stdout = toPrintWriter(out);
|
|
||||||
try {
|
|
||||||
impl.display(stdout);
|
impl.display(stdout);
|
||||||
} finally {
|
|
||||||
stdout.flush();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
@Override
|
||||||
|
protected void parseCommandLine() throws UnloggedFailure {
|
||||||
|
parseCommandLine(impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class MyListGroups extends ListGroups {
|
private static class MyListGroups extends ListGroups {
|
||||||
|
|||||||
@@ -26,11 +26,10 @@ import com.google.gerrit.server.account.GroupCache;
|
|||||||
import com.google.gerrit.server.account.GroupDetailFactory.Factory;
|
import com.google.gerrit.server.account.GroupDetailFactory.Factory;
|
||||||
import com.google.gerrit.server.group.ListMembers;
|
import com.google.gerrit.server.group.ListMembers;
|
||||||
import com.google.gerrit.server.ioutil.ColumnFormatter;
|
import com.google.gerrit.server.ioutil.ColumnFormatter;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
|
||||||
import com.google.gerrit.sshd.CommandMetaData;
|
import com.google.gerrit.sshd.CommandMetaData;
|
||||||
|
import com.google.gerrit.sshd.SshCommand;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
|
||||||
import org.kohsuke.args4j.Argument;
|
import org.kohsuke.args4j.Argument;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -43,24 +42,18 @@ import javax.inject.Inject;
|
|||||||
*/
|
*/
|
||||||
@CommandMetaData(name = "ls-members", description = "List the members of a given group",
|
@CommandMetaData(name = "ls-members", description = "List the members of a given group",
|
||||||
runsAt = MASTER_OR_SLAVE)
|
runsAt = MASTER_OR_SLAVE)
|
||||||
public class ListMembersCommand extends BaseCommand {
|
public class ListMembersCommand extends SshCommand {
|
||||||
@Inject
|
@Inject
|
||||||
ListMembersCommandImpl impl;
|
ListMembersCommandImpl impl;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(Environment env) {
|
|
||||||
startThread(new CommandRunnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
parseCommandLine(impl);
|
|
||||||
final PrintWriter stdout = toPrintWriter(out);
|
|
||||||
try {
|
|
||||||
impl.display(stdout);
|
impl.display(stdout);
|
||||||
} finally {
|
|
||||||
stdout.flush();
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
@Override
|
||||||
|
protected void parseCommandLine() throws UnloggedFailure {
|
||||||
|
parseCommandLine(impl);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static class ListMembersCommandImpl extends ListMembers {
|
private static class ListMembersCommandImpl extends ListMembers {
|
||||||
|
|||||||
@@ -17,26 +17,20 @@ package com.google.gerrit.sshd.commands;
|
|||||||
import static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE;
|
import static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE;
|
||||||
|
|
||||||
import com.google.gerrit.server.project.ListProjects;
|
import com.google.gerrit.server.project.ListProjects;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
|
||||||
import com.google.gerrit.sshd.CommandMetaData;
|
import com.google.gerrit.sshd.CommandMetaData;
|
||||||
|
import com.google.gerrit.sshd.SshCommand;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@CommandMetaData(name = "ls-projects", description = "List projects visible to the caller",
|
@CommandMetaData(name = "ls-projects", description = "List projects visible to the caller",
|
||||||
runsAt = MASTER_OR_SLAVE)
|
runsAt = MASTER_OR_SLAVE)
|
||||||
final class ListProjectsCommand extends BaseCommand {
|
final class ListProjectsCommand extends SshCommand {
|
||||||
@Inject
|
@Inject
|
||||||
private ListProjects impl;
|
private ListProjects impl;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(final Environment env) {
|
|
||||||
startThread(new CommandRunnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
parseCommandLine(impl);
|
|
||||||
if (!impl.getFormat().isJson()) {
|
if (!impl.getFormat().isJson()) {
|
||||||
List<String> showBranch = impl.getShowBranch();
|
List<String> showBranch = impl.getShowBranch();
|
||||||
if (impl.isShowTree() && (showBranch != null) && !showBranch.isEmpty()) {
|
if (impl.isShowTree() && (showBranch != null) && !showBranch.isEmpty()) {
|
||||||
@@ -48,6 +42,9 @@ final class ListProjectsCommand extends BaseCommand {
|
|||||||
}
|
}
|
||||||
impl.display(out);
|
impl.display(out);
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
@Override
|
||||||
|
protected void parseCommandLine() throws UnloggedFailure {
|
||||||
|
parseCommandLine(impl);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,29 +19,23 @@ import static com.google.gerrit.sshd.CommandMetaData.Mode.MASTER_OR_SLAVE;
|
|||||||
import com.google.gerrit.common.data.GlobalCapability;
|
import com.google.gerrit.common.data.GlobalCapability;
|
||||||
import com.google.gerrit.extensions.annotations.RequiresCapability;
|
import com.google.gerrit.extensions.annotations.RequiresCapability;
|
||||||
import com.google.gerrit.server.plugins.ListPlugins;
|
import com.google.gerrit.server.plugins.ListPlugins;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
|
||||||
import com.google.gerrit.sshd.CommandMetaData;
|
import com.google.gerrit.sshd.CommandMetaData;
|
||||||
|
import com.google.gerrit.sshd.SshCommand;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
|
@RequiresCapability(GlobalCapability.ADMINISTRATE_SERVER)
|
||||||
@CommandMetaData(name = "ls", description = "List the installed plugins",
|
@CommandMetaData(name = "ls", description = "List the installed plugins",
|
||||||
runsAt = MASTER_OR_SLAVE)
|
runsAt = MASTER_OR_SLAVE)
|
||||||
final class PluginLsCommand extends BaseCommand {
|
final class PluginLsCommand extends SshCommand {
|
||||||
@Inject
|
@Inject
|
||||||
private ListPlugins impl;
|
private ListPlugins impl;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(Environment env) throws IOException {
|
|
||||||
startThread(new CommandRunnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
|
impl.display(stdout);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void parseCommandLine() throws UnloggedFailure {
|
||||||
parseCommandLine(impl);
|
parseCommandLine(impl);
|
||||||
impl.display(out);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,12 +37,11 @@ import com.google.gerrit.server.account.GetSshKeys.SshKeyInfo;
|
|||||||
import com.google.gerrit.server.account.PutActive;
|
import com.google.gerrit.server.account.PutActive;
|
||||||
import com.google.gerrit.server.account.PutHttpPassword;
|
import com.google.gerrit.server.account.PutHttpPassword;
|
||||||
import com.google.gerrit.server.account.PutName;
|
import com.google.gerrit.server.account.PutName;
|
||||||
import com.google.gerrit.sshd.BaseCommand;
|
|
||||||
import com.google.gerrit.sshd.CommandMetaData;
|
import com.google.gerrit.sshd.CommandMetaData;
|
||||||
|
import com.google.gerrit.sshd.SshCommand;
|
||||||
import com.google.gwtorm.server.OrmException;
|
import com.google.gwtorm.server.OrmException;
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.apache.sshd.server.Environment;
|
|
||||||
import org.kohsuke.args4j.Argument;
|
import org.kohsuke.args4j.Argument;
|
||||||
import org.kohsuke.args4j.Option;
|
import org.kohsuke.args4j.Option;
|
||||||
|
|
||||||
@@ -59,7 +58,7 @@ import java.util.List;
|
|||||||
/** Set a user's account settings. **/
|
/** Set a user's account settings. **/
|
||||||
@CommandMetaData(name = "set-account", description = "Change an account's settings")
|
@CommandMetaData(name = "set-account", description = "Change an account's settings")
|
||||||
@RequiresCapability(GlobalCapability.MODIFY_ACCOUNT)
|
@RequiresCapability(GlobalCapability.MODIFY_ACCOUNT)
|
||||||
final class SetAccountCommand extends BaseCommand {
|
final class SetAccountCommand extends SshCommand {
|
||||||
|
|
||||||
@Argument(index = 0, required = true, metaVar = "USER", usage = "full name, email-address, ssh username or account id")
|
@Argument(index = 0, required = true, metaVar = "USER", usage = "full name, email-address, ssh username or account id")
|
||||||
private Account.Id id;
|
private Account.Id id;
|
||||||
@@ -127,17 +126,11 @@ final class SetAccountCommand extends BaseCommand {
|
|||||||
private IdentifiedUser user;
|
private IdentifiedUser user;
|
||||||
private AccountResource rsrc;
|
private AccountResource rsrc;
|
||||||
|
|
||||||
@Override
|
|
||||||
public void start(final Environment env) {
|
|
||||||
startThread(new CommandRunnable() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run() throws Exception {
|
public void run() throws Exception {
|
||||||
parseCommandLine();
|
|
||||||
validate();
|
validate();
|
||||||
setAccount();
|
setAccount();
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void validate() throws UnloggedFailure {
|
private void validate() throws UnloggedFailure {
|
||||||
if (active && inactive) {
|
if (active && inactive) {
|
||||||
|
|||||||
Reference in New Issue
Block a user