mirror of
https://github.com/gitbucket/gitbucket.git
synced 2025-11-05 04:56:02 +01:00
55 lines
1.8 KiB
Scala
55 lines
1.8 KiB
Scala
package app
|
|
|
|
import java.io._
|
|
import javax.servlet._
|
|
import javax.servlet.http._
|
|
import util.Directory
|
|
import org.eclipse.jgit.api.Git
|
|
import org.eclipse.jgit.lib.Ref
|
|
import org.eclipse.jgit.http.server.GitServlet
|
|
|
|
/**
|
|
* Provides Git repository via HTTP.
|
|
*
|
|
* This servlet provides only Git repository functionality.
|
|
* Authentication is provided by [[app.BasicAuthenticationFilter]].
|
|
*/
|
|
class GitRepositoryServlet extends GitServlet {
|
|
|
|
override def init(config: ServletConfig): Unit = {
|
|
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
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Override GitServlet#service() to pull pushed changes to cloned repositories for branch exploring.
|
|
*/
|
|
override def service(request: HttpServletRequest, response: HttpServletResponse): Unit = {
|
|
super.service(request, response)
|
|
|
|
// TODO debug log
|
|
println(request.getMethod + ": " + request.getRequestURI)
|
|
|
|
// update branches
|
|
if(request.getMethod == "POST" && request.getRequestURI.endsWith("/git-receive-pack")){
|
|
request.getRequestURI
|
|
.replaceFirst("^" + request.getServletContext.getContextPath + "/git/", "")
|
|
.replaceFirst("\\.git/git-receive-pack$", "").split("/") match {
|
|
case Array(owner, repository) => Directory.updateAllBranches(owner, repository)
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|