summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/gitblit/transport/ssh
diff options
context:
space:
mode:
authorJames Moger <james.moger@gitblit.com>2014-03-17 21:23:44 -0400
committerJames Moger <james.moger@gitblit.com>2014-04-10 18:58:09 -0400
commit9d44ade215922fd9e7bda7c604b31c31d217d750 (patch)
treef73dff5e26e2a8ce842a43c49439581c7a0f5ee1 /src/main/java/com/gitblit/transport/ssh
parent01b529edac600feb3c0750d27d0759b5f49fde72 (diff)
downloadgitblit-9d44ade215922fd9e7bda7c604b31c31d217d750.tar.gz
gitblit-9d44ade215922fd9e7bda7c604b31c31d217d750.zip
Create git and gitblit dispatchers
Diffstat (limited to 'src/main/java/com/gitblit/transport/ssh')
-rw-r--r--src/main/java/com/gitblit/transport/ssh/SshCommandFactory.java41
-rw-r--r--src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java65
-rw-r--r--src/main/java/com/gitblit/transport/ssh/git/BaseGitCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/BaseGitCommand.java)5
-rw-r--r--src/main/java/com/gitblit/transport/ssh/git/GitDispatchCommand.java61
-rw-r--r--src/main/java/com/gitblit/transport/ssh/git/Receive.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/Receive.java)4
-rw-r--r--src/main/java/com/gitblit/transport/ssh/git/Upload.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/Upload.java)4
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/AddKeyCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/AddKeyCommand.java)6
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/BaseKeyCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/BaseKeyCommand.java)10
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/CreateRepository.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/CreateRepository.java)3
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/GitblitDispatchCommand.java38
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/LsCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/ListRepositoriesCommand.java)58
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/RemoveKeyCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/RemoveKeyCommand.java)8
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/ReviewCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/ReviewCommand.java)3
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/SetAccountCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/SetAccountCommand.java)11
-rw-r--r--src/main/java/com/gitblit/transport/ssh/gitblit/VersionCommand.java (renamed from src/main/java/com/gitblit/transport/ssh/commands/VersionCommand.java)3
15 files changed, 217 insertions, 103 deletions
diff --git a/src/main/java/com/gitblit/transport/ssh/SshCommandFactory.java b/src/main/java/com/gitblit/transport/ssh/SshCommandFactory.java
index b8dd5b9f..de7aad1f 100644
--- a/src/main/java/com/gitblit/transport/ssh/SshCommandFactory.java
+++ b/src/main/java/com/gitblit/transport/ssh/SshCommandFactory.java
@@ -34,21 +34,11 @@ import org.apache.sshd.server.session.ServerSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.gitblit.git.GitblitReceivePackFactory;
-import com.gitblit.git.GitblitUploadPackFactory;
-import com.gitblit.git.RepositoryResolver;
import com.gitblit.manager.IGitblit;
import com.gitblit.models.UserModel;
-import com.gitblit.transport.ssh.commands.AddKeyCommand;
-import com.gitblit.transport.ssh.commands.CreateRepository;
import com.gitblit.transport.ssh.commands.DispatchCommand;
-import com.gitblit.transport.ssh.commands.ListRepositoriesCommand;
-import com.gitblit.transport.ssh.commands.Receive;
-import com.gitblit.transport.ssh.commands.RemoveKeyCommand;
-import com.gitblit.transport.ssh.commands.ReviewCommand;
-import com.gitblit.transport.ssh.commands.SetAccountCommand;
-import com.gitblit.transport.ssh.commands.Upload;
-import com.gitblit.transport.ssh.commands.VersionCommand;
+import com.gitblit.transport.ssh.git.GitDispatchCommand;
+import com.gitblit.transport.ssh.gitblit.GitblitDispatchCommand;
import com.gitblit.utils.IdGenerator;
import com.gitblit.utils.WorkQueue;
import com.google.common.util.concurrent.Atomics;
@@ -86,31 +76,16 @@ public class SshCommandFactory implements CommandFactory {
protected DispatchCommand createRootDispatcher(SshDaemonClient client, String cmdLine) {
final UserModel user = client.getUser();
- DispatchCommand gitblitCmd = new DispatchCommand();
- gitblitCmd.registerCommand(user, VersionCommand.class);
- gitblitCmd.registerCommand(user, AddKeyCommand.class);
- gitblitCmd.registerCommand(user, RemoveKeyCommand.class);
- gitblitCmd.registerCommand(user, ListRepositoriesCommand.class);
- gitblitCmd.registerCommand(user, ReviewCommand.class);
-
- gitblitCmd.registerCommand(user, CreateRepository.class);
- gitblitCmd.registerCommand(user, SetAccountCommand.class);
-
- DispatchCommand gitCmd = new DispatchCommand();
- gitCmd.registerCommand(user, Upload.class);
- gitCmd.registerCommand(user, Receive.class);
+ DispatchCommand root = new DispatchCommand() {
+ };
+ root.setContext(new SshCommandContext(gitblit, client, cmdLine));
- DispatchCommand root = new DispatchCommand();
- root.registerDispatcher("gitblit", gitblitCmd);
- root.registerDispatcher("git", gitCmd);
+ // TODO convert these dispatchers to plugin extension points
+ root.registerDispatcher(user, GitblitDispatchCommand.class);
+ root.registerDispatcher(user, GitDispatchCommand.class);
- root.setRepositoryResolver(new RepositoryResolver<SshDaemonClient>(gitblit));
- root.setUploadPackFactory(new GitblitUploadPackFactory<SshDaemonClient>(gitblit));
- root.setReceivePackFactory(new GitblitReceivePackFactory<SshDaemonClient>(gitblit));
root.setAuthenticator(keyAuthenticator);
- root.setContext(new SshCommandContext(gitblit, client, cmdLine));
-
return root;
}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
index 00d3b819..38f1a48f 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java
@@ -30,21 +30,17 @@ import org.kohsuke.args4j.Argument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import com.gitblit.git.GitblitReceivePackFactory;
-import com.gitblit.git.GitblitUploadPackFactory;
-import com.gitblit.git.RepositoryResolver;
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.CommandMetaData;
import com.gitblit.transport.ssh.CachingPublicKeyAuthenticator;
-import com.gitblit.transport.ssh.SshDaemonClient;
-mport com.gitblit.utils.StringUtils;
+import com.gitblit.transport.ssh.gitblit.BaseKeyCommand;
+import com.gitblit.utils.StringUtils;
import com.gitblit.utils.cli.SubcommandHandler;
import com.google.common.base.Charsets;
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-public class DispatchCommand extends BaseCommand {
+public abstract class DispatchCommand extends BaseCommand {
private Logger log = LoggerFactory.getLogger(getClass());
@@ -62,11 +58,31 @@ public class DispatchCommand extends BaseCommand {
commands = new HashSet<Class<? extends BaseCommand>>();
}
- public void registerDispatcher(String name, Command cmd) {
+ public void registerDispatcher(UserModel user, Class<? extends DispatchCommand> cmd) {
+ if (!cmd.isAnnotationPresent(CommandMetaData.class)) {
+ throw new RuntimeException(MessageFormat.format("{0} must be annotated with {1}!", cmd.getName(),
+ CommandMetaData.class.getName()));
+ }
if (dispatchers == null) {
dispatchers = Maps.newHashMap();
}
- dispatchers.put(name, cmd);
+
+ CommandMetaData meta = cmd.getAnnotation(CommandMetaData.class);
+ if (meta.admin() && !user.canAdmin()) {
+ log.debug(MessageFormat.format("excluding admin dispatch command {0} for {1}", meta.name(), user.username));
+ return;
+ }
+
+ try {
+ DispatchCommand dispatcher = cmd.newInstance();
+ dispatcher.registerCommands(user);
+ dispatchers.put(meta.name(), dispatcher);
+ } catch (Exception e) {
+ log.error("failed to register {} dispatcher", meta.name());
+ }
+ }
+
+ protected void registerCommands(UserModel user) {
}
@@ -237,41 +253,12 @@ public class DispatchCommand extends BaseCommand {
cmd.setErrorStream(err);
cmd.setExitCallback(exit);
- if (cmd instanceof BaseGitCommand) {
- BaseGitCommand a = (BaseGitCommand) cmd;
- a.setRepositoryResolver(repositoryResolver);
- a.setUploadPackFactory(gitblitUploadPackFactory);
- a.setReceivePackFactory(gitblitReceivePackFactory);
- } else if (cmd instanceof DispatchCommand) {
- DispatchCommand d = (DispatchCommand) cmd;
- d.setRepositoryResolver(repositoryResolver);
- d.setUploadPackFactory(gitblitUploadPackFactory);
- d.setReceivePackFactory(gitblitReceivePackFactory);
- d.setAuthenticator(authenticator);
- } else if (cmd instanceof BaseKeyCommand) {
+ if (cmd instanceof BaseKeyCommand) {
BaseKeyCommand k = (BaseKeyCommand) cmd;
k.setAuthenticator(authenticator);
}
}
- private RepositoryResolver<SshDaemonClient> repositoryResolver;
-
- public void setRepositoryResolver(RepositoryResolver<SshDaemonClient> repositoryResolver) {
- this.repositoryResolver = repositoryResolver;
- }
-
- private GitblitUploadPackFactory<SshDaemonClient> gitblitUploadPackFactory;
-
- public void setUploadPackFactory(GitblitUploadPackFactory<SshDaemonClient> gitblitUploadPackFactory) {
- this.gitblitUploadPackFactory = gitblitUploadPackFactory;
- }
-
- private GitblitReceivePackFactory<SshDaemonClient> gitblitReceivePackFactory;
-
- public void setReceivePackFactory(GitblitReceivePackFactory<SshDaemonClient> gitblitReceivePackFactory) {
- this.gitblitReceivePackFactory = gitblitReceivePackFactory;
- }
-
private CachingPublicKeyAuthenticator authenticator;
public void setAuthenticator(CachingPublicKeyAuthenticator authenticator) {
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/BaseGitCommand.java b/src/main/java/com/gitblit/transport/ssh/git/BaseGitCommand.java
index a3411616..b203d476 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/BaseGitCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/git/BaseGitCommand.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.git;
import java.io.IOException;
@@ -27,12 +27,13 @@ import com.gitblit.git.GitblitReceivePackFactory;
import com.gitblit.git.GitblitUploadPackFactory;
import com.gitblit.git.RepositoryResolver;
import com.gitblit.transport.ssh.SshDaemonClient;
+import com.gitblit.transport.ssh.commands.BaseCommand;
/**
* @author Eric Myhre
*
*/
-public abstract class BaseGitCommand extends BaseCommand {
+abstract class BaseGitCommand extends BaseCommand {
@Argument(index = 0, metaVar = "REPOSITORY", required = true, usage = "repository name")
protected String repository;
diff --git a/src/main/java/com/gitblit/transport/ssh/git/GitDispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/git/GitDispatchCommand.java
new file mode 100644
index 00000000..adeace52
--- /dev/null
+++ b/src/main/java/com/gitblit/transport/ssh/git/GitDispatchCommand.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2014 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.transport.ssh.git;
+
+import com.gitblit.git.GitblitReceivePackFactory;
+import com.gitblit.git.GitblitUploadPackFactory;
+import com.gitblit.git.RepositoryResolver;
+import com.gitblit.manager.IGitblit;
+import com.gitblit.models.UserModel;
+import com.gitblit.transport.ssh.CommandMetaData;
+import com.gitblit.transport.ssh.SshCommandContext;
+import com.gitblit.transport.ssh.SshDaemonClient;
+import com.gitblit.transport.ssh.commands.BaseCommand;
+import com.gitblit.transport.ssh.commands.DispatchCommand;
+
+@CommandMetaData(name = "git", description="Dispatcher for git receive and upload commands", hidden = true)
+public class GitDispatchCommand extends DispatchCommand {
+
+ protected RepositoryResolver<SshDaemonClient> repositoryResolver;
+ protected GitblitUploadPackFactory<SshDaemonClient> uploadPackFactory;
+ protected GitblitReceivePackFactory<SshDaemonClient> receivePackFactory;
+
+ @Override
+ public void setContext(SshCommandContext context) {
+ super.setContext(context);
+
+ IGitblit gitblit = context.getGitblit();
+ repositoryResolver = new RepositoryResolver<SshDaemonClient>(gitblit);
+ uploadPackFactory = new GitblitUploadPackFactory<SshDaemonClient>(gitblit);
+ receivePackFactory = new GitblitReceivePackFactory<SshDaemonClient>(gitblit);
+ }
+
+ @Override
+ protected void registerCommands(UserModel user) {
+ registerCommand(user, Upload.class);
+ registerCommand(user, Receive.class);
+ }
+
+ @Override
+ protected void provideStateTo(final BaseCommand cmd) {
+ super.provideStateTo(cmd);
+
+ BaseGitCommand a = (BaseGitCommand) cmd;
+ a.setRepositoryResolver(repositoryResolver);
+ a.setUploadPackFactory(uploadPackFactory);
+ a.setReceivePackFactory(receivePackFactory);
+ }
+}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/Receive.java b/src/main/java/com/gitblit/transport/ssh/git/Receive.java
index 559cfa5d..4089f1df 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/Receive.java
+++ b/src/main/java/com/gitblit/transport/ssh/git/Receive.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.git;
import org.eclipse.jgit.transport.ReceivePack;
import com.gitblit.transport.ssh.CommandMetaData;
-@CommandMetaData(name = "git-receive-pack", description = "Receive pack")
+@CommandMetaData(name = "git-receive-pack", description = "Receives pushes from a client")
public class Receive extends BaseGitCommand {
@Override
protected void runImpl() throws Failure {
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/Upload.java b/src/main/java/com/gitblit/transport/ssh/git/Upload.java
index ac98bb20..5793c3e6 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/Upload.java
+++ b/src/main/java/com/gitblit/transport/ssh/git/Upload.java
@@ -13,13 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.git;
import org.eclipse.jgit.transport.UploadPack;
import com.gitblit.transport.ssh.CommandMetaData;
-@CommandMetaData(name = "git-upload-pack", description = "Upload pack")
+@CommandMetaData(name = "git-upload-pack", description = "Sends packs to a client for clone and fetch")
public class Upload extends BaseGitCommand {
@Override
protected void runImpl() throws Failure {
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/AddKeyCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/AddKeyCommand.java
index 35bb1bbf..6d5c85c7 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/AddKeyCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/AddKeyCommand.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import java.io.IOException;
import java.util.ArrayList;
@@ -24,7 +24,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.transport.ssh.CommandMetaData;
-import com.gitblit.transport.ssh.IKeyManager;
/**
* Add a key to the current user's authorized keys list.
@@ -44,9 +43,8 @@ public class AddKeyCommand extends BaseKeyCommand {
public void run() throws IOException, UnloggedFailure {
String username = ctx.getClient().getUsername();
List<String> keys = readKeys(addKeys);
- IKeyManager keyManager = authenticator.getKeyManager();
for (String key : keys) {
- keyManager.addKey(username, key);
+ getKeyManager().addKey(username, key);
log.info("added SSH public key for {}", username);
}
}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/BaseKeyCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/BaseKeyCommand.java
index f92ea6f9..09099578 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/BaseKeyCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/BaseKeyCommand.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import java.io.BufferedReader;
import java.io.IOException;
@@ -21,7 +21,9 @@ import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.List;
+import com.gitblit.transport.ssh.IKeyManager;
import com.gitblit.transport.ssh.CachingPublicKeyAuthenticator;
+import com.gitblit.transport.ssh.commands.SshCommand;
import com.google.common.base.Charsets;
/**
@@ -29,7 +31,7 @@ import com.google.common.base.Charsets;
* Base class for commands that read SSH keys from stdin or a parameter list.
*
*/
-public abstract class BaseKeyCommand extends SshCommand {
+abstract class BaseKeyCommand extends SshCommand {
protected List<String> readKeys(List<String> sshKeys)
throws UnsupportedEncodingException, IOException {
@@ -55,4 +57,8 @@ public abstract class BaseKeyCommand extends SshCommand {
public void setAuthenticator(CachingPublicKeyAuthenticator authenticator) {
this.authenticator = authenticator;
}
+
+ protected IKeyManager getKeyManager() {
+ return authenticator.getKeyManager();
+ }
}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/CreateRepository.java b/src/main/java/com/gitblit/transport/ssh/gitblit/CreateRepository.java
index 20f69015..b2e1b1b0 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/CreateRepository.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/CreateRepository.java
@@ -14,11 +14,12 @@
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import org.kohsuke.args4j.Option;
import com.gitblit.transport.ssh.CommandMetaData;
+import com.gitblit.transport.ssh.commands.SshCommand;
@CommandMetaData(name = "create-repository", description = "Create new GIT repository", admin = true, hidden = true)
public class CreateRepository extends SshCommand {
diff --git a/src/main/java/com/gitblit/transport/ssh/gitblit/GitblitDispatchCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/GitblitDispatchCommand.java
new file mode 100644
index 00000000..544b204f
--- /dev/null
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/GitblitDispatchCommand.java
@@ -0,0 +1,38 @@
+/*
+ * Copyright 2014 gitblit.com.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.gitblit.transport.ssh.gitblit;
+
+import com.gitblit.models.UserModel;
+import com.gitblit.transport.ssh.CommandMetaData;
+import com.gitblit.transport.ssh.commands.DispatchCommand;
+
+@CommandMetaData(name = "gitblit", description = "Gitblit server commands")
+public class GitblitDispatchCommand extends DispatchCommand {
+
+ @Override
+ protected void registerCommands(UserModel user) {
+ // normal usage commands
+ registerCommand(user, VersionCommand.class);
+ registerCommand(user, AddKeyCommand.class);
+ registerCommand(user, RemoveKeyCommand.class);
+ registerCommand(user, LsCommand.class);
+ registerCommand(user, ReviewCommand.class);
+
+ // administrative commands
+ registerCommand(user, CreateRepository.class);
+ registerCommand(user, SetAccountCommand.class);
+ }
+}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/ListRepositoriesCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/LsCommand.java
index 7c58e7fc..cf50a2ee 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/ListRepositoriesCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/LsCommand.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import java.text.MessageFormat;
import java.text.SimpleDateFormat;
@@ -24,20 +24,71 @@ import org.kohsuke.args4j.Option;
import org.parboiled.common.StringUtils;
import com.gitblit.manager.IGitblit;
+import com.gitblit.models.ProjectModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.CommandMetaData;
+import com.gitblit.transport.ssh.commands.SshCommand;
-@CommandMetaData(name = "repositories", description = "List the available repositories")
-public class ListRepositoriesCommand extends SshCommand {
+@CommandMetaData(name = "ls", description = "List repositories or projects")
+public class LsCommand extends SshCommand {
+
+ @Option(name = "--projects", aliases = { "-p" }, usage = "list projects")
+ private boolean projects;
@Option(name = "--verbose", aliases = { "-v" }, usage = "verbose")
private boolean verbose;
@Override
public void run() {
+ if (projects) {
+ listProjects();
+ } else {
+ listRepositories();
+ }
+ }
+
+ protected void listProjects() {
+ IGitblit gitblit = ctx.getGitblit();
+ UserModel user = ctx.getClient().getUser();
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+
+ List<ProjectModel> projects = gitblit.getProjectModels(user, false);
+ int nameLen = 0;
+ int descLen = 0;
+ for (ProjectModel project : projects) {
+ int len = project.name.length();
+ if (len > nameLen) {
+ nameLen = len;
+ }
+ if (!StringUtils.isEmpty(project.description)) {
+ len = project.description.length();
+ if (len > descLen) {
+ descLen = len;
+ }
+ }
+ }
+
+ String pattern;
+ if (verbose) {
+ pattern = MessageFormat.format("%-{0,number,0}s\t%-{1,number,0}s\t%s", nameLen, descLen);
+ } else {
+ pattern = "%s";
+ }
+
+ for (ProjectModel project : projects) {
+ stdout.println(String.format(pattern,
+ project.name,
+ project.description == null ? "" : project.description,
+ df.format(project.lastChange)));
+ }
+ }
+
+ protected void listRepositories() {
IGitblit gitblit = ctx.getGitblit();
UserModel user = ctx.getClient().getUser();
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
+
List<RepositoryModel> repositories = gitblit.getRepositoryModels(user);
int nameLen = 0;
int descLen = 0;
@@ -53,7 +104,6 @@ public class ListRepositoriesCommand extends SshCommand {
}
}
}
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String pattern;
if (verbose) {
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/RemoveKeyCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/RemoveKeyCommand.java
index 90e70418..7c9abfd4 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/RemoveKeyCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/RemoveKeyCommand.java
@@ -13,7 +13,7 @@
* License for the specific language governing permissions and limitations under
* the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import java.io.IOException;
import java.util.ArrayList;
@@ -24,7 +24,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.gitblit.transport.ssh.CommandMetaData;
-import com.gitblit.transport.ssh.IKeyManager;
/**
@@ -47,13 +46,12 @@ public class RemoveKeyCommand extends BaseKeyCommand {
public void run() throws IOException, UnloggedFailure {
String username = ctx.getClient().getUsername();
List<String> keys = readKeys(removeKeys);
- IKeyManager keyManager = authenticator.getKeyManager();
if (keys.contains(ALL)) {
- keyManager.removeAllKeys(username);
+ getKeyManager().removeAllKeys(username);
log.info("removed all SSH public keys from {}", username);
} else {
for (String key : keys) {
- keyManager.removeKey(username, key);
+ getKeyManager().removeKey(username, key);
log.info("removed SSH public key from {}", username);
}
}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/ReviewCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/ReviewCommand.java
index b088a2e6..9e4d8ba7 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/ReviewCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/ReviewCommand.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import java.util.HashSet;
import java.util.Set;
@@ -26,6 +26,7 @@ import com.gitblit.models.TicketModel.Patchset;
import com.gitblit.models.TicketModel.Score;
import com.gitblit.models.UserModel;
import com.gitblit.transport.ssh.CommandMetaData;
+import com.gitblit.transport.ssh.commands.SshCommand;
import com.gitblit.wicket.GitBlitWebSession;
@CommandMetaData(name = "review", description = "Verify, approve and/or submit one or more patch sets", hidden = true)
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/SetAccountCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/SetAccountCommand.java
index 1f0d902b..28ac9e19 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/SetAccountCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/SetAccountCommand.java
@@ -12,7 +12,7 @@
//See the License for the specific language governing permissions and
//limitations under the License.
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import java.io.IOException;
import java.util.ArrayList;
@@ -23,7 +23,6 @@ import org.kohsuke.args4j.Argument;
import org.kohsuke.args4j.Option;
import com.gitblit.transport.ssh.CommandMetaData;
-import com.gitblit.transport.ssh.IKeyManager;
/** Set a user's account settings. **/
@CommandMetaData(name = "set-account", description = "Change an account's settings", admin = true)
@@ -69,19 +68,17 @@ public class SetAccountCommand extends BaseKeyCommand {
private void addSshKeys(List<String> sshKeys) throws UnloggedFailure,
IOException {
- IKeyManager keyManager = authenticator.getKeyManager();
for (String sshKey : sshKeys) {
- keyManager.addKey(user, sshKey);
+ getKeyManager().addKey(user, sshKey);
}
}
private void deleteSshKeys(List<String> sshKeys) {
- IKeyManager keyManager = authenticator.getKeyManager();
if (sshKeys.contains(ALL)) {
- keyManager.removeAllKeys(user);
+ getKeyManager().removeAllKeys(user);
} else {
for (String sshKey : sshKeys) {
- keyManager.removeKey(user, sshKey);
+ getKeyManager().removeKey(user, sshKey);
}
}
}
diff --git a/src/main/java/com/gitblit/transport/ssh/commands/VersionCommand.java b/src/main/java/com/gitblit/transport/ssh/gitblit/VersionCommand.java
index c2c4f52d..513f6d96 100644
--- a/src/main/java/com/gitblit/transport/ssh/commands/VersionCommand.java
+++ b/src/main/java/com/gitblit/transport/ssh/gitblit/VersionCommand.java
@@ -14,10 +14,11 @@
* limitations under the License.
*/
-package com.gitblit.transport.ssh.commands;
+package com.gitblit.transport.ssh.gitblit;
import com.gitblit.Constants;
import com.gitblit.transport.ssh.CommandMetaData;
+import com.gitblit.transport.ssh.commands.SshCommand;
@CommandMetaData(name="version", description = "Display the Gitblit version")
public class VersionCommand extends SshCommand {