(refs #110) Add CommitHook sample

WIP: Some important functions are not implement yet.
This commit is contained in:
Tomofumi Tanaka
2014-03-01 02:09:24 +09:00
parent c5aee0810c
commit 2e236e90ba
2 changed files with 24 additions and 6 deletions

View File

@@ -8,6 +8,9 @@ import org.eclipse.jgit.api.Git
import util.Directory._ import util.Directory._
import org.eclipse.jgit.transport.{ReceivePack, UploadPack} import org.eclipse.jgit.transport.{ReceivePack, UploadPack}
import org.apache.sshd.server.command.UnknownCommand import org.apache.sshd.server.command.UnknownCommand
import servlet.{Database, CommitLogHook}
import service.SystemSettingsService.SystemSettings
import service.SystemSettingsService
class GitCommandFactory extends CommandFactory { class GitCommandFactory extends CommandFactory {
@@ -85,16 +88,25 @@ class GitUploadPack(command: String) extends GitCommand(command: String) {
} }
} }
class GitReceivePack(command: String) extends GitCommand(command: String) { class GitReceivePack(command: String) extends GitCommand(command: String) with SystemSettingsService {
override def runnable = new Runnable { override def runnable = new Runnable {
// TODO correct this info
val pusher: String = "user1"
val baseURL: String = loadSystemSettings().baseUrl.getOrElse("http://localhost:8080")
override def run(): Unit = { override def run(): Unit = {
using(Git.open(getRepositoryDir(owner, repositoryName))) { git => using(Git.open(getRepositoryDir(owner, repositoryName))) { git =>
val repository = git.getRepository val repository = git.getRepository
// TODO hook commit // TODO hook commit
val receive = new ReceivePack(repository) val receive = new ReceivePack(repository)
receive.receive(in, out, err) receive.setPostReceiveHook(new CommitLogHook(owner, repositoryName, pusher, baseURL))
callback.onExit(0) Database(SshServer.getServletContext) withTransaction {
receive.receive(in, out, err)
callback.onExit(0)
}
} }
} }
} }
} }

View File

@@ -1,6 +1,6 @@
package ssh package ssh
import javax.servlet.{ServletContextEvent, ServletContextListener} import javax.servlet.{ServletContext, ServletContextEvent, ServletContextListener}
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@@ -13,6 +13,9 @@ object SshServer {
private val server = org.apache.sshd.SshServer.setUpDefaultServer() private val server = org.apache.sshd.SshServer.setUpDefaultServer()
// TODO think other way to create database session
private var context: ServletContext = null
private def configure() = { private def configure() = {
server.setPort(DEFAULT_PORT) server.setPort(DEFAULT_PORT)
@@ -23,8 +26,9 @@ object SshServer {
server.setCommandFactory(new GitCommandFactory) server.setCommandFactory(new GitCommandFactory)
} }
def start() = { def start(context: ServletContext) = {
if (SSH_SERVICE_ENABLE) { if (SSH_SERVICE_ENABLE) {
this.context = context
configure() configure()
server.start() server.start()
logger.info(s"Start SSH Server Listen on ${server.getPort}") logger.info(s"Start SSH Server Listen on ${server.getPort}")
@@ -34,6 +38,8 @@ object SshServer {
def stop() = { def stop() = {
server.stop(true) server.stop(true)
} }
def getServletContext = this.context;
} }
/* /*
@@ -46,7 +52,7 @@ object SshServer {
class SshServerListener extends ServletContextListener { class SshServerListener extends ServletContextListener {
override def contextInitialized(sce: ServletContextEvent): Unit = { override def contextInitialized(sce: ServletContextEvent): Unit = {
SshServer.start() SshServer.start(sce.getServletContext())
} }
override def contextDestroyed(sce: ServletContextEvent): Unit = { override def contextDestroyed(sce: ServletContextEvent): Unit = {