diff options
author | James Moger <james.moger@gitblit.com> | 2014-03-17 21:23:44 -0400 |
---|---|---|
committer | James Moger <james.moger@gitblit.com> | 2014-04-10 18:58:09 -0400 |
commit | 9d44ade215922fd9e7bda7c604b31c31d217d750 (patch) | |
tree | f73dff5e26e2a8ce842a43c49439581c7a0f5ee1 /src/main/java/com/gitblit/transport/ssh | |
parent | 01b529edac600feb3c0750d27d0759b5f49fde72 (diff) | |
download | gitblit-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.java | 41 | ||||
-rw-r--r-- | src/main/java/com/gitblit/transport/ssh/commands/DispatchCommand.java | 65 | ||||
-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.java | 61 | ||||
-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.java | 38 | ||||
-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 { |