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("--") } } }