Pass GerritServer down through SSH command factory
This avoids trying to do a static instance member lookup. Signed-off-by: Shawn O. Pearce <sop@google.com>
This commit is contained in:
@@ -22,7 +22,6 @@ import com.google.gerrit.client.reviewdb.ReviewDb;
|
||||
import com.google.gerrit.client.rpc.Common;
|
||||
import com.google.gerrit.server.BaseServiceImplementation;
|
||||
import com.google.gerrit.server.GerritServer;
|
||||
import com.google.gwtjsonrpc.server.XsrfException;
|
||||
import com.google.gwtorm.client.OrmException;
|
||||
|
||||
import org.apache.sshd.common.SshException;
|
||||
@@ -60,6 +59,7 @@ abstract class AbstractCommand implements Command, SessionAware {
|
||||
protected OutputStream err;
|
||||
protected ExitCallback exit;
|
||||
protected ServerSession session;
|
||||
protected GerritServer server;
|
||||
protected ReviewDb db;
|
||||
|
||||
private String name;
|
||||
@@ -94,14 +94,8 @@ abstract class AbstractCommand implements Command, SessionAware {
|
||||
return new PrintWriter(new BufferedWriter(new OutputStreamWriter(o, ENC)));
|
||||
}
|
||||
|
||||
protected GerritServer getGerritServer() throws Failure {
|
||||
try {
|
||||
return GerritServer.getInstance();
|
||||
} catch (OrmException e) {
|
||||
throw new Failure(128, "fatal: Gerrit is not available", e);
|
||||
} catch (XsrfException e) {
|
||||
throw new Failure(128, "fatal: Gerrit is not available", e);
|
||||
}
|
||||
protected GerritServer getGerritServer() {
|
||||
return server;
|
||||
}
|
||||
|
||||
protected ReviewDb openReviewDb() throws Failure {
|
||||
|
@@ -14,15 +14,19 @@
|
||||
|
||||
package com.google.gerrit.server.ssh;
|
||||
|
||||
import com.google.gerrit.server.GerritServer;
|
||||
|
||||
import org.apache.sshd.server.CommandFactory;
|
||||
|
||||
import java.util.HashMap;
|
||||
|
||||
/** Creates a command implementation based on the client input. */
|
||||
class GerritCommandFactory implements CommandFactory {
|
||||
private final GerritServer server;
|
||||
private final HashMap<String, Factory> commands;
|
||||
|
||||
GerritCommandFactory() {
|
||||
GerritCommandFactory(final GerritServer gs) {
|
||||
server = gs;
|
||||
commands = new HashMap<String, Factory>();
|
||||
|
||||
commands.put("gerrit-upload-pack", new Factory() {
|
||||
@@ -103,6 +107,7 @@ class GerritCommandFactory implements CommandFactory {
|
||||
}
|
||||
|
||||
final AbstractCommand c = create(cmd);
|
||||
c.server = server;
|
||||
c.setCommandLine(cmd, args);
|
||||
return c;
|
||||
}
|
||||
|
@@ -234,7 +234,7 @@ public class GerritSshDaemon extends SshServer {
|
||||
initCompression();
|
||||
initUserAuth(srv);
|
||||
setKeyPairProvider(initHostKey(srv));
|
||||
setCommandFactory(new GerritCommandFactory());
|
||||
setCommandFactory(new GerritCommandFactory(srv));
|
||||
setShellFactory(new NoShell());
|
||||
setSessionFactory(new SessionFactory() {
|
||||
@Override
|
||||
|
Reference in New Issue
Block a user