summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java
diff options
context:
space:
mode:
authorDavid Ostrovsky <david@ostrovsky.org>2014-02-22 21:17:03 +0100
committerJames Moger <james.moger@gitblit.com>2014-04-10 18:58:07 -0400
commite3b636e7fa2a823cfe90ea75e88034a60f7e59e6 (patch)
tree8341fe1dba50ec2ed4bb780c1944f91ac52d7528 /src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java
parenta3de33e71a22268105714e01d09c1c2e28bfe2c3 (diff)
downloadgitblit-e3b636e7fa2a823cfe90ea75e88034a60f7e59e6.tar.gz
gitblit-e3b636e7fa2a823cfe90ea75e88034a60f7e59e6.zip
SSHD: Add support for git pack commands
Add git-upload-pack and git-receive-pack commands. Conflicts: src/main/java/com/gitblit/manager/ServicesManager.java src/main/java/com/gitblit/transport/ssh/CommandDispatcher.java src/main/java/com/gitblit/transport/ssh/SshCommandFactory.java Change-Id: I8c057b41f1dfad6d004e6aa91f96c8c673be9be2
Diffstat (limited to 'src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java')
-rw-r--r--src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java38
1 files changed, 23 insertions, 15 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java
index fd73ccfd..a04c505f 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/BaseCommand.java
@@ -33,8 +33,10 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.transport.ssh.AbstractSshCommand;
+import com.gitblit.transport.ssh.SshContext;
import com.gitblit.utils.IdGenerator;
import com.gitblit.utils.WorkQueue;
+import com.gitblit.utils.WorkQueue.CancelableRunnable;
import com.gitblit.utils.cli.CmdLineParser;
import com.google.common.base.Charsets;
import com.google.common.util.concurrent.Atomics;
@@ -49,6 +51,9 @@ public abstract class BaseCommand extends AbstractSshCommand {
/** Unparsed command line options. */
private String[] argv;
+ /** Ssh context */
+ protected SshContext ctx;
+
/** The task, as scheduled on a worker thread. */
private final AtomicReference<Future<?>> task;
@@ -61,6 +66,10 @@ public abstract class BaseCommand extends AbstractSshCommand {
this.executor = w.getDefaultQueue();
}
+ public void setContext(SshContext ctx) {
+ this.ctx = ctx;
+ }
+
public void setInputStream(final InputStream in) {
this.in = in;
}
@@ -77,7 +86,10 @@ public abstract class BaseCommand extends AbstractSshCommand {
this.exit = callback;
}
- protected void provideStateTo(final Command cmd) {
+ protected void provideBaseStateTo(final Command cmd) {
+ if (cmd instanceof BaseCommand) {
+ ((BaseCommand)cmd).setContext(ctx);
+ }
cmd.setInputStream(in);
cmd.setOutputStream(out);
cmd.setErrorStream(err);
@@ -155,31 +167,25 @@ public abstract class BaseCommand extends AbstractSshCommand {
return "";
}
- private final class TaskThunk implements com.gitblit.utils.WorkQueue.CancelableRunnable {
+ private final class TaskThunk implements CancelableRunnable {
private final CommandRunnable thunk;
private final String taskName;
private TaskThunk(final CommandRunnable thunk) {
this.thunk = thunk;
- // TODO
-// StringBuilder m = new StringBuilder("foo");
-// m.append(context.getCommandLine());
-// if (userProvider.get().isIdentifiedUser()) {
-// IdentifiedUser u = (IdentifiedUser) userProvider.get();
-// m.append(" (").append(u.getAccount().getUserName()).append(")");
-// }
- this.taskName = "foo";//m.toString();
+ StringBuilder m = new StringBuilder();
+ m.append(ctx.getCommandLine());
+ this.taskName = m.toString();
}
@Override
public void cancel() {
synchronized (this) {
- //final Context old = sshScope.set(context);
try {
//onExit(/*STATUS_CANCEL*/);
} finally {
- //sshScope.set(old);
+ ctx = null;
}
}
}
@@ -190,11 +196,8 @@ public abstract class BaseCommand extends AbstractSshCommand {
final Thread thisThread = Thread.currentThread();
final String thisName = thisThread.getName();
int rc = 0;
- //final Context old = sshScope.set(context);
try {
- //context.started = TimeUtil.nowMs();
thisThread.setName("SSH " + taskName);
-
thunk.run();
out.flush();
@@ -231,6 +234,11 @@ public abstract class BaseCommand extends AbstractSshCommand {
}
+ /** Runnable function which can retrieve a project name related to the task */
+ public static interface RepositoryCommandRunnable extends CommandRunnable {
+ public String getRepository();
+ }
+
/**
* Spawn a function into its own thread.
* <p>