Newer
Older
gitbucket_jkp / src / main / scala / servlet / GitRepositoryServlet.scala
@takezoe takezoe on 31 May 2013 2 KB Commit hook test.
package servlet

import org.eclipse.jgit.http.server.GitServlet
import org.eclipse.jgit.lib._
import org.eclipse.jgit.transport._
import org.eclipse.jgit.transport.resolver._
import org.slf4j.LoggerFactory

import javax.servlet.ServletConfig
import javax.servlet.ServletContext
import javax.servlet.http.HttpServletRequest
import util.Directory

/**
 * Provides Git repository via HTTP.
 * 
 * This servlet provides only Git repository functionality.
 * Authentication is provided by [[app.BasicAuthenticationFilter]].
 */
class GitRepositoryServlet extends GitServlet {

  private val logger = LoggerFactory.getLogger(classOf[GitRepositoryServlet])
  
  override def init(config: ServletConfig): Unit = {
    setReceivePackFactory(new GitBucketRecievePackFactory())
    
    // TODO are there any other ways...?
    super.init(new ServletConfig(){
      def getInitParameter(name: String): String = name match {
        case "base-path"  => Directory.RepositoryHome
        case "export-all" => "true"
        case name => config.getInitParameter(name)
      }
      def getInitParameterNames(): java.util.Enumeration[String] = {
        config.getInitParameterNames
      }
      
      def getServletContext(): ServletContext = config.getServletContext
      def getServletName(): String = config.getServletName
    });
  }
  
}

class GitBucketRecievePackFactory extends ReceivePackFactory[HttpServletRequest] {
  override def create(req: HttpServletRequest, db: Repository): ReceivePack = {
    val receivePack = new ReceivePack(db)
    
    println("----")
    println("contextPath: " + req.getContextPath)
    println("requestURI: " + req.getRequestURI)
    println("remoteUser:" + req.getRemoteUser)
    
    val userName = req.getSession.getAttribute("USER_INFO")
    println("userName: " + userName)
    
    println("----")
    
    receivePack.setPostReceiveHook(new CommitLogHook())
    receivePack
  }
}

import scala.collection.JavaConverters._

class CommitLogHook extends PostReceiveHook {
  def onPostReceive(receivePack: ReceivePack, commands: java.util.Collection[ReceiveCommand]): Unit = {
    println("**** hook ****")
    commands.asScala.foreach { command =>
      println(command.getRefName)
      println(command.getMessage)
      println(command.getRef().getName())
      println("--")
    }
    
    
  }
}